现在做一个像google搜索那样,输入词会出现词语联想,如我我输入“中国”他就会把以中国开头的下拉出来,我做一个但是传递英文没有问题,传递中文就就不会返回(保证数据库里有内容,输出他的SQL语句,在mysql的控制台可以执行,并能查询出结果),传递中文参数(可以正确输出中文参数),并且while语句就不执行,望帮忙,在线等。贴出原代码:
JSP页面:
<%@ page contentType="text/html;charset=GB2312" language="java" %>
<HTML><HEAD><TITLE>ajax</TITLE>
<META http-equiv=Content-Type content="text/html; charset=GB2312">
<LINK href="images/css.css" type=text/css rel=stylesheet>
</HEAD>
<script language="javascript">
var XMLHttpReq;
var completeDiv;
var inputField;
var completeTable;
var completeBody;
//创建XMLHttpRequest对象
function createXMLHttpRequest() {
if(window.XMLHttpRequest) { //Mozilla 浏览器
XMLHttpReq = new XMLHttpRequest();
}
else if (window.ActiveXObject) { // IE浏览器
try {
XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
}
//发送匹配请求函数
function findNames() {
inputField = document.getElementById("names");
completeTable = document.getElementById("complete_table");
completeDiv = document.getElementById("popup");
completeBody = document.getElementById("complete_body");
if (inputField.value.length > 0) {
createXMLHttpRequest();
var url = "AutoCom?action=match&names=" + inputField.value;
XMLHttpReq.open("POST", url, true);
XMLHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded");
XMLHttpReq.onreadystatechange = processMatchResponse;//指定响应函数
XMLHttpReq.send("POST"); // 发送请求
} else {
clearNames();
}
}
// 处理返回匹配信息函数
function processMatchResponse() {
if (XMLHttpReq.readyState == 4) { // 判断对象状态
alert(XMLHttpReq.status);
if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息
setNames(XMLHttpReq.responseXML.getElementsByTagName("res"));
}else { window.alert("您所请求的页面有异常。");
}
}
}
//生成与输入内容匹配行
function setNames(names) {
clearNames();
var size = names.length;
setOffsets(); var row, cell, txtNode;
for (var i = 0; i < size; i++) {
var nextNode = names[i].firstChild.data;
row = document.createElement("tr");
cell = document.createElement("td");
cell.onmouseout = function() {this.className='mouseOver';};
cell.onmouseover = function() {this.className='mouseOut';};
cell.setAttribute("bgcolor", "#FFFAFA");
cell.setAttribute("border", "0");
cell.onclick = function() { completeField(this); } ; txtNode = document.createTextNode(nextNode);
cell.appendChild(txtNode);
row.appendChild(cell);
completeBody.appendChild(row);
}
}
//设置显示位置
function setOffsets() {
completeTable.style.width = inputField.offsetWidth; + "px";
var left = calculateOffset(inputField, "offsetLeft");
var top = calculateOffset(inputField, "offsetTop") + inputField.offsetHeight;
completeDiv.style.border = "black 1px solid";
completeDiv.style.left = left + "px";
completeDiv.style.top = top + "px";
}
//计算显示位置
function calculateOffset(field, attr) {
var offset = 0;
while(field) {
offset += field[attr];
field = field.offsetParent;
}
return offset;
}
//填写输入框
function completeField(cell) {
inputField.value = cell.firstChild.nodeValue;
clearNames();
}
//清除自动完成行
function clearNames() {
var ind = completeBody.childNodes.length;
for (var i = ind - 1; i >= 0 ; i--) {
completeBody.removeChild(completeBody.childNodes[i]);
}
completeDiv.style.border = "none";
}
}
</script>
<table style="BORDER-COLLAPSE: collapse" borderColor=#111111
cellSpacing=0 cellPadding=2 width=400 border=0>
<TR>
<TD align=middle height=4 colspan="3">
</TD>
</TR>
<TR>
<TD align=middle
height=19 colspan="3"><B>搜索</B>
</TD>
</TR>
<tr>
<td height="20">
输入关键字:
</td>
<td height="20">
<input type="text" size="15" id="names" onkeyup="findNames();" style="height:20;">
<div style="position:absolute;" id="popup">
<table id="complete_table" border="0" cellspacing="0" cellpadding="0"/>
<tbody id="complete_body"></tbody>
</table>
</div>
</td>
</tr>
</table>
servlet代码:
package org.ajax;import java.io.IOException;
import java.net.*;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class AutoCom extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置接收信息的字符集
request.setCharacterEncoding("GB2312");
response.setContentType("text/xml; charset=GB2312");
response.setHeader("Cache-Control", "no-cache");
String action = request.getParameter("action");
System.out.println("hello:"+action);
String name = StringUtil.getDecoding("names", request);
System.out.println("1111111:"+name);
PrintWriter out = response.getWriter();
//依据验证结果输出不同的数据信息
out.println("<response>");
DB db = new DB();
ResultSet rs;
String strSql=null;
//匹配
try {
if ("match".equals(action)){
strSql = "select name from product where name like '"+name+"%'";
rs = db.executeQuery(strSql);
while( rs.next()) { out.println("<res>" + rs.getString("name") + "</res>");
}
}
System.out.println("eeeeeeeeeeeeee");
out.println("</response>");
//out.close();
} catch (SQLException e) {
System.out.println("33333333");
e.printStackTrace();
}
}
}编码过滤类:
package org.ajax;import javax.servlet.http.*;
public class StringUtil { public static String getDecoding(String pram,HttpServletRequest request){
String val = request.getParameter(pram);
try{
byte b[] = val.getBytes("8859_1");
val = new String (b,"GB2312");
System.out.println(val);
}catch(Exception e){
e.printStackTrace();
System.out.println("出现错误!");
}
return val;
}
}
JSP页面:
<%@ page contentType="text/html;charset=GB2312" language="java" %>
<HTML><HEAD><TITLE>ajax</TITLE>
<META http-equiv=Content-Type content="text/html; charset=GB2312">
<LINK href="images/css.css" type=text/css rel=stylesheet>
</HEAD>
<script language="javascript">
var XMLHttpReq;
var completeDiv;
var inputField;
var completeTable;
var completeBody;
//创建XMLHttpRequest对象
function createXMLHttpRequest() {
if(window.XMLHttpRequest) { //Mozilla 浏览器
XMLHttpReq = new XMLHttpRequest();
}
else if (window.ActiveXObject) { // IE浏览器
try {
XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
}
//发送匹配请求函数
function findNames() {
inputField = document.getElementById("names");
completeTable = document.getElementById("complete_table");
completeDiv = document.getElementById("popup");
completeBody = document.getElementById("complete_body");
if (inputField.value.length > 0) {
createXMLHttpRequest();
var url = "AutoCom?action=match&names=" + inputField.value;
XMLHttpReq.open("POST", url, true);
XMLHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded");
XMLHttpReq.onreadystatechange = processMatchResponse;//指定响应函数
XMLHttpReq.send("POST"); // 发送请求
} else {
clearNames();
}
}
// 处理返回匹配信息函数
function processMatchResponse() {
if (XMLHttpReq.readyState == 4) { // 判断对象状态
alert(XMLHttpReq.status);
if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息
setNames(XMLHttpReq.responseXML.getElementsByTagName("res"));
}else { window.alert("您所请求的页面有异常。");
}
}
}
//生成与输入内容匹配行
function setNames(names) {
clearNames();
var size = names.length;
setOffsets(); var row, cell, txtNode;
for (var i = 0; i < size; i++) {
var nextNode = names[i].firstChild.data;
row = document.createElement("tr");
cell = document.createElement("td");
cell.onmouseout = function() {this.className='mouseOver';};
cell.onmouseover = function() {this.className='mouseOut';};
cell.setAttribute("bgcolor", "#FFFAFA");
cell.setAttribute("border", "0");
cell.onclick = function() { completeField(this); } ; txtNode = document.createTextNode(nextNode);
cell.appendChild(txtNode);
row.appendChild(cell);
completeBody.appendChild(row);
}
}
//设置显示位置
function setOffsets() {
completeTable.style.width = inputField.offsetWidth; + "px";
var left = calculateOffset(inputField, "offsetLeft");
var top = calculateOffset(inputField, "offsetTop") + inputField.offsetHeight;
completeDiv.style.border = "black 1px solid";
completeDiv.style.left = left + "px";
completeDiv.style.top = top + "px";
}
//计算显示位置
function calculateOffset(field, attr) {
var offset = 0;
while(field) {
offset += field[attr];
field = field.offsetParent;
}
return offset;
}
//填写输入框
function completeField(cell) {
inputField.value = cell.firstChild.nodeValue;
clearNames();
}
//清除自动完成行
function clearNames() {
var ind = completeBody.childNodes.length;
for (var i = ind - 1; i >= 0 ; i--) {
completeBody.removeChild(completeBody.childNodes[i]);
}
completeDiv.style.border = "none";
}
}
</script>
<table style="BORDER-COLLAPSE: collapse" borderColor=#111111
cellSpacing=0 cellPadding=2 width=400 border=0>
<TR>
<TD align=middle height=4 colspan="3">
</TD>
</TR>
<TR>
<TD align=middle
height=19 colspan="3"><B>搜索</B>
</TD>
</TR>
<tr>
<td height="20">
输入关键字:
</td>
<td height="20">
<input type="text" size="15" id="names" onkeyup="findNames();" style="height:20;">
<div style="position:absolute;" id="popup">
<table id="complete_table" border="0" cellspacing="0" cellpadding="0"/>
<tbody id="complete_body"></tbody>
</table>
</div>
</td>
</tr>
</table>
servlet代码:
package org.ajax;import java.io.IOException;
import java.net.*;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class AutoCom extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置接收信息的字符集
request.setCharacterEncoding("GB2312");
response.setContentType("text/xml; charset=GB2312");
response.setHeader("Cache-Control", "no-cache");
String action = request.getParameter("action");
System.out.println("hello:"+action);
String name = StringUtil.getDecoding("names", request);
System.out.println("1111111:"+name);
PrintWriter out = response.getWriter();
//依据验证结果输出不同的数据信息
out.println("<response>");
DB db = new DB();
ResultSet rs;
String strSql=null;
//匹配
try {
if ("match".equals(action)){
strSql = "select name from product where name like '"+name+"%'";
rs = db.executeQuery(strSql);
while( rs.next()) { out.println("<res>" + rs.getString("name") + "</res>");
}
}
System.out.println("eeeeeeeeeeeeee");
out.println("</response>");
//out.close();
} catch (SQLException e) {
System.out.println("33333333");
e.printStackTrace();
}
}
}编码过滤类:
package org.ajax;import javax.servlet.http.*;
public class StringUtil { public static String getDecoding(String pram,HttpServletRequest request){
String val = request.getParameter(pram);
try{
byte b[] = val.getBytes("8859_1");
val = new String (b,"GB2312");
System.out.println(val);
}catch(Exception e){
e.printStackTrace();
System.out.println("出现错误!");
}
return val;
}
}
解决方案 »
- 在jsp页面中直接打开本地文件夹,效果就像在操作系统中打开一个文件夹一样。
- 新手求助啊!
- 网页测试工具
- log4j问题请教
- dom动态生成的checkbox,实现了全选,为什么提交表单的时候,取出来checkbox为null
- struts高手请进入
- tomcat4.1.27和iis5整合后,为什么访问index.jsp显示的却是index.jsp的源码?
- 请教各位大师分页显示的问题!
- 我连接Oracle数据库出了问题,请大家帮我看一下,是否少了jdbc for Oracle?怎样解决?
- sql查询语句直接在页面上做查询和先在javabean里完成查询,然后返回数组,哪种方案好?
- 问一个jsp中response.sendRedirect产生302返回码的问题
- 关于No getter method available for property value for bean under name ips错误
2.先看一下你servlet文件的编码,如果是ANSI将你的val.getBytes("8859_1");改为val.getBytes("iso8859_1");