我做了一个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分,看我的结贴率。
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分,看我的结贴率。
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;
}
}
}
}
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
{ }
}
}
在servlet中取得参数
req.getParameter("userName"),
之前,加上这句代码:
req.setCharacterEncoding("gbk");
...
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;
...
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 { }
}
}