继续servlet理论篇

唉,毕业是件很麻烦的事情,实习也是一件很郁闷的事情,现在公司很注重基础,所以 所以还要看java,不过,我年轻,我有激情。来吧,来着不惧,说这话,有些心虚。

HttpServlet类中所提供的doGet和doPost等方法没有写任何有用信息,都只是直接返回错误信息,所以,我么需要在自己定义的servlet类中重写(override)这些方法。

1.servlet的响应客户请求阶段:

  对于到达servlet容器的客户请求,servlet容器创建特定于这个请求的servletRequest对象和servletResponse对象,然后调用servlet的service方法,service方法从servletRequest对象中获取用户信息。处理该请求,并通过servletResponse对象向客户返回响应结果供用户查看

2.hashtable和hashmap在servlet中应用

getParameter使用的是hashtable

setAttribute和getAttribute使用的是hashmap

hashtable是线程同步的(即读写同步)线程安全

hashmap是非同步的,即线程不安全

3.servlet的终止阶段:

a.web应用程序终止

b.servlet容器重新加载servlet的新实例(例如servlet类被修改则为重新加载)

c.servlet终止运行

这三种终止运行时,都会先调用destory方法,释放servlet所占用的资源

servletContext和web应用关系

   当servlet启动外部应用时,他会为每个web应用创建唯一的servletContext对象(服务器端创建),你可以把servletContext看成是一个web应用的服务器组件的共享内存,在servletContext中可以存放共享数据,他提供了读取或设置共享数据的方法

servletContext对象具有的方法:

--setAttribute(String name,Object o)把一个对象和一个属性名绑定,将这个对象存储在servletContext中

--getAttribute(string name)根据指定的属性名返回绑定的对象

在doGet方法中,要使用servletContext,首先要用req.getSession().getServletContext()方法获取,是获取http内部的session

  servlet/jsp是多线程执行,在多线程执行出现bug是很难重现的。原因:servlet是单实例的,多个访问公用一个成员变量。当多个用户同时访问的时候,在后台去处理用户请求才会给予响应,在相应处理之后,setAttribute(),将值放进去,因为名字是一样的,所以直接覆盖掉。

原文地址:https://www.cnblogs.com/feiguo/p/3801777.html