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

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

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

Servlet的接口和类

三种方式

实现Servlet有三种方式:java

实现javax.servlet.Servlet接口。程序员

继承javax.servlet.GenericServlet类。web

继承javax.servlet.http.HttpServlet类。服务器

实现Servlet接口

Servlet接口是最基础的接口,若是要使用Servlet,就要实现这个接口,或者继承其余已经实现了这个接口的类。app

建立一个类并实现Servlet接口:ide

 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类。spa

在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页面中,完成多页面的合并。

相关文章
相关标签/搜索