import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Login extends HttpServlet { /**
 * 
 */
private static final long serialVersionUID = 1392116269495894774L; @Override
protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
login(arg0, arg1);
} @Override
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
login(arg0, arg1);
}
public void login(HttpServletRequest request, HttpServletResponse response) throws IOException{
request.setCharacterEncoding("gb2312");
System.out.println("*****************"+request.getParameter("username"));

PrintWriter out = response.getWriter();
out.print(request.getParameter("username"));
out.close();

}
} <servlet>
<servlet-name>login</servlet-name>
<servlet-class>Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>直接服务器访问
http://localhost:8080/sort/login?username=中文名字
后台打印是乱码. 页面显示是正常的.
这个是怎么回事啊????

解决方案 »

  1.   

    request.setCharacterEncoding("gb2312");
    应该改为:request.setCharacterEncoding("GBK");
      

  2.   

    form请使用post请求
      

  3.   

    <from method="post" action="....">
      

  4.   

    用post请求是没有这些问题的。如果是get方式的,
    设置服务器的编码方式,加过滤器,这样就没有乱码了
      

  5.   


    是地址传参啊!用这个URLDecoder 
    URLEncoder 
      

  6.   

    java.net.URLDecoder
    java.net.URLEncoder
      

  7.   

    用这个URLDecoder  
    URLEncoder  
      

  8.   


     public void login(HttpServletRequest request, HttpServletResponse response) throws IOException{
           try{
            request.setCharacterEncoding("gb2312");
            String username =new String(request.getParameter("username").getBytes("iso8859-1"),"gbk");
            System.out.println("*****************"+username );
            
            PrintWriter out = response.getWriter();
            out.print(request.getParameter("username"));
            out.close();
           }catch(Exception e){}  
        }
      

  9.   

    tomcat设置编码
    <Connector port="8080" protocol="HTTP/1.1" 
                   connectionTimeout="20000" 
                   redirectPort="8443" 
                   URIEncoding="gbk"/>
      

  10.   

    url传参,乱码是肯定的,用11的方法解决,或是java.net.URLDecoder  java.net.URLEncoder
      

  11.   

    request.setCharacterEncoding("gb2312");
    String username =new String(request.getParameter("username").getBytes("iso8859-1"),"gbk");
    楼主这样试试,应该可以解决你的问题.一般乱码可以用以下几种方式:
    1.在页面上设置编码encoude="GBK"
    2.request.setCharacterEncoding("gb2312");
    3.在tomcat中修改
    <Connector port="8080" protocol="HTTP/1.1"  
      connectionTimeout="20000"  
      redirectPort="8443"  
      URIEncoding="gbk"/>
    4.使用过滤器.
      

  12.   


    注意,要不都用gbk或gb2312或utf-8,保持编码一致
      

  13.   

    tomcat 设置  URIEncoding="gbk"
      

  14.   

    传中文的问题,也已转成uncode传过去  再转回来
      

  15.   

    String username = request.getParameter("username"));
    username = new String(username .getBytes("ISO8859-1"));
      

  16.   

    我刚解决了你这个问题 我也把所有方法都试了,最后改了个tomcat xml配置 具体我忘了 把它改成utf-8
      

  17.   

    java 的编码最好设置成utf-8 
      

  18.   

    1.方法
    public void login(HttpServletRequest request, HttpServletResponse response) throws IOException{ request.setCharacterEncoding("gb2312");
    System.out.println("*****************"+new String(request.getParameter("username").getBytes("iso8859-1"),"gbk"));

    PrintWriter out = response.getWriter();
    out.print(request.getParameter("username"));
    out.close();

    }2.方法
    D:\apache-tomcat-5.5.29\conf\server.xml搜索<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
    加入 URIEncoding="gbk"<Connector port="8080" maxHttpHeaderSize="8192"
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="gbk"/>以上两种方法是解决你直接没有页面访问SERVLET的方法.