您的位置:首页 > 编程语言 > Java开发

1 web.xml之过滤器、监听器

2013-04-14 09:55 302 查看
1.  新建java类

package filter;

 

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

 

public class ActionFilter implements Filter

{

    public void doFilter(ServletRequest
request, ServletResponseresponse, FilterChain chain)

       throws IOException, ServletException

    {

       HttpServletRequest httpRequest = (HttpServletRequest) request;

        System.out.println("ActionFilter.doFilter()and
url=" +httpRequest.getRequestURL());

       

       chain.doFilter(request, response);

    }

   

    public void init(FilterConfig
filterConfig)

       throws ServletException

    {

       System.out.println("ActionFilter.init()");

       System.out.println("filterConfig=" +
filterConfig);

    }

   

    public void destroy()

    {

       System.out.println("ActionFilter.destroy()");

    }

}

 

 

package init;

 

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

 

public class GaoStruts2Init implementsServletContextListener

{

    public void contextInitialized(ServletContextEvent
sce)

    {

         System.out.println("GaoStruts2Init.contextInitialized()");

    }

   

    public void contextDestroyed(ServletContextEvent
sce)

    {

       System.out.println("GaoStruts2Init.contextDestroyed()");

    }

}

2.  修改web.xml添加过滤器和监听器

  <filter>

    <filter-name>actionFilter</filter-name>

    <filter-class>filter.ActionFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>actionFilter</filter-name>

    <url-pattern>*.action</url-pattern>

  </filter-mapping>

 

    <listener>

       <listener-class>init.GaoStruts2Init</listener-class>

    </listener>

</web-app>

3.   运行

1)   启动tomcat

访问: http://localhost:2000/Gao_struts2/struts/Admin_add.action

页面显示:Admin add success!

 

4.   总结

1)     启动tomcat后,控制台打印了GaoStruts2Init.contextInitialized()和ActionFilter.init(),说明系统启动后先调用监听器GaoStruts2Init的contextInitialized()方法,然后会启动过滤器ActionFilter的init()方法。

2)    访问http://localhost:2000/Gao_struts2/struts/Admin_add.action后,控制台打印ActionFilter.doFilter()
andurl=http://localhost:2000/Gao_struts2/struts/Admin_add_db.action,说明过滤器根据*.action的规则,过滤到请求,于是调用了ActionFilter的doFilter方法。

3)     ActionFilter的doFilter方法中的chain.doFilter(request,response)是必不可少的代码,否则页面就不会跳转到Admin_add_success.jsp,原因是ActionFilter需要将请求传送给下一个过滤器即struts2的过滤器struts,完成最终页面的跳转。

4)     如果想通过该过滤器的请求都跳转到index.jsp,则将chain.doFilter(request,response)改为httpRequest.getRequestDispatcher("../index.jsp").forward(request,response)即可,我们可以想象struts2最终就是这么做的!

5)    在web.xml中过滤器和监听器的执行顺序是由上到下的,而过滤器和监听器相比较,则监听器会优先处理。

6)     自定义的过滤器最好放在struts2的过滤器前,否则你会发现过滤器不起作用,原因很简单就是struts2最终没有调用chain.doFilter(request,response),而是跳转到对应的页面了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  web.xml Filter Java Web