web.xml配置详解之filter

 
  • 定义
<filter>
<filter-name>encodingfilter</filter-name>
<filter-class>com.my.app.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>



  • 作用

用于指定WEB容器的过滤器,在请求和响应对象在Servlet处理之前和之后,可以通过此过滤器对这两个对象进行处理。

  • 备注

filter-class 中指定的过滤器类须继承 javax.servlet.Filter 具有须有以下三种方法

init(FilterConfig filterConfig):初始化;一般情况下时读取配置文件中的init-param参数值 如 filterConfig.getInitParameter("encoding")

doFilter(...):用于对request,response进行处理,并能过chain.doFilter(...) 交过下一个控制器

destroy():资源销毁

  • 示例:如编码过滤器

web.xml配置

<filter>
<filter-name>encodingfilter</filter-name>
<filter-class>com.my.app.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


Java 代码

/**
 * 
 */
package com.myapp;

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;

/**
 * @author louisliao
 *
 */
public class EncodingFilter implements Filter {

	/**
	 * 配置中默认的字符编码
	 */
	protected String encoding = null;  
	protected FilterConfig filterConfig;
	/**
	 * 当没有指定默认编码时是否允许跳过过滤
	 */
	protected boolean ignore = true; 
	/**
	 * 
	 */
	public EncodingFilter() {
		// TODO Auto-generated constructor stub
	}

	/* (non-Javadoc)
	 * @see javax.servlet.Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
		this.encoding=null;
		this.filterConfig=null;
	}
	
	/* (non-Javadoc)
	 * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		HttpServletRequest hRequest=(HttpServletRequest)request;
		HttpServletResponse hResponse=(HttpServletResponse)response;
		//Conditionally select and set the character encoding to be used  
		if(ignore || hRequest.getCharacterEncoding()==null){
			String coding=selectEncoding(hRequest);
			if(coding!=null){
				hRequest.setCharacterEncoding(coding);
				hResponse.setCharacterEncoding(coding);
			}
		}
		//将控制器传向下一个filter
		chain.doFilter(hRequest, hResponse);

	}

	/* (non-Javadoc)
	 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
	 */
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		this.filterConfig=filterConfig;
		this.encoding=filterConfig.getInitParameter("encoding");
		System.out.println(this.encoding);
		String value = filterConfig.getInitParameter("ignore");
		if (value == null) {
			this.ignore = true;
		} else if (value.equalsIgnoreCase("true")) {
			this.ignore = true;
		} else if (value.equalsIgnoreCase("yes")) {
			this.ignore = true;
		} else {
			this.ignore = false;
		}
	}
	protected String selectEncoding(ServletRequest request) {
		return (this.encoding);
	}

}
init方法是在WEB应用启动就会调用,doFilter则是在访问filter-mapping映射到的url时会调用。
  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
web.xml是Java Web应用中的配置文件,用于声明应用程序的配置信息,包括servlet、filter、listener、error-page、welcome-file-list等等。下面是一些web.xml配置详解: 1. Servlet配置:Servlet是Java Web应用中处理请求的核心组件,它通过web.xml中的<servlet>元素进行配置。下面是一个Servlet的配置例子: ``` <servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>com.example.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> ``` 上面的配置指定了一个名为"helloServlet"的Servlet,它的类是"com.example.HelloServlet",并且将它映射到"/hello"路径上。 2. Filter配置Filter可以在请求到达Servlet之前或者之后对请求或响应进行处理,它通过web.xml中的<filter>元素进行配置。下面是一个Filter配置例子: ``` <filter> <filter-name>loggingFilter</filter-name> <filter-class>com.example.LoggingFilter</filter-class> </filter> <filter-mapping> <filter-name>loggingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 上面的配置指定了一个名为"loggingFilter"的Filter,它的类是"com.example.LoggingFilter",并将它映射到所有路径上。 3. Listener配置:Listener可以监听Web应用的事件,例如应用启动和关闭事件,它通过web.xml中的<listener>元素进行配置。下面是一个Listener的配置例子: ``` <listener> <listener-class>com.example.MyServletContextListener</listener-class> </listener> ``` 上面的配置指定了一个名为"MyServletContextListener"的Listener,它的类是"com.example.MyServletContextListener"。 4. Error Page配置:Error Page用于在发生错误时显示一个自定义的错误页面,它通过web.xml中的<error-page>元素进行配置。下面是一个Error Page的配置例子: ``` <error-page> <error-code>404</error-code> <location>/error404.jsp</location> </error-page> ``` 上面的配置指定了当发生404错误时,显示一个名为"error404.jsp"的JSP页面。 5. Welcome File List配置:Welcome File List用于指定当用户访问根路径时默认显示的页面,它通过web.xml中的<welcome-file-list>元素进行配置。下面是一个Welcome File List的配置例子: ``` <welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> </welcome-file-list> ``` 上面的配置指定了当用户访问根路径时,先查找"index.jsp"文件,如果不存在再查找"index.html"文件。 以上是web.xml的一些常见配置,还有一些其他的配置,例如session-config、mime-mapping等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值