JavaWEB之Filter的应用场景(1)
2016-05-25 16:16
357 查看
关于Filter,很多年前学过,记得当时学习的时候有两个应用场景。
1.关于字符编码的应用
2.关于页面访问权限的应用
最近做一个WEB项目,又用到了。所以想总结一下Filter的几种常见的应用场景。
1.关于字符编码的应用(spring)
如果使用spring框架的话,可以直接使用[spring-web.jar]里的[org.springframework.web.filter.CharacterEncodingFilter]这个类。
只需要在web.xml里配置就可以。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>iso8859-1</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.关于字符编码的应用(自定义类)
关于字符编码的应用的实现思路和CharacterEncodingFilter类似。
2.1 自定义类的实现
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
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 org.apache.log4j.Logger;
/*
*
*自定义中文过滤器
*/
public class SetCharacterEncodingFilter implements Filter {
/** log4j */
private Logger log = Logger.getLogger(this.getClass());
/** 是否强制设置编码*/
protected boolean forceEncoding = true;
/** 编码*/
protected String encoding = null;
/** filter设置*/
protected FilterConfig filterConfig = null;
/**
* 继承的destroy()方法实现
*/
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
/**
* 继承的doFilter()方法实现
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest) request;
log.debug("URL:"+req.getRequestURL().toString());
if (forceEncoding || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}
/**
* 继承的init()方法实现
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("forceEncoding");
if (value == null)
this.forceEncoding = true;
else if (value.equalsIgnoreCase("true"))
this.forceEncoding = true;
else if (value.equalsIgnoreCase("yes"))
this.forceEncoding = true;
else
this.forceEncoding = false;
}
/**
* 编码设置
*/
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.2 web.xml的设置
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>com.XXX.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>iso8859-1</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.关于字符编码的应用
2.关于页面访问权限的应用
最近做一个WEB项目,又用到了。所以想总结一下Filter的几种常见的应用场景。
1.关于字符编码的应用(spring)
如果使用spring框架的话,可以直接使用[spring-web.jar]里的[org.springframework.web.filter.CharacterEncodingFilter]这个类。
只需要在web.xml里配置就可以。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>iso8859-1</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.关于字符编码的应用(自定义类)
关于字符编码的应用的实现思路和CharacterEncodingFilter类似。
2.1 自定义类的实现
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
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 org.apache.log4j.Logger;
/*
*
*自定义中文过滤器
*/
public class SetCharacterEncodingFilter implements Filter {
/** log4j */
private Logger log = Logger.getLogger(this.getClass());
/** 是否强制设置编码*/
protected boolean forceEncoding = true;
/** 编码*/
protected String encoding = null;
/** filter设置*/
protected FilterConfig filterConfig = null;
/**
* 继承的destroy()方法实现
*/
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
/**
* 继承的doFilter()方法实现
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest) request;
log.debug("URL:"+req.getRequestURL().toString());
if (forceEncoding || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}
/**
* 继承的init()方法实现
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("forceEncoding");
if (value == null)
this.forceEncoding = true;
else if (value.equalsIgnoreCase("true"))
this.forceEncoding = true;
else if (value.equalsIgnoreCase("yes"))
this.forceEncoding = true;
else
this.forceEncoding = false;
}
/**
* 编码设置
*/
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
2.2 web.xml的设置
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>com.XXX.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>iso8859-1</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
相关文章推荐
- java 字符串常量池 比较
- Java-克隆
- 设计模式第一节:类图
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(下)
- springmvc 4.X 搭建
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- Spring Annotation 详解
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)
- Java多态 转型
- 同步阻塞式IO(BIO)--学习笔记
- Java注解
- Spring @transactional annotation 事务使用详解
- spring的annotation-driven配置事务管理器详解
- Java-String类的常用方法总结
- Java基础学习
- java if后面要加大括号
- Java中的事件处理与异常处理机制-解析
- Java语言中的取整运算
- Android Studio或Eclipse配置百度地图详解教程
- Java编码字符串,解码字符串,取得文件大小,读文件内容