接口:Servlet、ServletConfig、ServletRequest、ServletResponse、HttpServletRequest、HttpServletResponse、ServletContext
类:HttpServlet(抽象类)、GenericServlet(抽象类)
来张关系图
ServletContext:
ServletContext的对象是application是在项目初始化时被创建的。故servletContext随着应用初始化而被创建,随着应用的结束而被销毁。
ServletConfig :
在应用初始化的时候,Web容器在创建Servlet对象时会自动将web.xml中的servlet配置这些初始化参数封装到ServletConfig对象中,并在调用servlet
的init方法时,将ServletConfig对象传递给servlet。所以我们可以通过ServletConfig对象就可以得到当前servlet的初始化参数信息。
Servlet:
初始化有两种情况:
一、随应用初始化时初始化,即在web.xml中设置<load-on-startup>参数</load-on-startup>,参数为整数值并且大于0,而且值越少,优先级越高。
在springmvc项目中经常会用到这个配置
二、在应用运行中时,servlet被客户端请求时初始化。
servlet销毁:
servlet自身调用destroy()方法、servlet容器停止运行、项目停止运行都会销毁该servlet实例。
ServletRequest:
ServletRequest的对象是request,其生命周期为request域,一个请求结束,则request对象结束。
ServletResponse:
ServletResponse的对象是response,一次响应结束,则response对象结束。
HttpServlet和HttpServletRequest、HttpServletResponse
他们之间的关系就好像Servlet和ServletRequest、ServletResponse之间的关系一样,只不过做了少部分封装而已
(附加)请求的响应方式有四种:
request.getRequestDispatcher("*.jsp").forward(request, response) //转发
response.sendRedirect("*.jsp")//重定向
response.getOutputStream()//流
response.getWriter()//直接响应
这里说一下关于重定向需要主要的一点:
当用到重定向方式响应时,不能通过request来传递参数,因为重定向会引发request过期。
原因:
转发:①客户端请求。②服务器响应。
重定向:①客户端请求。②服务器响应并告知客户端重新请求要重定向的地址。①客户端再次请求。②服务器响应。
一个请求一个对应的request对象,所以在重定向中,返回给用户的已不是原来那个request对象了。