servlet总结
- 格式:doc
- 大小:30.50 KB
- 文档页数:3
客户端请求容器中的资源,若该资源指向了一个servlet,容器则去寻找该servlet对象,若没有,则创建一个。
调用init方法为该对象进行初始化。
init方法只会被掉用一次。
若有这个对象,则直接为这个对象分配一个新的线程。
掉用servlet对象的service方法。
在service 方法中,判断请求的具体类型。
若该请求为HTTP-Get请求,则掉用doGet方法,若为HTTP-Post请求则调用doPost方法。
当容器关闭的时候销毁servlet对象,调用destroy方法。
所以至始至终,一个servlet最多只有一个对象。
是在第一次请求进行时创建的。
容器关闭时销毁的。
servletConfig
servletconfig对象代表的servlet的配置对象,一般我们会将一些可能会产生变化的字符串配置在配置文件中,通过servletconfig去读取,每个servlet都有一个自己的congfig对象,servlet 之间是不能共享config对象
参数可以配置很多个,但参数名不能相同
配置,在配置servlet的时候,需要配置两个元素
<servlet>
<servlet-name>
<servlet-class>
<init-param>
<param-name>aaa</param-name>
<param-value>bbb</param-value>
</init-param>
<servlet-mapping>
<servlet-name>
<url-pattern>
在servlet中使用ServletConfig
第一步,先获得servletcongfig对象
ServletConfig config = getServletConfig();
第二步,抓取配置参数
String value = config.getInitParameter("param-name");
servletContext
servletContext对象代表的是整个应用(项目),只有一份,任何servlet都能访问该对象,并且任何servlet访问到的context都是同一个
congfig用于给某个servlet配置一些常量,但是有些数据是很多servlet都需要的。
那如果为每个servlet都配置一份,那么将来需要改动的时候就要为每个servlet的配置进行修改了。
所以现在有了这个context之后,只需要配置一份,大家都共享,修改也只需要一份就好了
使用context
第一步,获得context对象
servletContext application= getServletContext();
第二步,抓取context的配置参数
String value = application.getInitParameter("param-name");
配置context参数
<context-param>
<param-name>...</param-name>
<param-value>...</param-value>
</context-param>
使用servletContext保存对象,也就设置属性
设置在servletContext对象中的属性,任何servlet都是可以访问的。
也就是说设置在servletContext的就是全局的。
设置属性
application.setAttribute("属性名",属性值);
获得属性
Object obj = application.getAttribute("属性名");
Session
session是客户端和服务器的会话。
是一种常用的会话跟踪技术。
浏览器发送请求时同时也发送一个sessionID,当服务器端看到sessionID就去session池中找session,若有,则使用,若没有则创建一个新的。
当浏览器关闭,则sessionID 也会重置,那么服务器端将得不到原先的sessionID了,尽管服务器端还保留着原先的session 对象,但是也已经无法访问了。
获得session
HttpSession session = request.getSession();
session设置属性
session.setAttribute("属性名",属性值);
Object o = session.getAttribute("属性名");
注意:任何对象存入session中都已经自动向上转型为object,所以取出来的时候都是object 类型,需要向下转型才能使用。
session
基于服务器端的会话跟踪
Cookie
cookie是保存在客户端的。
用户每次请求服务器端时都会将客户端的所有的cookie 发送至服务器端,所以,cookie是不太安全的。
服务器端要使用cookie就是先创建cookie对象,然后将cookie对象发送到客户端。
cookie的生命周期由cookie创建时决定,若不设置生命周期则瞬间销毁。
request请求的生命周期
客户端发送请求至服务器端,服务器端接收请求,这个请求并不是java EE中的request对象,可能仅仅是一些数据,容器将这些数据封装成我们Java EE中的request对象,这时,我们java里的请求对象才真正的创建出来,当服务器端经过一系列的处理,将响应发送至客户端。
容器销毁请求对象。
所以,一旦服务器端响应了客户端,那么请求也将会被销毁,同时,请求中的所有表单参数和属性也全部销毁了。
页面的跳转
请求派发:
地址栏路径不会发生改变
请求进入另外一个servlet之后其中的参数和属性仍然可见
给予服务器端的页面跳转
客户端只发出了一个请求
RequestDispatcher dis = request.getRequestDispatcher("URL");--URL是要跳转的页面
dis.forward(request,response);
连写
request.getRequestDispatcher("URL").forward(request,response);
重定向
地址栏路径发生了改变
请求进入第二个servlet时与原先的请求已经无关
基于客户端的页面跳转
客户端发出了两次请求
response.sendRedirect("URL");
监听器
作用:监听某些对象的生命周期及相关属性的改变情况,从而可以为这些对象进行一些初始化的工作
配置
<listener>
<listener-class>.....</listen-class>
</listener>
javax.servlet.http.httpsessionlistener /httpsessionattributelistener
javax.servlet.servletcontextlistener/servletcontextattributelistener。