在Web应用体系结构中,咱们知道,容器控制Servlet的生命周期,负责封装用户请求给特定的Servlet。Servlet的具体职能以下:segmentfault
HTTP中的各类方法对应HttpServlet方法服务器
使用HttpServletRequest接口获取请求首部多线程
使用HttpServletResponse接口设置相应首部、设置响应内容类型、使用流、URL重定向url
拥有生命周期线程
Servlet的一辈子:
寻找类->加载类->构造对象->init()变成真正的Servletcode
Web容器->Servlet类: 加载.class Web容器->Servlet对象: 构造方法 Web容器->Servlet对象: init()只执行一次哦 Web容器->Servlet对象: service()能够反复执行(多线程) Web容器->Servlet对象: destory()
Servlet生命中的三大重要时刻:中间件
方法 | 什么时候调用 | 做用 | 是否可覆盖 |
---|---|---|---|
init() | Servlet实例建立之后,提供服务前 | 初始化Servlet,只运行一次 | 能够 |
service() | 第一个客户请求到达时 | 肯定调用何种方法,有本身的栈 | 不能够 |
doGet()/doPost() | service()判断之后 | 处理客户端请求 | 至少要覆盖一个 |
咱们知道,Servlet主要是对请求/响应模型进行实现,所以,HttpServlet中重要的方法:
请求:对象
getHeader(String name)接口
getRemotePort()生命周期
...
响应:
setContentType(String contentType)
setHeader(String name, String value)
getOutputSream()
getWriter()
setRedirect(String url)
...
咱们的Servlet能够本身处理请求-响应细节,也能够把请求委托给其它中间件(服务器、Servlet)
转发:URL不变,委托其它人(服务器内部跳转)
重定向:直接将请求定向到其它URL(让客户端二次请求)
p.s. 不能再响应以后(已经往流里写东西了),sendRedirect()
既然咱们说到URL,URL也是有相对URL和绝对URL,因而,
// 下面是使用相对URL response.sendRedirect("<someurl>"); // 下面是使用绝对URL,从项目根寻址 response.sendRedirect("/someurl");