再javaweb开发中我们都遇到过乱码问题,原因基本是忘记设置编码造成。
这让我们不免觉得再每一个JSP或Servlet中都重复编写request.setCharacterEncoding(“UTF-8”);很麻烦。
那么有没有一种方法让我们一次设置,全局应用呢?
当然有!!
这个时候Servlet过滤器的强大就体现出来了
代码如下:
1.EncodingFilter.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.annotation.WebFilter;
/**
* Servlet Filter implementation class EncodingFilter
*/
@WebFilter("/EncodingFilter")
public class EncodingFilter implements Filter {
private String charSet;
/**
* Default constructor.
*/
public EncodingFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
// pass the request along the filter chain
request.setCharacterEncoding(this.charSet);
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
this.charSet=fConfig.getInitParameter("charset"); //取得初始化参数
}
}
2.web.xml设置
<filter>
<filter-name>encoding</filter-name>
<filter-class>Filter.EncodingFilter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在没有引用上面代码且没有设置编码前我的页面是这样的:
用了之后: