初学servlet遇到了中文乱码问题,求指教

wjz748305545 2012-11-13 08:30:12
初学servlet遇到了中文乱码问题,求指教,问题如下:(简单描述)
login.jsp作为登录界面获取登录信息username,点击提交按钮到LoginServlet进行信息验证,
验证时通过new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
使用控制台输出时显示是中文,但通过response.sendRedirect("WelcomeServlet?username="+username);将username传到WelcomeServlet界面后,
即使使用new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");输出的也是乱码,不是用上述方法可以将中文正常输出吗,迷惑了
...全文
566 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ajava攻城师 2012-11-24
  • 打赏
  • 举报
回复
一个乱码那么多人跟帖 .... 前台JSP编码、文件编码、过滤器编码一致 怎么传都不会乱码
qinglo_ 2012-11-23
  • 打赏
  • 举报
回复
保险的办法是在jsp页面与servelt类中都设置请求与响应编码
zz201206 2012-11-22
  • 打赏
  • 举报
回复
添加一个过滤器,统一设置编码
Jamps 2012-11-21
  • 打赏
  • 举报
回复
干脆你都来改下,将jsp页面的编码集改为utf-8,然后把servlet类上点击属性,在other里改成utf-8,然后在doget或dopost方法里的第一行写上request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8");不信改不了
jiemotang 2012-11-19
  • 打赏
  • 举报
回复
试试过滤器的方法吧,挺好用的!
import java.io.IOException;
import java.util.Enumeration;

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 EnCodeFilter implements Filter{

	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
		Enumeration enums = request.getParameterNames();
		if(enums!=null){
			while(enums.hasMoreElements()){
				String name = (String) enums.nextElement();
				String values[] = request.getParameterValues(name);
				for(int i=0;i<values.length;i++){
					values[i] = new String(values[i].getBytes("ISO-8859-1"),"UTF-8");
				}
			}
		}
		chain.doFilter(request, response);
	}

	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}

}
tgxblue 2012-11-19
  • 打赏
  • 举报
回复
不是在servlet添加request.setCharacterEncoding("gbk");就可以么,我好像一直都是这样用的啊。。
softbing 2012-11-19
  • 打赏
  • 举报
回复
我也是一个jsp初学者。前两天也出现过乱码的困扰,所以首先同情楼主,我们都是可怜的小菜鸟。 其次呢,给楼主一个建议,你应该好好的看一下这个字符乱码的的缘由,你搞不清问题的根源只是在论坛里求助,不容易解决问题,也不利自己提高。 然后呢,我的乱码问题也是各位大牛帮忙解决的,帖子地址给你 http://bbs.csdn.net/topics/390283289?page=1#post-392933314 我相信你看以后,一定会明白。 最后,希望我和楼主还有各位友友能早日成长成牛主。
y_keven 2012-11-19
  • 打赏
  • 举报
回复
引用 23 楼 tianyazaiheruan 的回复:
http://blog.csdn.net/tianyazaiheruan/article/details/8102999
servlet乱码解决,以及servlet的其他知识
y_keven 2012-11-19
  • 打赏
  • 举报
回复
http://blog.csdn.net/tianyazaiheruan/article/details/8102999
偶是江湖中人 2012-11-19
  • 打赏
  • 举报
回复
引用 14 楼 blackkeai 的回复:
引用 13 楼 weicaijiang 的回复:引用 4 楼 diypyh 的回复:引用 3 楼 wsldl123292 的回复:jsp页面的编码改成utf-8,servlet中添加一句request.setCharacterEncoding("utf-8") 在servlet的doPost或doGet的第一行写这两句: request.setCharacterE……
呵呵,或许也有道理 吧。偶也刚学jsp不久,发现这种方法最好了。给楼主推荐下。
  • 打赏
  • 举报
回复
http://blog.csdn.net/wm5920/article/details/7584650 这里面的两个方法你看可行
alleni123 2012-11-19
  • 打赏
  • 举报
回复
楼上各位好厉害啊。。 这帖子我要标记一下
copaer 2012-11-17
  • 打赏
  • 举报
回复
第一:把你的tomcat中的默认编码改了,位置在 tomcat主目录 -----> conf 文件夹 ------> server.xml中: <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> 第二:写个filter过滤器:

public class EncodingFilter implements Filter {

