在JSP中使用过滤器解决中文乱码问题
2011-07-24 13:13
681 查看
JSP中乱码产生的原因是web容器(Tomcat)默认使用ISO-8859-1进行编码的,而我们可能使用的是UTF-8,GBK,GB2312等编码方式进行jsp编写的,因此需要一个转换器进行转换或者修改默认编码方式,这里我主要用转换器+过滤器完成自动转换功能.
转换器的代码如下:
使用过滤器可以完成自动转换功能,数据提交的对象是HttpRequest对象
1.通过request对象的getParameterMap().keySet()可以获取所有键值
2.通过getParameterValues(key)就可以获取提交的数据,结果是String[] 形式
3.使用转换器转换数据
4.通过request对象的setAttribute(k,v)方法将数据放回去
5.要获取数据时通过request的getAttribute(k)方法就可以获取数据.
为了支持多种编码,可以在过滤器中设计一个参数来控制转换的编码方式
代码如下:
使用过滤器就需要修改web.xml文件,web.xml文件中添加如下配置:
现在就可以使用request.getAttribute(k)来获取你的数据了,界面显示用${k}就可以直接获取数据了!
转换器的代码如下:
private String encode="UTF-8"; private String decode(String data){ try { return new String(data.getBytes("ISO-8859-1"),encode); } catch (UnsupportedEncodingException e) { return ""; } }
使用过滤器可以完成自动转换功能,数据提交的对象是HttpRequest对象
1.通过request对象的getParameterMap().keySet()可以获取所有键值
2.通过getParameterValues(key)就可以获取提交的数据,结果是String[] 形式
3.使用转换器转换数据
4.通过request对象的setAttribute(k,v)方法将数据放回去
5.要获取数据时通过request的getAttribute(k)方法就可以获取数据.
为了支持多种编码,可以在过滤器中设计一个参数来控制转换的编码方式
代码如下:
public class EncodeFilter implements Filter {
private String encode="UTF-8"; private String decode(String data){ try { return new String(data.getBytes("ISO-8859-1"),encode); } catch (UnsupportedEncodingException e) { return ""; } }
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain fc) throws IOException, ServletException {
HttpServletRequest hs=(HttpServletRequest) req;
for(Object k :req.getParameterMap().keySet()){
String[] vals= req.getParameterValues(k.toString());
if(vals.length>1){
for(int i=0;i<vals.length;i++){
vals[i]=decode(vals[i]);
}
req.setAttribute(k.toString(), vals);
}
else{
req.setAttribute(k.toString(), decode(vals[0]));
}
}
fc.doFilter(req,res);
}
public void init(FilterConfig fc) throws ServletException {
if(fc.getInitParameter("encode")!=null){
encode=fc.getInitParameter("encode");
}
}
}
使用过滤器就需要修改web.xml文件,web.xml文件中添加如下配置:
<filter> <filter-name>EncodeFilter</filter-name> <filter-class>com.haha.common.EncodeFilter</filter-class> <init-param> <param-name>encode</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>EncodeFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
现在就可以使用request.getAttribute(k)来获取你的数据了,界面显示用${k}就可以直接获取数据了!
相关文章推荐
- 解决页面中文的乱码问题,使用过滤器为所有页面配置编码格式,解决大部分的中文乱码问题
- JavaWeb中使用过滤器来解决中文乱码问题
- JSP用过滤器解决request getParameter中文乱码问题
- JSP,mysql,tomcat下(基于struts2)中文及其乱码问题的解决 5大配置点 使用UTF-8编码
- 使用过滤器解决中文乱码问题
- jsp中使用传参时出现中文乱码问题的解决方法
- 用过滤器来解决JSP中文乱码问题
- Java Web中使用JSPSmartUpload控件实现文件的上传和下载(解决了中文乱码问题)(JSP页面采用GBK编码)
- 使用过滤器解决全站中文乱码问题
- 通过过滤器(Filter)解决JSP的Post和Request中文乱码问题
- 通过过滤器(Filter)解决JSP的Post和Request中文乱码问题
- JSP中,AJAX使用POST方式提交中文乱码问题解决
- 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
- 关于在MySQL 、 VC、 JSP 中使用UTF-8解决中文生僻字乱码的问题
- JSP解决ajax使用$.get()方式提交中文出现乱码问题
- JSP中,AJAX使用POST方式提交中文乱码问题解决
- JSP利用过滤器解决request中文乱码问题
- 使用过滤器Filter解决Java系统中中文乱码的问题
- Post与Get提交使用过滤器解决中文乱码问题
- 用过滤器来解决JSP中文乱码问题