目录
3.4 HttpServletRequest与HttpServletResponse的方法
1.Servlet
1.1 Servlet的生命周期(重要)
描述Servlet从生到死的过程:
-
Servlet默认创建是在第一次请求的时候创建( 第一次惩罚: 耗时多一点: 多了创建Servlet对象的过程)
-
调用init() 方法, 做初始化
-
每请求一次, Servlet的service() 执行一次, 处理用户请求
-
当服务器关闭时候, 先销毁该tomcat创建所有的Servlet, 销毁Servlet对象之前, 调用destroy()方法
1.2 Servlet接口相关类型
在Servlet接口中还存在三个我们不熟悉的类型:
ServletRequest:service() 方法的参数,它表示请求对象,它封装了所有与请求相关的数据,它是由服务器创建的;
ServletResponse:service()方法的参数,它表示响应对象,在service()方法中完成对客户端的响应需要使用这个对象;
ServletConfig:init()方法的参数,它表示Servlet配置对象,它对应Servlet的配置信息,那对应web.xml文件中的
<servlet>元素。
1.2.1ServletConfig 对应Servlet的配置
<servlet>
<!--Servlet名称: 自定义, 推荐类名 -->
<servlet-name>AServlet</servlet-name>
<!--对应的Servlet类: 全限定名(包.类名)-->
<servlet-class>com.fs.web.AServlet</servlet-class>
</servlet>
<!--绑定url
Servlet类与url的映射
-->
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<!--绑定的url
自定义
推荐使用 /类名
后面还有通配符 * 写法
-->
<url-pattern>/AServlet</url-pattern>
</servlet-mapping>
ServletConfig对象是由服务器创建的,然后传递给Servlet的init()方法,你可以在init()方法中使用它!

修改web.xml文件,一定要重启服务器, 热部署失效
1.2.2ServletRequest
ServletRequest 请求对象, 当用户发起请求时, Tomcat会为这次请求创建一个请求, 请求对象包含很多信息(客户端的信息ip,端口, 请求url,请求参数), tomcat服务器处理请求时,创建一个线程来处理, 服务器这边是多线程服务
1.2.3ServletResponse
ServletResponse: 响应对象, 当用户发起请求, tomcat除了创建请求对象,还会创建响应对象, 由服务器给客户端数据通过响应对象传递的
2.GenericServlet
2.1GenericServlet概述
GenericServlet是Servlet接口的实现类,我们可以通过继承GenericServlet来编写自己的Servlet。 它把Servlet的其他四个方法都实现了, 把service()变成抽象方法。
2.2实现了ServletConfig接口
GenericServlet还实现了ServletConfig接口,所以可以直接调用getInitParameter()、getServletContext()等ServletConfig的方法。
3.HttpServlet(推荐使用)
3.1 HttpServlet概述
HttpServlet类是GenericServlet的子类,它提供了对HTTP请求的特殊支持,所以通常我们都会通过继承HttpServlet来完成自定义的Servlet。
3.2HttpServlet覆盖了service()方法
HttpServlet类中提供了service(HttpServletRequest,HttpServletResponse)方法,这个方法是HttpServlet自己的方法,不是从Servlet继承来的。

3.3doGet()和doPost()
在HttpServlet的service(HttpServletRequest,HttpServletResponse)方法会去判断当前请求是GET还是POST,如果是GET请求,那么会去调用本类的doGet()方法,如果是POST请求会去调用doPost()方法,这说明我们在子类中去覆盖doGet()或doPost()方法即可。
public class AServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("hello doGet()...");
}
}
public class BServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("hello doPost()...");
}
}
3.4 HttpServletRequest与HttpServletResponse的方法
3.4.1HttpServletRequest方法:
String getParameter(String paramName):获取指定请求参数的值;(重点)
String getMethod():获取请求方法,例如GET或POST;
String getHeader(String name):获取指定请求头的值;
3.4.2HttpServletResponse方法:
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=百度一下,你就知道”),表示3秒后自动刷新到百度一下,你就知道;
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, “就是逗你玩!”)。
本文介绍了Servlet的三种实现方式:Servlet、GenericServlet和HttpServlet,重点讲解了Servlet的生命周期、ServletConfig、HttpServletRequest与HttpServletResponse。特别指出,HttpServlet是推荐的实现方式,其覆盖了service()方法,并提供了doGet()和doPost()方法用于处理HTTP请求。

1221

被折叠的 条评论
为什么被折叠?



