当jsp和servlet出现乱码问题后的解决方案
上网看了好多,就这一篇解决了我的问题,现转,我的项目用的是MVC架构,有统一的控制器,转向不同的Action,上网看了好多,大部分是说加入request.setCharacterEncoding("utf-8");但是经过我的试验,这只有在利用JSP处理表单传输数据时才可用,在我的东西中无法解决,后来发现还是用FilterChain好,呵呵,重点还是在request.setCharacterEncoding("")中;希望对大家有点帮助
转自(http://www.itwis.com/html/java/jsp/20080814/2158.html)
当jsp和servlet出现乱码问题后的解决方案
来源: 发布时间:2008-08-14 发布人: 浏览:162 人次 字体: [大 中 小]
在进行jsp和servlet的开发时,很有可能遇到出现了中文乱码问题,现在我们来看看笔者是如何解决的,他也是用了许多方法,发现还是解决不了。最后用了过滤器,才算终结。
此方法总结如下:在jsp页面中使用<%@ page pageEncoding="GB2312"%> ,这里的pageEncoding是GB2312,那么我们在过滤器web.xml中所使用的<param-value>GB2312</param-value>也为GB2312。总之一条:就是上述两者一致即可,比如同为UTF-8
将过滤器的java代码和web.xml的配置写
//--------java代码部分:CharsetFilter .java
package com;
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 CharsetFilter implements Filter {
private String charset = "GB2312";
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain arg2) throws IOException, ServletException {
request.setCharacterEncoding(charset);
arg2.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
charset = arg0.getInitParameter("charset");
System.out.println("字符过滤器开启,当前状态:"+charset);
}
}
//--------web.xml部分(以下部分可以直接复制粘贴到WEB.XML下)
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>com.CharsetFilter</fi
相关文档:
http:/localhost/123/jsp/test.jsp:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logi ......
在不允许目录浏览的情况下 浏览器会先找到首页(默认为index.html /index.jsp...)
否则出错
因此 若首页被恶意更改 网站崩溃
解决方法:
更改默认启动页面:$tomcat/conf/web.xml最后位置
<welcome-file-list>
<welcome-file>index.html</welcome-file> ......
jsp的pageEncoding="UTF-8",struts的encoding="UTF-8",eclipse 的工作区间的编码方式是GBK,但是在struts的action中获得的jsp传来的中文中有乱码,使用new String(sysgkForm.getContent().getBytes("UTF-8"),"GBK")转码也不行,最后发现问题出在了jsp里面。加上contentType="text/html; charset=GBK" 就好了。
pageEncodi ......
Servlet:
在Servlet中,跳转在doGet或者doPost方法中实现。
<1>redirect实现页面跳转:
response.sendRedirect("/login.jsp");
方法的参数是相对路径,设定这个参数可以使页面跳转到任何页面,包括www.baidu.com等网络页面。
跳转后你可以发现地址栏发生了变化。
底层原理:使用redir ......