关于 servlet的生命周期:
1.客户端向Servlet容器(TOMCAT)发送HTTP请求
2.Sevlet容器接收客户端的请求
3.Servlet容器创建HttpRequest对象 HttpRequestt对象封装了客户端的所有信息
4.Servlet容器创建HttpResponse对象
5.Servlet窗口调用HttpServlet对象的service方法,将HttpRequest对象和httpResponse对象作为参数传给HttpServlet对象
6.HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息
7.HttpServlet调用HttpResponse对象的有关方法,生成响应数据
8.Servlet容器把HttpServlet的响应结果传给Web Client
关于servletContext对象
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
ServletContext sc=req.getSession().getServletContext();
由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
sc.setAttribute();
可以在任何servlet中获取
通过sc.getAttribute();来获取共享的内容
关于请求转发fowar和include的区别
forward方法是把请求的内容转发到另外的一个servlet.而include是把另一个servlet处理过后的内容拿过来.
(forward方法调用后在响应中的没有提交的内容被自动消除。将请求转发给其他的Servlet后,由
被调用的Servlet负责对请求做出响应,而原先Servlet的执行则终止。
include方法使原先的Servlet和转发到的Servlet都可以输出响应信息,即原先的Servlet还可以继续输出响应信息)
public class UserServlet extends HttpServlet {
public void service(HttpServletRequest req,HttpServletResponse res)throws ServletException, IOException{
res.getWriter().print("mu miaozhi xiang");
req.getRequestDispatcher("test").include(req,res);//forward(req,res)
}
}
public class Test extends HttpServlet {
public void service(HttpServletRequest req,HttpServletResponse res){
res.setCharacterEncoding("UTF-8");
try {
res.getWriter().print("xin zhi xiang");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}