JavaWeb学习——Servlet相关的接口和类
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页面中,完成多页面的合并。