servlet

来源:互联网 发布:微软雅黑字体 mac 编辑:程序博客网 时间:2024/04/24 17:11
2.Servlet
(1)要写Servlet类,必须继承HttpServlet类,并重写doGet()doPost()等方法。web container会分别创建代表请求、相应的HttpServletRequestHttpServletResponse对象,可以通过getParameter()获取相关请求参数,经过处理,然后由response对象进行响应
(2)Servlet是一个接口,提供与生命周期相关的init()destroy()方法,以及提供服务的service()方法等。GenericServlet实现了Servlet接口,不过它直接把service()方法标记为abstract;GenericServlet还实现了ServletConfig接口,将web container初始化Servlet调用init()所传入的ServletConfig封装起来
(3)在web.xml中配置Servlet
<servlet>
  <servlet-name>xxx</servlet-name>
  <servlet-class>xx.xx.xxx.class</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>xxx</servlet-name>
  <url-pattern>/xxx.do</url-pattern>
</servlet-mapping>
(4)WEB-INF下的数据,客户端无法直接获取,必须经过转发,需要用到RequestDispatcherforward()
 
3.HttpServletRequest与HttpServletResponse
(1)HttpServletRequest代表browser请求的对象,用它可以获取HTTP的相关信息,getParameter()获得请求参数,getHeader()获得表头信息,注意编码问题
(2)使用HttpServletRequest的getRequestDispatcher()可以获得RequestDispatcher,调用forward()[看不到地址栏变化],include()对请求转发或者包括,在forward()之前不可以对browser有响应,否则发生IllegalStateException异常
(3)在请求转发或者包含的时候,如果有请求周期的共享数据,则通过HttpServletRequest的setAttribute()设置,然后在另一个Servlet中用HttpServletRequest的getAttribute()获得
(4)使用 HttpServletResponse的setContentType("text/html;charset=utf-8");设置响应类型
(5)大部分情况下,使用HttpServletResponse的getWriter()取得PrintWriter对象,并使用println()输出HTML字符进行响应;有时,也可以通过HttpServletResponse的getOutputStream()获取ServletOutputStream实例,以字节数出
(6)使用HttpServletResponse的sendRedirect()重新发送请求,之前的请求参数丢失;sendError()发送错误
 
4.ServletConfig与ServletContext
(1)web container加载Servlet类并实例化后,会生成ServletConfig对象并调用init()方法,将ServletConfig对象当做参数传入,ServletConfig相当于web.xml中的设置代表对象,可以用它来取得Servlet的初始参数
(2)如果希望编写的程序在Servlet初始化时执行,要重写无参数的init()方法
(3)在web.xml中利用<init-param>标签来设置Servlet初始参数,一个<init-param>对应一组<param-name>和<param-value>
(4)ServletConfig上还定义了getServletContext()方法,可以获取ServletContext对象,可以用这个对象取得ServletContext初始参数,或是设置、取得、移除ServletContext属性
(5)ServletContext的getRequestDispatcher(),所给参数必须以"/"作为开头
(6)ServletContext的getResourcePaths()获取web应用程序某个目录下有哪些文件,所给参数必须以"/"作为开头
(7)在web.xml中用<context-param>标签设置ServletContext初始参数
(8)可以实现ServletContextListener,并在web.xml中设置<listener>标签告知web container,在web应用程序初始化后或即将结束前,调用ServletContextListener的contextInitialized()或contextDestroyed()
 
5.会话管理
(1)实现会话管理三个方法:1.用隐藏字段将状态信息以窗体中看不到的输入字段响应给浏览器,在下次发送窗体时一并发送隐藏字段;2.Cookie是保存在browser上的一个小文件,可设置存活期在browser请求web app时,一并发送Cookie;3.URL重写在URL上附加信息,以GET方式请求web app
(2)建立Cookie
Cookie cookie = new Cookie("user", "caterpillar");
cookie.setMaxAge(7*24*60*60);
response.addCookie(cookie);
(3)HttpServletRequest的getSession()可以取得HttpSession对象,可以使用setAttribute()和getAttribute()方法来设置或获取共享信息,使用invalidate()方法让HttpSession失效,用于注销
(4)禁用Cookie的情况下,使用URL重写机制依然可以使用HttpSession,response.encodeURL()会在URL上附加Session ID
 
6.Filter与Wrapper
(1)性能测量、用户验证、字符替换、压缩这类需求,应该设置为Filter
(2)在web.xml中用<filter>标签来设置Filter,类似Servlet
(3)Filter接口上的init()方法上,FilterConfig是参数,通过getInitParameter()来获取初始参数
(4)可以继承HttpServletRequestWrapper类并重写对应方法封装HttpServletRequest对象;同理用HttpServletResponseWrapper来封装HttpServletResponse对象
 
7.1.1生命周期监听器(必须在web.xml中配置<listener>)
(1) ServletContextListener 监听 ServletContext(整个web应用程序),通过传入的 ServletContextEvent 实例取得ServletContext,在ServletContext初始化前,调用void contextInitialized(ServletContextEvent sce)方法;在ServletContext结束前,调用contextDestroyed()方法,针对应用程序做相应的处理
(2)同上,ServletRequestListener监听ServletRequest(或者HttpServletRequest)
(3)同上,HttpSessionListener监听HttpSession
 
7.1.2属性操作监听器(必须在web.xml中配置<listener>)
(1)ServletContextAttributeListener监听ServletContext的属性被设置,删除或替换事件,有以下三个方法:
void attributeAdded(ServletContextAttributeEvent sca)
....................Removed.................................................
....................Replaced.................................................
(2)同上,HttpSessionAttributeListener监听HttpSession的属性,传入HttpSessionBindingEvent
(3)同上,ServletRequestAttributeListener监听ServletRequest(或者HttpServletRequest)的属性
 
7.1.3会话监听类监听器(不用在web.xml中配置<listener>)
(1)HttpSessionBindingListener监听即将加入HttpSession的属性对象从HttpSession中删除的属性对象,有以下方法:
void valueBound(HttpSessionBindingEvent event)
................Unbound....................................................
(2)HttpSessionActivationListener在分布式环境下才用到,此略
原创粉丝点击