当前位置:编程学习 > JAVA >>

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

初学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");输出的也是乱码,不是用上述方法可以将中文正常输出吗,迷惑了 --------------------编程问答-------------------- 你试试这样new String(new String(request.getParameter("username"),"iso-8859-1").getBytes(),"UTF-8"); --------------------编程问答-------------------- new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8")--注意这里使用的utf-8要和login.jsp中的编码方式一样 --------------------编程问答-------------------- jsp页面的编码改成utf-8,servlet中添加一句request.setCharacterEncoding("utf-8") --------------------编程问答--------------------
引用 3 楼 wsldl123292 的回复:
jsp页面的编码改成utf-8,servlet中添加一句request.setCharacterEncoding("utf-8")


在servlet的doPost或doGet的第一行写这两句:
request.setCharacterEncoding("utf-8");//接收请求
response.setCharacterEncoding("utf-8");//响应客户端

还要在JSP页面上的编码也要设置utf-8

注意编码要统一 --------------------编程问答-------------------- 额。。。楼上的我都试了,还是不行
主要是从JSP界面传到loginServlet将数据转成utf-8后,再重新传给浏览器出现了问题

我现在的处理办法是,先将JSp登录界面传来得数据转成utf-8进行验证后,再转成ISO-8895-1传给浏览器就可以了,办法有点笨了 --------------------编程问答--------------------
引用 5 楼 wjz748305545 的回复:
额。。。楼上的我都试了,还是不行
主要是从JSP界面传到loginServlet将数据转成utf-8后,再重新传给浏览器出现了问题

我现在的处理办法是,先将JSp登录界面传来得数据转成utf-8进行验证后,再转成ISO-8895-1传给浏览器就可以了,办法有点笨了

jsp的编码改了么,在最上边,实在不行就改tomcat的配置文件试试 --------------------编程问答-------------------- 费那么大劲干嘛~~~

你将jsp页面的编码集改为utf-8

然后再servlet中  dopost  方法第一句话写 request.setCharacterEncoding("utf-8");就Ok了~~~转来转去太麻烦~~~

或者写一个过滤器~~~~ --------------------编程问答--------------------
引用 7 楼 blackkeai 的回复:
费那么大劲干嘛~~~

你将jsp页面的编码集改为utf-8

然后再servlet中  dopost  方法第一句话写 request.setCharacterEncoding("utf-8");就Ok了~~~转来转去太麻烦~~~

或者写一个过滤器~~~~



+1 --------------------编程问答--------------------
引用 7 楼 blackkeai 的回复:
费那么大劲干嘛~~~

你将jsp页面的编码集改为utf-8

然后再servlet中  dopost  方法第一句话写 request.setCharacterEncoding("utf-8");就Ok了~~~转来转去太麻烦~~~

或者写一个过滤器~~~~
+1 --------------------编程问答-------------------- 经典的java乱码问题,最重要的一点的保证所有的页面编码都一样。 --------------------编程问答--------------------
引用 7 楼 blackkeai 的回复:
费那么大劲干嘛~~~

你将jsp页面的编码集改为utf-8

然后再servlet中  dopost  方法第一句话写 request.setCharacterEncoding("utf-8");就Ok了~~~转来转去太麻烦~~~

或者写一个过滤器~~~~


+1 --------------------编程问答--------------------
引用 7 楼 blackkeai 的回复:
费那么大劲干嘛~~~

你将jsp页面的编码集改为utf-8

然后再servlet中  dopost  方法第一句话写 request.setCharacterEncoding("utf-8");就Ok了~~~转来转去太麻烦~~~

或者写一个过滤器~~~~



+1 --------------------编程问答--------------------
引用 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");
}

}

--------------------编程问答--------------------
引用 13 楼 weicaijiang 的回复:
引用 4 楼 diypyh 的回复:引用 3 楼 wsldl123292 的回复:jsp页面的编码改成utf-8,servlet中添加一句request.setCharacterEncoding("utf-8")

在servlet的doPost或doGet的第一行写这两句:
request.setCharacterEncoding("utf-8");//接收请求
……



初学者你不应该给他教这个方法,你还得给他解释初始化方法时解析web.xml 
简单的就可以~~~这样会让他更晕!!! --------------------编程问答-------------------- 谢谢各位的热心解答 --------------------编程问答-------------------- 第一:把你的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"%>
好了,说到这里估计应该不存在乱码了。 --------------------编程问答-------------------- 这个就是个人习惯问题了、在打开一个工作空间之后就要设置一些文件的编码类型(这些类型必须统一),这样出现乱码的几率就会小很多,还有就是Servlet要设置request和response的编码类型,或者写一个filter这样你的编码类型同意之后就没有什么问题了 --------------------编程问答-------------------- 表单method属性设置为post,然后servlet get方法里面添加request.setCharacterEncoding("utf-8");基本就不会有请求乱码了! --------------------编程问答-------------------- 试试过滤器的方法吧,挺好用的!
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

}

}
--------------------编程问答-------------------- 楼上各位好厉害啊。。

这帖子我要标记一下 --------------------编程问答--------------------
引用 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
这里面的两个方法你看可行 --------------------编程问答-------------------- http://blog.csdn.net/tianyazaiheruan/article/details/8102999 --------------------编程问答--------------------
引用 23 楼 tianyazaiheruan 的回复:
http://blog.csdn.net/tianyazaiheruan/article/details/8102999

servlet乱码解决,以及servlet的其他知识 --------------------编程问答-------------------- 我也是一个jsp初学者。前两天也出现过乱码的困扰,所以首先同情楼主,我们都是可怜的小菜鸟。
其次呢,给楼主一个建议,你应该好好的看一下这个字符乱码的的缘由,你搞不清问题的根源只是在论坛里求助,不容易解决问题,也不利自己提高。
然后呢,我的乱码问题也是各位大牛帮忙解决的,帖子地址给你
http://bbs.csdn.net/topics/390283289?page=1#post-392933314
我相信你看以后,一定会明白。
最后,希望我和楼主还有各位友友能早日成长成牛主。 --------------------编程问答-------------------- 不是在servlet添加request.setCharacterEncoding("gbk");就可以么,我好像一直都是这样用的啊。。 --------------------编程问答-------------------- 干脆你都来改下,将jsp页面的编码集改为utf-8,然后把servlet类上点击属性,在other里改成utf-8,然后在doget或dopost方法里的第一行写上request.setCharacterEncoding("utf-8");  response.setContentType("text/html;charset=utf-8");不信改不了 --------------------编程问答-------------------- 添加一个过滤器,统一设置编码 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 保险的办法是在jsp页面与servelt类中都设置请求与响应编码
--------------------编程问答-------------------- 一个乱码那么多人跟帖 .... 
前台JSP编码、文件编码、过滤器编码一致 怎么传都不会乱码
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,