共计 3112 个字符,预计需要花费 8 分钟才能阅读完成。
一、概述
在 Servlet 接口中还存在三个我们不熟悉的类型:
ServletRequest:service() 方法的参数,它表示 请求对象,它封装了所有与请求相关的数据,它是由服务器创建的;
ServletResponse:service()方法的参数,它表示 响应对象 ,在 service() 方法中完成对客户端的响应需要使用这个对象;
ServletConfig:init()方法的参数,它表示 Servlet 配置对象,它对应 Servlet 的配置信息,那对应 web.xml 文件中的
二、ServletRequest 和 ServletResponse
ServletRequest 和 ServletResponse 是 Servlet#service() 方法的两个参数,一个是请求对象,一个是响应对象,可以从 ServletRequest 对象中获取请求数据,可以使用 ServletResponse 对象完成响应。你以后会发现,这两个对象就像是一对恩爱的夫妻,永远不分离,总是成对出现。
ServletRequest 和 ServletResponse 的实例由服务器创建,然后传递给 service()方法。如果在 service() 方法中希望使用 HTTP 相关的功能,那么可以把 ServletRequest 和 ServletResponse 强转成 HttpServletRequest 和 HttpServletResponse。这也说明我们经常需要在 service()方法中对 ServletRequest 和 ServletResponse 进行强转,这是很心烦的事情。不过后面会有一个类来帮我们解决这一问题的。
HttpServletRequest 方法
String getParameter(String paramName):获取指定请求参数的值;
String getMethod():获取请求方法,例如 GET 或 POST;
String getHeader(String name):获取指定请求头的值;
void setCharacterEncoding(String encoding):设置请求体的编码!因为 GET 请求没有请求体,所以这个方法只只对 POST 请求有效。当调用 request.setCharacterEncoding(“utf-8”)之后,再通过 getParameter()方法获取参数值时,那么参数值都已经通过了转码,即转换成了 UTF- 8 编码。所以,这个方法必须在调用 getParameter()方法之前调用!
HttpServletResponse 方法
PrintWriter getWriter():获取字符响应流,使用该流可以向客户端输出响应信息。例如
response.getWriter().print(“<h1>Hello JavaWeb </h1>”);
ServletOutputStream getOutputStream():获取字节响应流,当需要向客户端响应字节 数据时,需要使用这个流,例如要向客户端响应图片;
void setCharacterEncoding(String encoding):用来设置字符响应流的编码,例如在调用 setCharacterEncoding(“utf-8”); 之后,再 response.getWriter()获取字符响应流对象,这时的响应流的编码为 utf-8,使用 response.getWriter()输出的中文都会转换成 utf- 8 编码后发送给客户端;
void setHeader(String name, String value):向客户端添加响应头信息,例如 setHeader(“Refresh”,“3;url=http://www.baidu.com”),表示 3 秒后自动刷新到 http://www.baidu.com;
void setContentType(String contentType):该方法是 setHeader(“content-type”,“xxx”)的简便方法,即用来添加名为 content-type 响应头的方法。content-type 响应头用来设置响应数据的 MIME 类型,例如要向客户端响应 jpg 的图片,那么可以 setContentType(“image/jepg”),如果响应数据为文本类型,那么还要同时设置编码,例如 setContentType(“text/html;chartset=utf-8”)表示响应数据类型为文本类型中的 html 类型,并且该方法会调用 setCharacterEncoding(“utf-8”)方法;
void sendError(int code, String errorMsg):向客户端发送状态码,以及错误消息。例如给客户端发送 404:response(404,“您要查找的资源不存在!”)。
三、ServletConfig
ServletConfig 对象对应 web.xml 文件中的
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>
com.tyschool.servlet.demo.HelloServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
ServletConfig 对象是由服务器创建的,然后传递给 Servlet 的 init()方法,你可以在 init()方法中使用它!
String getServletName():获取 Servlet 在 web.xml 文件中的配置名称,
即
ServletContext getServletContext():用来获取 ServletContext 对象,ServletContext 会在后面讲解;
String getInitParameter(String name):用来获取在 web.xml 中配置的初始化参数,通过参数名来获取参数值;
Enumeration getInitParameterNames():用来获取在 web.xml 中配置的所有初始化参数名称;
在
<servlet>
<servlet-name>One</servlet-name>
<servlet-class>cn.itcast.servlet.OneServlet</servlet-class> <init-param>
<param-name>paramName1</param-name>
<param-value>paramValue1</param-value>
</init-param>
<init-param>
<param-name>paramName2</param-name>
<param-value>paramValue2</param-value>
</init-param>
</servlet>
可以使用 ServletConfig 对象的 getInitParameter() 方法来获取初始化参数,
例如:
String value1 = servletConfig.getInitParameter(“paramName1”);
// 获取到 paramValue1 配置了两个初始化参数