以前,老师说JAVA的WEB开发,是一个面向配置文件的面向对象,当时听着不以为然。
现在感觉,那些配置文件设置的十分合理,有人说配置文件麻烦,不过目前虽然我感觉到了它的麻烦,但是面对它们还是比较有信心,至少感觉那些配置文件一个也不能缺!
下面是一个CharaterEncodingFilter,将JAVAEE的处理字符集ISO-8859-1转换为UTF-8.
//对客户端的所有请求进行,编码的转换。ISO-8859-1(latin-1)->utf-8
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;
public class CharacterEncodingFilter implements Filter{
//过滤器配置
protected FilterConfig filterConfig = null;
protected String encodingName = null;
protected boolean enable ;
public CharacterEncodingFilter() {
this.encodingName = "UTF-8";
this.enable = false;
}
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
if(this.enable) {
request.setCharacterEncoding(this.encodingName);
System.out.println("set request character");
}
System.out.println("not enable");
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
this.filterConfig = filterConfig;
loadConfigParams();
}
private void loadConfigParams() {
this.encodingName = this.filterConfig.getInitParameter("encoding");
String strIgnoreFlag = this.filterConfig.getInitParameter("enable");
if(strIgnoreFlag.equalsIgnoreCase("true")) {
System.out.println("enable = true");
this.enable = true;
}else {
this.enable = false;
}
}
}
对配置文件的修改十分的重要,在WEB.xml中,加入如下:
<filter>
<display-name>CharacterEncodingFilter</display-name>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>CharacterEncodingFilter</filter-class>
<init-param>
<description>编码方式</description>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<description>是否使用</description>
<param-name>enable</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我自己写这个配置文件时,把url-pattern忘了,一直不知怎么回事。后来上网找了文章 http://developer.51cto.com/art/200906/130489.htm 。 把它的什高为 "/*",就是对所有的请求都进行过滤。
filter的实质是一种特殊的servlet ,它不是一种单独的网络组件,因为它不产生请求和响应信息,它必须依附于其他的网络组件存在。所以我们利用它完成信息的编码转化、数据加密、身份验证、数据压缩、日志记录等很多种工作。