servlet生命周期/客户端跳转VS服务器端跳转/过滤器/监听器

  1. Servlet 生命周期:Servlet 加载--->实例化(调构造器)--->服务--->销毁。(tomcat启动时加载,第一次访问时实例化(和初始化init)并做服务,后面再访问就不再实例化,只做相应的doget/dopost服务,长时间不访问就会销毁。)
  2. init():在Servlet的生命周期中,仅执行一次init()方法。
  3. service():它是Servlet的核心,负责响应客户的请求。
  4. destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。

客户端跳转/重定向 (不能带request的值, session,application可以传值。) 定义:浏览器发送请求并收到响应后再次向一个新地址发送请求。特点: 改变url, 发送2次请求,request不共享数据。

 服务器调转/转发  (3个作用域都可用)  定义: 服务器收到请求后再内部转发给其他组件处理,然后把结果返回。 特点: 不改变url, 发送1次请求,request共享数据。

@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setAttribute("requestKey", "request值");
        HttpSession session=request.getSession();  // 获取session
        session.setAttribute("sessionKey", "session值");
        ServletContext application=this.getServletContext(); // 获取application
        application.setAttribute("applicationKey", "application值");
        response.sendRedirect("target.jsp"); // 客户端跳转/重定向
    }


@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setAttribute("requestKey", "request值");
        HttpSession session=request.getSession();  // 获取session
        session.setAttribute("sessionKey", "session值");
        ServletContext application=this.getServletContext(); // 获取application
        application.setAttribute("applicationKey", "application值");
        RequestDispatcher rd=request.getRequestDispatcher("target.jsp");
        rd.forward(request, response); // 服务器调转/转发
    }

---------------------------target.jsp-------------------------------------
<body>
<h1>目标地址</h1>
request值:<%=request.getAttribute("requestKey") %><br/>
session值:<%=session.getAttribute("sessionKey") %><br/>
application值:<%=application.getAttribute("applicationKey") %><br/>
</body>
redirect/forward

 Servlet过滤器

下面的是过滤用户请求,对于没有登录的的请求过滤掉,跳转到登录页面

public class LoginFilter implements Filter{

    public void destroy() {
        // TODO Auto-generated method stub
        
    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
            FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request=(HttpServletRequest)servletRequest;
        HttpSession session=request.getSession();
        Object o=session.getAttribute("currentUser");
        String path=request.getServletPath();
        if(o==null&&path.indexOf("login")<0){
            request.getRequestDispatcher("login.jsp").forward(servletRequest, servletResponse);
        }else{
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }

    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        
    }

}

---------------------------web.xml------------------------------
 <filter>
      <filter-name>loginFilter</filter-name>
      <filter-class>com.java1234.filter.LoginFilter</filter-class>
  </filter>
  
    
  <filter-mapping>
      <filter-name>loginFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
Filter

Servlet监听器

监听 web 事件;如 application,session,request

例子是session事件的监听,可在session添加、删除时触发事件

public class SessionAttributeListener implements HttpSessionAttributeListener{

    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
        // TODO Auto-generated method stub
        System.out.println("添加的属性名:"+httpSessionBindingEvent.getName()+",属性值:"+httpSessionBindingEvent.getValue());
    }

    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
        // TODO Auto-generated method stub
        System.out.println("删除的属性名:"+httpSessionBindingEvent.getName()+",属性值:"+httpSessionBindingEvent.getValue());
    }

    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
        // TODO Auto-generated method stub
        
    }

}



-------------------web.xml-----------------------------------------

<listener>
      <listener-class>
          com.java1234.listener.SessionAttributeListener
      </listener-class>
  </listener>
</web-app>
SessionAttributeListener

 

posted @ 2017-03-03 00:08  SKYisLimit  阅读(276)  评论(0)    收藏  举报