让我们复习并细化一下Servlet容器处理请求的过程。
1)用户点击一个链接,指向了一个servlet而不是一个静态页面。
2)容器“看出”这个请求是一个Servlet,所以它创建了两个对象HttpServletRequest和HttpServletResponse。
3)容器根据请求中的URL找到正确的Servlet,为这个请求创建或分配一个线程,并把请求和响应对象传递给这个Servlet线程。
4)容器调用Servlet的service()方法。根据请求的不同类型,service()方法会调用doGet()或doPost()方法。这里假设调用doGet()方法。
5)doGet()方法生成动态页面,并把这个页面“塞到”响应对象里,需要注意的是,容器还有响应对象的一个引用!
6)线程结束,容器把响应对象转换为一个HTTP响应,并把它发回给客户,然后删除请求和响应对象。
Servlet接口
Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet、HttpServlet<继承自GenericServlet>。
HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。
HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不要去覆写service方法。
Servlet开发的一些细节,比如:URL映射配置,通配符,缺省Servlet参见链接http://www.cnblogs.com/xdp-gacl/p/3760336.html
ServletConfig参数
一个servlet的配置对象,用来给servlet容器传递信息到servlet,在Servlet初始化的时候。
当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,我们通过ServletConfig对象就可以得到当前servlet的初始化参数信息。
ServletContext对象
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
涉及到不同用户共享数据,而这些数据数据量不打同时又不希望写入到数据库中,可以考虑用ServletContext实现
- 网站计数器
- 网站在线用户的显示
- 简单地聊天系统
作用:
1. 多个Servlet通过ServletContext对象实现数据共享
ServletContext context = this.getServletConfig().getServletContext();//获得ServletContext对象
context.setAttribute("data", data); //将data存储到ServletContext对象中
<pre> ServletContext context = <span style="color:#0000ff;">this</span><span style="color:#000000;">.getServletContext();
</span> String data = (String) context.getAttribute("data");<span style="color:#008000;">//</span><span style="color:#008000;">从ServletContext对象中取出数据</span>
2.获取WEB应用的初始化参数
3.实现请求转发
RequestDispatcher rd = servletContext.getRequestDispatcher("/servet2");//转发不添加资源名WEB-INF/
rd.forward(request, response);
4. 读取资源文件(读取web目录下和web-inf下的文件)
5.获取资源路径
String path = this.getServletContext().getRealPath("/img/aa.jpg");
ServletContext的更多代码可以参考上面ServletConfig的两个链接。
实现网络计数器
思路分析:
使用ServletContext 和 记事本两个东西,将登陆的次数写在txt文件中,首先是在在登陆的条件下 利用Servlet的init()函数初始化打开txt计数器文件并读取然后在用户登录后的过程中访问网站不会再重复技术只计数一次,直到注销之后destroy()然后计数器文件加1;
链接:http://blog.csdn.net/xlgen157387/article/details/38977865