	String encoding = null;
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {  //初始化Filter
		encoding = filterConfig.getInitParameter("encoding");  //获取配置中的encoding

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		request.setCharacterEncoding(encoding);
		response.setCharacterEncoding(encoding);
                //response.setContentType("text/html;charset="+encoding);这句可加/根据需求
		chain.doFilter(request, response);  //这句代码很重要,如果不加上这句,那么你这个Filter是无效的
	}
	@Override
	public void destroy() {  //用于释放资源
		encoding = null;
	}
}
web.xml中配置该Filter:

<filter>
      <filter-name>encoding__filter</filter-name>
      <filter-class><!-- 这儿写当前这个Filter的完整名称(包名+类名) --></filter-class>
      <!-- 统一用utf-8编码 -->
      <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>encoding__filter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
接下来就是你eclipse工作空间的编码集了:位置 Windows ----> Preferences ----->General ---->WorkSpace 里面有个选项 Text file encoding,这里可以设置,为了统一,都设置成UTF-8.然后看一下你这个项目的编码集,位置Project---->Properties----Resource 中的Text file encoding,看是不是UTF-8. 最后就是你的jsp了: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 好了,说到这里估计应该不存在乱码了。
wjz748305545 2012-11-17
  • 打赏
  • 举报
回复
谢谢各位的热心解答
zark 2012-11-17
  • 打赏
  • 举报
回复
表单method属性设置为post,然后servlet get方法里面添加request.setCharacterEncoding("utf-8");基本就不会有请求乱码了!
Adolph11 2012-11-17
  • 打赏
  • 举报
回复
这个就是个人习惯问题了、在打开一个工作空间之后就要设置一些文件的编码类型(这些类型必须统一),这样出现乱码的几率就会小很多,还有就是Servlet要设置request和response的编码类型,或者写一个filter这样你的编码类型同意之后就没有什么问题了
Minty_Tong 2012-11-15
  • 打赏
  • 举报
回复
引用 13 楼 weicaijiang 的回复:
引用 4 楼 diypyh 的回复:引用 3 楼 wsldl123292 的回复:jsp页面的编码改成utf-8,servlet中添加一句request.setCharacterEncoding("utf-8") 在servlet的doPost或doGet的第一行写这两句: request.setCharacterEncoding("utf-8");//接收请求 ……
初学者你不应该给他教这个方法,你还得给他解释初始化方法时解析web.xml 简单的就可以~~~这样会让他更晕!!!
偶是江湖中人 2012-11-15
  • 打赏
  • 举报
回复
引用 4 楼 diypyh 的回复:
引用 3 楼 wsldl123292 的回复:jsp页面的编码改成utf-8,servlet中添加一句request.setCharacterEncoding("utf-8") 在servlet的doPost或doGet的第一行写这两句: request.setCharacterEncoding("utf-8");//接收请求 response.setChara……
把这两行写入到过滤器filter中,其它什么问题都没了 参考代码如下:

  <!-- 编码过滤器 -->
  <filter>
  	<filter-name>jspencodfilter</filter-name>
  	<filter-class>com.shitong.filter.JspEncoding</filter-class>
  	<!-- 统一用utf-8编码 -->
  	<init-param>
  		<param-name>encoding</param-name>
  		<param-value>UTF-8</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>jspencodfilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

package com.shitong.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;
import javax.servlet.http.HttpServletResponse;

public class JspEncoding implements Filter {
	private final String TAG = "JspEncoding - ";
	
	String jspEncoding = null;
	public void destroy() {
		// TODO Auto-generated method stub

	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain filterChain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		//System.out.println("JspEncoding - dofilter jspencoding = "+jspEncoding);
		request.setCharacterEncoding(jspEncoding);
		response.setContentType("text/html;charset="+jspEncoding);
		filterChain.doFilter(request, response);

	}

	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		//此中的encoding与web.xml中的filter中initparam 名字相同
		jspEncoding = arg0.getInitParameter("encoding");
	}

}

fanstars 2012-11-14
  • 打赏
  • 举报
回复
引用 7 楼 blackkeai 的回复:
费那么大劲干嘛~~~ 你将jsp页面的编码集改为utf-8 然后再servlet中 dopost 方法第一句话写 request.setCharacterEncoding("utf-8");就Ok了~~~转来转去太麻烦~~~ 或者写一个过滤器~~~~
+1
fun_f 2012-11-14
  • 打赏
  • 举报
回复
引用 7 楼 blackkeai 的回复:
费那么大劲干嘛~~~ 你将jsp页面的编码集改为utf-8 然后再servlet中 dopost 方法第一句话写 request.setCharacterEncoding("utf-8");就Ok了~~~转来转去太麻烦~~~ 或者写一个过滤器~~~~
+1
加载更多回复(10)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