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配置文件的标签里的标签里设置。
4 public Enumeration getInitParameterNames();// 获取全部初始化参数,初始化参数同样需要在web.xml配置文件的标签里的标签里设置。

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 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配置文件的标签里设置。
12 public Enumeration getInitParameterNames();// 获取所有指定的初始化参数,初始化参数也需要在web.xml配置文件的标签里设置。
13 public boolean setInitParameter(String name, String value);// 设置初始化参数,效果同在web.xml配置文件的标签里设置的一样。
14 public Object getAttribute(String name);// 通过属性名获取属性对象。
15 public Enumeration 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页面中,完成多页面的合并。

ServletRequest接口

ServletRequest对象封装了请求数据,可以获取到请求信息。

ServletResponse接口

ServletResponse对象封装了响应数据,可以获取到响应信息。

HttpServletRequest接口

当客户端通过HTTP协议访问时,HttpServletRequest对象封装了来自客户端的HTTP请求,使用这个对象可以获取到客户端的请求信息。

常用方法:

 1 //获取协议信息
 2 public String getProtocol();// 获取协议信息的版本号,如HTTP/1.1。
 3 public String getScheme();// 获取协议名称,如HTTP、FTP。
 4 //获取转发器
 5 public RequestDispatcher getRequestDispatcher(String path);// 获取指定地址的转发器。
 6 //操作属性
 7 public void setAttribute(String name, Object object);// 设置属性名和属性对象。
 8 public Object getAttribute(String name);// 通过属性名获取属性对象。
 9 public Enumeration getAttributeNames();// 得到全部的属性名。
10 public void removeAttribute(String name);// 通过属性名删除属性对象。
11 //获取参数
12 public String getParameter(String name);// 通过参数名获取参数值。
13 public Map getParameterMap();// 将所有参数名和参数值以Map的形式返回。
14 public Enumeration getParameterNames();// 获取全部参数名。
15 public String[] getParameterValues(String name);// 通过参数名获取数组类型的参数值。
16 //操作请求体
17 public String getCharacterEncoding();// 获取请求体中Servlet的编码方式。
18 public void setCharacterEncoding(String env) throws java.io.UnsupportedEncodingException;// 设置请求体中Servlet的编码方式。
19 public int getContentLength();// 获取请求体的长度。
20 public String getContentType();// 获取请求体的MIME类型,包括编码。
21 public ServletInputStream getInputStream() throws IOException;// 将请求体封装为二进制的流文件。
22 public BufferedReader getReader() throws IOException;// 将请求体封装为字符类型的流文件。
23 public boolean isSecure();// 是否使用的安全协议,如HTTPS。
24 //获取服务器信息
25 public int getServerPort();// 获取服务器的端口号。
26 public String getServerName();// 获取服务器的主机名。
27 public Locale getLocale();// 获取本地位置信息,若ZHCN等等。
28 public Enumeration getLocales();// 使用枚举获取服务器的多个位置信息。
29 public String getLocalAddr();// 获取本地地址,根据访问方法不同而不同,为127.0.0.1或者公网ip。
30 public String getLocalName();// 获取本地IP的名称,如127.0.0.1就是localhost。
31 public int getLocalPort();// 获取端口号,本应用就是8081。
32 //获取客户端信息
33 public String getRemoteAddr();// 获取客户端的IP地址。
34 public String getRemoteHost();// 获取客户端的主机名。
35 public int getRemotePort();// 获取客户端的端口号。
36 //得到请求头信息(HttpServletRequest独有的)
37 public int getIntHeader(String name);// 得到整形单值的请求头的值。
38 public long getDateHeader(String name);// 得到毫秒类型单值的请求头。
39 public String getHeader(String name);// 得到字符串类型单值的请求头的值。
40 public Enumeration getHeaders(String name);// 返回枚举得到多值的请求头的值。
41 public Enumeration getHeaderNames();// 返回枚举得到所有请求头的名称。
42 //得到常用信息(HttpServletRequest独有的)
43 public String getMethod();// 得到请求方式。
44 public String getContextPath();// 获取项目的根目录名。返回指定上下文(web应用)的URL的前缀,比如/BookStore。
45 public String getServletPath();// URL中调用Servlet的那一部分,不包含附加路径信息,比如/BookServlet。
46 public String getQueryString();// 获取URL后面全部的查询字符串参数。
47 public String getRequestURI();// 获取请求URI,不包含请求内容,不包含域名。
48 public StringBuffer getRequestURL();// 获取URL,包含域名,不包含请求内容。未被Servlet服务器Decode过。
49 public String getRequestedSessionId();// 返回这个请求相应的SessionId。
50 public HttpSession getSession();// 获取Session对话,用于与网页通信。
51 public Cookie[] getCookies();// 返回使用数组存储的Cookie对象。

