我们在用struts2的时候,通常会使用默认的过滤器,定义拦截器,这样就可以控制请求过来的.action请求,但是如果我们直接使用.jsp来访问页面的话,就会有一些页面不能被拦截,会出现报错画面,影响网站的整体质量,这个时候我们就可以在web.xml中定义一个过滤器,让它来过滤.jsp的请求,做一些操作。代码如下:
<!-- 让Struts 2 的核心Filter拦截所有.action请求 --> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <!-- 自定义一个过滤器 --> <filter> <filter-name>myFilter</filter-name> <filter-class>jy.filter.MyFilter</filter-class> </filter> <!-- 让自定义的Filter拦截所有.jsp请求 --> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
过滤器java代码如下:
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; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class MyFilter implements Filter { public void destroy() { } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { System.out.println("自定义过滤器开始!"); HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; HttpSession session = request.getSession(); String uri = request.getRequestURI(); uri = uri.split("/")[uri.split("/").length - 1]; if (uri.equals("login.jsp") || uri.equals("regist.jsp")) { chain.doFilter(req, res); } else { if (session.getAttribute("user") != null) { chain.doFilter(req, res); } else { response.sendRedirect(request.getContextPath() + "/login.jsp"); return; } } } public void init(FilterConfig arg0) throws ServletException { } }
相关推荐
例如,在示例中提到的`test.xml`包含了过滤器(`filter`)的相关配置: ```xml <filter-name>CasValidationFilter <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter ...
* filter-mapping 元素:一旦命名了一个过滤器,就要利用 filter-mapping 元素把它与一个或多个 servlet 或 JSP 页面相关联。 * listener 元素:事件监听程序在建立、修改和删除会话或servlet 环境时得到通知。 * ...
在 Servlet 的生命周期中,context-param 可以被多个组件所使用。 listener 元素 listener 元素用于配置监听器。监听器可以在 Web 应用启动时执行一些初始化操作。容器将创建 listener 中的类实例,并将其作为监听...
`context-param`用于指定Spring上下文配置文件的位置,通常是一个或多个路径,用逗号分隔,如`classpath*:spring/spring-config.xml`。`ContextLoaderListener`监听器会在Web应用启动时读取这些配置文件,创建Spring...
4. ****:用于定义一个过滤器。过滤器可以拦截用户请求,并进行预处理或后处理工作。 - `<filter-name>`:过滤器的名称。 - `<filter-class>`:过滤器的具体实现类,通常是一个实现了`javax.servlet.Filter`接口的...
distributable 元素用于指定是否可以在多个服务器之间分发该 Web 应用,<!ELEMENT distributable (true | false) >。 context-param 元素用于定义 Web 应用的参数,<!ELEMENT context-param (param-name, param-...
web.xml中可以定义多个配置元素,包括但不限于: - **icon**: 指定IDE和GUI工具用来表示Web应用的图像文件位置。 - **context-param**: 定义Web应用范围内的初始化参数。 - **listener**: 声明Web应用启动和终止时...
在web.xml中,还可以定义多个filter,每个filter可以有多个节点,但每个都必须在对应的节点之后。因为当Web容器解析到filter-mapping时,必须确保filter-name已经被定义,否则会出现错误。 综上所述,web.xml文件...
在Java Web开发中,Filter(过滤器)是一个非常重要的组件,它允许我们在数据处理之前或之后执行特定的任务,比如防止跨站脚本攻击(XSS)、处理字符编码问题、实现权限控制等。在这个主题中,我们将深入理解Filter的...
在filter配置中,多个filter的初始化顺序由它们在web.xml文件中的位置决定,但filter拦截资源的顺序则是根据filter-mapping的顺序进行。每个filter-mapping对应一个filter,且filter-mapping必须位于相应的filter...
`web.xml`是Java Web应用的核心配置,它管理了Servlet、过滤器和监听器等组件,以及会话、安全、错误处理等多个方面。理解和熟练掌握`web.xml`配置,能有效提升开发效率,保证应用的稳定性和安全性。在实际开发中,...
5. ****:定义一个过滤器,该过滤器实现`javax.servlet.Filter`接口。过滤器可以用于执行预处理操作,如编码转换、权限验证等。 6. ****:用于把过滤器与一个或多个Servlet或JSP页面相关联。需要注意的是,对于具有...
传统的Java Web应用通常依赖于`web.xml`文件来配置Servlet、过滤器、监听器等核心组件,但在最新的技术栈中,这种硬编码的方式已经被更加灵活和动态的配置方式所取代。 1. **Spring Boot**:Spring Boot是推动这一...
此标签表明Web应用是否支持分发部署,即多个JSP容器之间能否共享会话状态。 #### 四、示例 以下是一个简单的`web.xml`文件示例: ```xml <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns=...
这个`web.xml`示例展示了如何通过XML配置来定制Java Web应用的行为,包括处理请求、错误处理、会话管理、安全控制等多个方面,是学习和理解SCWCD(Sun Certified Web Component Developer)认证的重要内容。...
- **`<filter>`**:定义一个过滤器,可以对进入或离开特定的资源(如servlet或jsp页面)的数据进行预处理或后处理。 - **`filter-name`**:过滤器的唯一名称。 - **`filter-class`**:实现过滤器功能的具体类名。 ...
此时,`Web.xml`可能不是唯一的部署描述符来源,服务器会将多个XML配置文件合并,包括`META-INF/web-fragment.xml`和`WEB-INF/web.xml`。 总结,`Web.xml`是Java Web应用的心脏,它定义了应用的架构、行为和运行...