欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaWeb学习——Servlet相关的接口和类

程序员文章站 2022-05-23 22:06:12
JavaWeb学习——Servlet相关的接口和类 摘要:本文主要学习了Servlet相关的接口和类。 Servlet的接口和类 三种方式 实现Servlet有三种方式: 实现javax.servlet.Servlet接口。 继承javax.servlet.GenericServlet类。 继承ja ......

javaweb学习——servlet相关的接口和类

摘要:本文主要学习了servlet相关的接口和类。

servlet的接口和类

三种方式

实现servlet有三种方式:

实现javax.servlet.servlet接口。

继承javax.servlet.genericservlet类。

继承javax.servlet.http.httpservlet类。

实现servlet接口

servlet接口是最基础的接口,如果要使用servlet,就要实现这个接口,或者继承其他已经实现了这个接口的类。

创建一个类并实现servlet接口:

 1 public class testservlet implements servlet {
 2     @override
 3     public servletconfig getservletconfig() {
 4         return null;
 5     }
 6 
 7     @override
 8     public string getservletinfo() {
 9         return null;
10     }
11 
12     @override
13     public void service(servletrequest req, servletresponse res) throws servletexception, ioexception {
14         system.out.println("service()方法被执行……");
15     }
16 
17     @override
18     public void init(servletconfig config) throws servletexception {
19         system.out.println("init()方法被执行……");
20     }
21 
22     @override
23     public void destroy() {
24         system.out.println("destroy()方法被执行……");
25     }
26 }

继承genericservlet类

genericservlet类实现并重写了servlet接口的一些方法,使得程序员在开发的时候只需要关注service()方法的实现就好。

创建一个类并继承genericservlet类:

1 public class testservlet extends genericservlet {
2     @override
3     public void service(servletrequest req, servletresponse res) throws servletexception, ioexception {
4         system.out.println("service()方法被执行……");
5     }
6 }

继承httpservlet类 

httpservlet类继承了genericservlet类,是对http请求的特殊支持,由于开发的项目一般遵循http协议,所以经常使用的是httpservlet类。

在httpservlet的service(httpservletrequest, httpservletresponse)方法会去判断当前请求是get还是post,如果是get请求,那么会去调用本类的doget()方法,如果是post请求会去调用dopost()方法,这说明在子类中去重写doget()或dopost()方法即可。

创建一个类并继承httpservlet类:

 1 public class testservlet extends httpservlet {
 2     @override
 3     protected void doget(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
 4         super.doget(req, resp);
 5     }
 6     
 7     @override
 8     protected void dopost(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
 9         super.dopost(req, resp);
10     }
11 }

其他的接口和类

servletconfig接口

代表当前servlet的配置信息,封装了servletcontext对象和配置参数信息。

可以通过servlet里面的getservletconfig()方法获取:

1 public servletconfig getservletconfig();

常用方法:

1 public string getservletname();// 获取当前servlet的友好名称。
2 public servletcontext getservletcontext();// 获取servletcontext对象。
3 public string getinitparameter(string name);// 获取初始化参数,初始化参数可以在web.xml配置文件的<servlet></servlet>标签里的<init-param></init-param>标签里设置。
4 public enumeration<string> getinitparameternames();// 获取全部初始化参数,初始化参数同样需要在web.xml配置文件的<servlet></servlet>标签里的<init-param></init-param>标签里设置。

servletcontext接口

代表当前web应用,服务器为每个web应用程序都创建一个对应的servletcontext对象,被所有客户端共享。当web应用启动时自动创建,当web应用关闭和重新启动、服务器关闭时都会造成servletcontext销毁。

可以通过servletconfig里面的getservletcontext()方法获取:

1 public servletcontext getservletcontext();

常用方法:

 1 public string getservletcontextname();// 获取当前项目的名称。
 2 public string getserverinfo();// 返回servlet容器名称和版本号。
 3 public servletcontext getcontext(string uripath);// 通过路径获取servletcontext对象。
 4 public string getcontextpath();// 获取服务器上当前项目的相对目录。比如:/helloworld。
 5 public string getrealpath(string path);// 得到指定文件的真实路径,从应用程序根目录开始。比如:testservlet得到的是盘符:\文件夹\工作空间\项目名称\webcontent\testservlet。
 6 public set<string> getresourcepaths(string path);// 得到指定相对路径下的文件夹名和文件名,从应用程序根目录开始,指定路径必须以/开头。比如:/得到的是应用程序根目录下的内容。
 7 public url getresource(string path) throws malformedurlexception;// 得到指定相对路径下的地址,从应用程序根目录开始。比如:/得到的是jndi:/域名/项目名/。
 8 public inputstream getresourceasstream(string path);// 将指定文件转化为流以便读取,从应用程序根目录开始。比如:index.html可以获取到应用程序根目录下的index.html并转为流。
 9 public requestdispatcher getrequestdispatcher(string path);// 创建跳转到指定路径的转发器,从应用程序根目录开始,指定路径必须以/开头。
10 public requestdispatcher getnameddispatcher(string name);// 创建跳转到指定servlet名的转发器,不需要也不能以/开头。
11 public string getinitparameter(string name);// 获取指定的初始化参数,初始化参数需要在web.xml配置文件的<context-param></context-param>标签里设置。
12 public enumeration<string> getinitparameternames();// 获取所有指定的初始化参数,初始化参数也需要在web.xml配置文件的<context-param></context-param>标签里设置。
13 public boolean setinitparameter(string name, string value);// 设置初始化参数,效果同在web.xml配置文件的<context-param></context-param>标签里设置的一样。
14 public object getattribute(string name);// 通过属性名获取属性对象。
15 public enumeration<string> getattributenames();// 获取全部属性名。
16 public void setattribute(string name, object object);// 设置属性名和属性对象。
17 public void removeattribute(string name);// 通过属性名删除属性对象。

requestdispatcher接口

requestdispatcher实例对象是由servlet引擎创建的,用于包装一个要被其他资源调用的资源,并可以通过其中的方法将客户端的请求转发给所包装的资源。

requestdispatcher接口中定义了两个方法:forward()方法和include()方法。forward()和include()方法接收的两个参数,必须是传递给当前servlet的service()方法的servletrequest和servletresponse对象,或者是对它们进行了包装的servletrequestwrapper和servletresponsewrapper对象。

可以通过servletcontext对象的getrequestdispatcher()方法和getnameddispatcher()方法获取:

1 public requestdispatcher getrequestdispatcher(string path);
2 public requestdispatcher getnameddispatcher(string name);

请求转发:

1 // 该方法用于将请求从一个servlet传递到服务器上另外的servlet、jsp页面或者html文件,由当前的servlet发送给另一个servlet,该方法必须在响应被提交给客户端之前调用。
2 // 在当前的servlet中可以给请求设置属性,设置的响应头信息不回被忽略,但是设置的响应体信息可能会被忽略。
3 public void forward(servletrequest request, servletresponse response) throws servletexception, ioexception;

请求包含:

1 // 该方法用于在响应中包含servlet、jsp页面或者html文件,由当前的servlet发送给客户端,必须要在当前servlet中设置编码格式。
2 // 当前servlet和要包含的资源都可以设置响应体,按先后顺序输出到客户端。
3 public void include(servletrequest request, servletresponse response) throws servletexception, ioexception;

请求转发与请求包含比较:

请求转发大多是应用在servlet中,转发目标大多是jsp页面。

请求包含大多是应用在jsp页面中,完成多页面的合并。