我做了一个Servlet,现在通过前台javascript访问,关键代码如下:
xmlhttp.open("GET","http://192.168.255.56/Servlet/GetOnlinePeople?userName="+encodeURIComponent(document.all.UserName.value),true);
通过GET方式发送,参数通过encodeURIComponent加密。
Servlet代码如下:
import java.util.Hashtable;
import java.util.Iterator;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GetOnlinePeople extends HttpServlet {
private static final long serialVersionUID = 4944504468093069504L;
public static Hashtable ht = new Hashtable();
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException {
try {
System.out.println("============Begin=============");
ht.put(req.getParameter("userName"),req.getParameter("userName"));
Iterator it = ht.values().iterator();
while(it.hasNext()){
String temp = (String) it.next();
System.out.println(temp);
}
System.out.println("============End=============");
} catch (Exception n) {
n.printStackTrace();}finally
   {
 
   }
}
}
问题:
参数是数字,或者英文的时候,没有问题,能把哈希表里的内容打印出来,但是前台传的参数是中文的时候,就是乱码,请高手解决下,贴出代码供奉送300分,看我的结贴率。

解决方案 »

  1.   

     doget方法里第一句加上 resp.setContentType("text/html;charset=gb2312");
      

  2.   

    给你一段代码看看 可以显示中文package org.fox_ice.servlet;import javax.servlet.*;
    import java.io.*;
    import javax.servlet.http.*;
    import java.sql.*;
    import java.util.ArrayList;public class GetDBInfoServlet extends HttpServlet
    {
        private String url;
        private String user;
        private String password;
        
        public void init() throws ServletException
        {
            ServletContext sc=getServletContext();
            String driverClass=sc.getInitParameter("driverClass");
            url=sc.getInitParameter("url");
            user=sc.getInitParameter("user");
            password=sc.getInitParameter("password");
            try
            {
                Class.forName(driverClass);
            }
            catch(ClassNotFoundException ce)
            {
                throw new ServletException("加载数据库驱动失败!");
            }
        }
        
        public void doGet(HttpServletRequest req, HttpServletResponse resp)
                   throws ServletException,IOException
        {
            Connection conn=null;
            Statement stmt=null;
            ResultSet rs=null;
            
            try
            {
                conn=DriverManager.getConnection(url,user,password);
                
                resp.setContentType("text/html;charset=gb2312");
                PrintWriter out=resp.getWriter();
                out.println("<html><head>");
                out.println("<title>数据库表的信息</title>");
                out.println("</head><body>");
                
                String tableName=req.getParameter("tableName");
                if(null==tableName || tableName.equals(""))
                {
                    DatabaseMetaData dbMeta=conn.getMetaData();
                    rs=dbMeta.getTables(null,null,null,new String[]{"TABLE"});
                    out.println("<form action=\"getdbinfo\" method=\"get\">");
                    out.println("<select size=1 name=tableName>");
                    while(rs.next())
                    {
                        out.println("<option value="+rs.getString("TABLE_NAME")+">");
                        out.println(rs.getString("TABLE_NAME"));
                        out.println("</option>");
                    }
                    out.println("</select><p>");
                    out.println("<input type=\"submit\" value=\"提交\">");
                    out.println("</form>");
                }
                else
                {
                    stmt=conn.createStatement();
                    rs=stmt.executeQuery("select * from "+tableName); 
                    ResultSetMetaData rsMeta=rs.getMetaData();
                    int columnCount=rsMeta.getColumnCount();
                    out.println("<table border=1>");
                    out.println("<caption>表的结构</catption>");
                    out.println("<tr><th>字段名</th><th>字段类型</th><th>最大字符宽度</th></tr>");
                    
                    ArrayList<String> al=new ArrayList<String>();
                    for(int i=1;i<=columnCount;i++)
                    {
                        out.println("<tr>");
                        String columnName=rsMeta.getColumnName(i);
                        out.println("<td>"+columnName+"</td>");
                        al.add(columnName);
                        out.println("<td>"+rsMeta.getColumnTypeName(i)+"</td>");
                        out.println("<td>"+rsMeta.getColumnDisplaySize(i)+"</td>");
                    }
                    out.println("</table><p>");
                    
                    out.println("<table border=1>");
                    out.println("<caption>表中的数据</catption>");
                    out.println("<tr>");
                    
                    for(int i=0;i<columnCount;i++)
                    {
                        out.println("<th>"+al.get(i)+"</th>");
                    }
                    
                    while(rs.next())
                    {
                        out.println("<tr>");
                        for(int i=1;i<=columnCount;i++)
                        {
                            out.println("<td>"+rs.getString(i)+"</td>");    
                        }
                        out.println("</tr>");
                    }
                    out.println("</table>");
                }
                out.println("</body><html>");
                out.close();
            }
            catch(SQLException se)
            {
                se.printStackTrace();
            }
            finally
            {
                if(rs!=null)
                {
                    try
                    {
                        rs.close();
                    }
                    catch(SQLException se)
                    {
                        se.printStackTrace();
                    }
                    rs=null;
                }
                if(stmt!=null)
                {
                    try
                    {
                        stmt.close();
                    }
                    catch(SQLException se)
                    {
                        se.printStackTrace();
                    }
                    stmt=null;
                }
                if(conn!=null)
                {
                    try
                    {
                        conn.close();
                    }
                    catch(SQLException se)
                    {
                        se.printStackTrace();
                    }
                    conn=null;
                }
            }
        }
    }
      

  3.   

    import java.util.Hashtable; 
    import java.util.Iterator; 
    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; public class GetOnlinePeople extends HttpServlet { 
    private static final long serialVersionUID = 4944504468093069504L; 
    public static Hashtable ht = new Hashtable(); 
    public void doGet(HttpServletRequest req, HttpServletResponse res) 
    throws ServletException { 
    try { 
    resp.setContentType("text/html;charset=gb2312");System.out.println("============Begin============="); 
    ht.put(req.getParameter("userName"),req.getParameter("userName")); 
    Iterator it = ht.values().iterator(); 
    while(it.hasNext()){ 
    String temp = (String) it.next(); 
    System.out.println(temp); 

    System.out.println("============End============="); 
    } catch (Exception n) { 
    n.printStackTrace(); }finally 
      {   } 

      

  4.   

    不妨这样试试:
    在servlet中取得参数
    req.getParameter("userName"),
    之前,加上这句代码:
    req.setCharacterEncoding("gbk");
      

  5.   


    ...
    System.out.println("============Begin============="); 
    ht.put(req.getParameter("userName"),req.getParameter("userName")); 
    Iterator it = ht.values().iterator(); 
    while(it.hasNext()){ 
    String temp = (String) it.next(); 
    System.out.println(temp); 

    System.out.println("============End============="); 
      res.setContentType("text/xml;charset=UTF-8");//注意这里设定字符集和页面一致;
    try {
    res.getWriter().write(temp);//因为lz发送ajax请求,这样返回。
    } catch (IOException e) {
    e.printStackTrace();
    }
            return null; 
    ...
      

  6.   


    package ServletPackage;import java.util.Hashtable;
    import java.util.Iterator;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;public class GetOnlinePeople extends HttpServlet {
    private static final long serialVersionUID = 4944504468093069504L;
    public static Hashtable ht = new Hashtable(); public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException {
    try {
    System.out.println("============Begin=============");
    req.setCharacterEncoding("UTF-8");//注意这里设定字符集和页面一致
     res.setContentType("text/xml;charset=UTF-8");//注意这里设定字符集和页面一致;
    ht.put(req.getParameter("userName"), req.getParameter("userName"));
    Iterator it = ht.values().iterator();
    while (it.hasNext()) {
    String temp = (String) it.next();
    System.out.println(temp);
    }
    System.out.println("============End=============");
    } catch (Exception n) {
    n.printStackTrace(); } finally { }
    }
    }