servlet的两个重要对象response和request分别代表返回客户的页面和接收来自客户的页面。这里面的字符内容往往涉及到不同的编码格式。
这里面编码格式的不同主要产生于如下几个地方:
1 js
2 jsp
3 Java source(编译器设置)
4 Web容器
5 HTML
上面每个地方都会有编码格式,为了支持中文字符,比较常见的做法就是都设置为UTF-8模式。
其中,response和request作为servlet对象的两个成员变量,其设置UTF-8是通过这两个对象的同名方法实现的。
setCharacterEncoding("UTF-8")
通常servlet在Web项目中jsp页面通过调用java类的方法来使用后台类提供的数据。这个在Struts2中用action表示,action就是一个java类,继承了BaseAction。 此类拥有request成员对象和response成员对象。
如果每个action类都要单独设置request和response对象的编码格式,是繁琐的。可以通过filter来统一设置。
filter接口有一个需要实现的方法doFilter,这个方法会拦截所有的servlet。从而可以对访问和反馈中的任何一个request和response进行设置。
步骤:
(1)实现filter
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.http.HttpServletRequest;
public class PageEncodingFilter implements Filter {
private String encoString = "UTF-8";
protected FilterConfig filterConfig;
@Override
public void destroy() {
// TODO Auto-generated method stub
this.encoString = null;
}
@Override
public void doFilter(ServletRequest srequset, ServletResponse sResponse,
FilterChain filterChain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest)srequset;
request.setCharacterEncoding(this.encoString);
sResponse.setCharacterEncoding(this.encoString);
System.out.println("requset().getCharacterEncoding(======PageEncodingFilter()====="+srequset.getCharacterEncoding());
System.out.println("response().getCharacterEncoding()======PageEncodingFilter()====="+sResponse.getCharacterEncoding());
filterChain.doFilter(srequset,sResponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
this.filterConfig = filterConfig;
if(filterConfig.getInitParameter("encoding")!=null)
{
this.encoString = filterConfig.getInitParameter("encoding");
}
}
}
(2)配置filter
在web.xml中添加filter的配置
<!-- 编码UTF-8过滤器 袁伟伟加-->
<filter>
<filter-name>Encoding</filter-name>
<filter-class>filter.PageEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
时间: 2024-10-21 23:12:01