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),而是跳转到对应的页面了!
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过滤器和监听器的配置
- web.xml 中的过滤器(拦截器)Filter与监听器Listener的作用和区别?
- ssh整合web.xml过滤器和监听器的配…
- web.xml 中的过滤器(拦截器)Filter与监听器Listener的作用和区别?
- web.xml 中的过滤器(拦截器)Filter与监听器Listener的作用和区别?
- web.xml中的监听器(Listener)、过滤器(Filter)
- web.xml 中的过滤器(拦截器)Filter与监听器Listener的作用和区别?
- 关于编码过滤的问题,这里使用在web.xml中添加过滤器的方法!
- java-web 过滤器 & 监听器 & 拦截器
- 初学Java Web(8)——过滤器和监听器
- JavaEE Web开发之Filter和Listener(过滤器和监听器)
- 在web.xml中加入过滤器
- Web中的监听器【Listener】与过滤器【Filter】 实例
- 通过web.xml中的监听器加载spring配置文件
- appfuse实例中的web.xml学习笔记之过滤器
- java WEB开发:过滤器、监听器、拦截器的区别
- Web.xml过滤器配置及执行顺序概念
- web.xml中过滤器实现总结
- Appfuse实例中的web.xml学习笔记之过滤器
- shiro过滤器,web.xml中默认访问页面,springMVC拦截器执行顺序