HttpServletResponse接口

当客户端通过HTTP协议访问时,HttpServletResponse对象封装了来自服务端的HTTP响应,使用这个对象可以获取到服务端发送给客户端的响应信息。

常用方法:

 1 //获取缓冲信息
 2 public void flushBuffer() throws IOException;// 强制刷新缓冲区的内容到客户端,之后如果调用forward方法将报异常。
 3 public void resetBuffer();// 只清除缓冲。
 4 public void reset();// 清除缓冲、状态码、头信息,设置页面不缓存。
 5 public int getBufferSize();// 返回响应使用的缓冲区使用的实际大小。
 6 public void setBufferSize(int size);// 设置缓冲区的大小。
 7 //设置响应信息
 8 public void setContentLength(int len);// 设置响应体的长度。
 9 public void setContentType(String type);// 设置响应的编码格式,并通知浏览器使用该方式解码。
10 public String getCharacterEncoding();// 设置响应体中MIME的编码方式。
11 public ServletOutputStream getOutputStream() throws IOException;// 返回使用二进制流包装的响应。
12 public PrintWriter getWriter() throws IOException;// 返回使用字符流包装的文本给客户端。
13 public boolean isCommitted();// 判断响应是否已被提交或完成。
14 //获取本地信息
15 public Locale getLocale();// 获取响应的本地信息。
16 public void setLocale(Locale loc);// 设置本地响应信息,包括要使用什么解码。
17 //设置响应头信息(HttpServletRequest独有的)
18 public void setIntHeader(String name, int value);// 设置整形单值的响应头的值。
19 public void addIntHeader(String name, int value);// 设置整形多值的响应头的值。
20 public void setDateHeader(String name, long date);// 设置毫秒类型单值的响应头的值。
21 public void addDateHeader(String name, long date);// 设置毫秒类型多值的响应头的值。
22 public void setHeader(String name, String value);// 设置字符串类型单值的响应头的值。
23 public void addHeader(String name, String value);// 设置字符串类型多值的响应头的值。
24 public boolean containsHeader(String name);// 返回一个布尔值,判断响应的头部是否被设置。
25 //得到响应头信息(HttpServletRequest独有的)
26 public String getHeader(String name);// 获取字符串类型多值的响应头的值。
27 public Collection getHeaders(String name);//返回集合得到多值的响应头的值。
28 public Collection getHeaderNames();//返回集合得到所有响应头的名称。
29 //设置状态信息(HttpServletResponse独有的)
30 public void sendError(int sc) throws IOException;// 设置错误状态返回的状态码。
31 public void sendError(int sc, String msg) throws IOException;// 设置错误状态返回的状态码及描述信息。
32 public void setStatus(int sc);// 设置状态码。
33 public int getStatus();// 获取状态码。
34 //其他设置(HttpServletResponse独有的)
35 public void addCookie(Cookie cookie);// 添加Cookie对象。
36 public String encodeRedirectURL(String url);// 通过指定的编码对URL进项编码,并携带sessionid,跨应用。
37 public String encodeURL(String url);// 通过指定的编码对URL进项编码,并携带sessionid,本应用。
38 public void sendRedirect(String location) throws IOException;// 进行重定向。

你可能感兴趣的:(JavaWeb学习——Servlet相关的接口和类)