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

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(),说明系统启动后先调用监听器GaoStruts2InitcontextInitialized()方法,然后会启动过滤器ActionFilterinit()方法

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

3)     ActionFilterdoFilter方法中的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),而是跳转到对应的页面了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值