当光标移开时,触发一下,从数据库中取数据到页面上,怎样实现?

chenam 2007-03-26 03:32:33
当光标移开时,自动触发程序,从数据库中取数据至页面上,
==
我要做个自动检查用户是否注册的程序
请提供些思路或者代码,谢谢。
...全文
785 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
imA 2007-03-27
  • 打赏
  • 举报
回复
下面是客户端的代码:
xmlDOM=xmlHttp.responseXML;
root=xmlDOM.documentElement;

while(root!=null&&root.hasChildNodes())
{
var child=root.firstChild;
if(messagelist.innerText=="")
messagelist.innerText=child.getAttribute("from")+" say:"+child.getAttribute("content");
else
messagelist.innerText=messagelist.innerText+"\r\n"+child.getAttribute("from")+" say:"+child.getAttribute("content");
root.removeChild(child);
}
imA 2007-03-27
  • 打赏
  • 举报
回复
to 楼主:

String action = request.getParameter("action");
Date thisTime = new Date();
Date lastTime = (Date) request.getSession().getAttribute("lastTime");
if (null == lastTime)
lastTime = thisTime;
request.getSession().setAttribute("lastTime", thisTime);
if ("send".equals(action))
{
String message = request.getParameter("message");
System.out.println("message: " + message);
String ip = request.getRemoteHost();
Date d = new Date();
MessageEntry me = new MessageEntry();
me.setFrom(ip);
me.setRecTime(d);
me.setMessage(message);
UserEntry ue = (UserEntry) request.getSession().getServletContext()
.getAttribute("messagelist");
if (null == ue)
{
ue = new UserEntry();
List<MessageEntry> msList = new ArrayList<MessageEntry>();
msList.add(me);
ue.setRecievems(msList);
} else
{
ue.getRecievems().add(me);
}
request.getSession().getServletContext().setAttribute(
"messagelist", ue);
}
UserEntry ue = (UserEntry) request.getSession().getServletContext()
.getAttribute("messagelist");
if (ue != null)
{
List list = ue.getRecievems();
try
{
org.w3c.dom.Document document = javax.xml.parsers.DocumentBuilderFactory
.newInstance().newDocumentBuilder().newDocument();
org.w3c.dom.Element root = document.createElement("root");
for (Iterator i = list.iterator(); i.hasNext();)
{
MessageEntry me = (MessageEntry) i.next();
if (lastTime.before(me.getRecTime()))
{
org.w3c.dom.Element child = document
.createElement("child");
child.setAttribute("from", me.getFrom());
child.setAttribute("content", me.getMessage());
root.appendChild(child);
}
}
document.appendChild(root);
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
response.setContentType("text/xml; charset=GB2312");
javax.xml.transform.dom.DOMSource doms = new javax.xml.transform.dom.DOMSource(
document);
javax.xml.transform.stream.StreamResult sr = new javax.xml.transform.stream.StreamResult(
response.getOutputStream());
javax.xml.transform.TransformerFactory tf = javax.xml.transform.TransformerFactory
.newInstance();
javax.xml.transform.Transformer t = tf.newTransformer();
t.setOutputProperty("encoding", "GB2312");
t.transform(doms, sr);
} catch (Exception e)
{
System.out.println("发生XML解析异常");
}
}



这是servlet中doPost的方法,你只要参考其中通过DOM对象组织返回结果的那段就行,就是org.w3c.dom.Document document = javax.xml.parsers.DocumentBuilderFactory
.newInstance().newDocumentBuilder().newDocument();这句话所在的那个try块中的代码。
upshania 2007-03-27
  • 打赏
  • 举报
回复
ajax
chenam 2007-03-26
  • 打赏
  • 举报
回复
我现在改成如下:
1》index.jsp
=========================
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>TEST</title>

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
<script>
function queryString()
{
var theValue = document.getElementById("theValue").value;
return theValue;
}
function theBlur()
{
var xmlHttp;
alert("hello");
//首先声明一个与服务端servlet打交道的xmlHttp
if(window.XMLHttpRequest)
{
xmlHttp=new XMLHttpRequest()
}
else if(window.ActiveXObject)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
//设置xmlHttp的响应方法,只有当readystate为4并且status为200时,才说明后台servlet返回数据成功
xmlHttp.onreadystatechange=function()
{
if((xmlHttp.readystate==4)&&(xmlHttp.status==200))
{
//得到servlet返回的数据(在这里后台servlet就是简单生成一个随机数返回)
text=xmlHttp.responseText;
document.getElementById("recieveValue").value=text;

var xmlDoc=xmlHttp.responseXML;
var xmlnode=xmlDoc.getElementsByTagName("info");
document.getElementById("recieveValue").innerHTML=xmlnode[0].firstChild.nodeValue;

}
}
//通过xmlHttp对象指定请求的方式(POST)服务端地址(/webchat/ViewServlet),异步交互方式(true)
xmlHttp.open("POST","TestServlet?theValue="+queryString(),true);
//设置请求的格式
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//发送请求
xmlHttp.send();
}
</script>
</head>

<body>
输入字符:<input type="text" id="theValue" onblur="theBlur()">(输入后将焦点移走)
<br>
返回结果1:<input type="text" id="recieveValue">
返回结果2:<input type="text" id="recieveValue2">
</body>
</html>

2>================servlet
package com.servlet;

import java.io.IOException;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet
{
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{ // 生成一个随机数
StringBuffer sb = new StringBuffer();
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
// 将生成的随机数通过response对象写到客户端去,客户端接收将值写页面的recieveValue中。在这里就可以查询数据库,将查询的结果返回
String a ="select username,pwd from user where username='"+request.getParameter("theValue")+"'";
System.out.println(a);
try {
DB db=new DB();
java.sql.ResultSet rs = db.executeQuery(a);
while(rs.next()){
sb.append("<message><info>"+rs.getString("username")+"</message></info>");
sb.append("<message><info>"+rs.getString("pwd")+"</message></info>");
}

db.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.setContentType("text/xml; charset=UTF-8");
response.setHeader("Cache-Control","no-cache");
response.getWriter().write(sb.toString());
response.getWriter().flush();

}
}

====问题是,recieveValue中取到了还是整串值 ,我想取其中的第一个节点的值?
chenam 2007-03-26
  • 打赏
  • 举报
回复
imA(男的不会,会的不男) :
1》我想把id="theValue"的内容通过post的方式传到servlet,我应该怎样传过去。
2》
返回结果:<input type="text" id="recieveValue">
返回结果:<input type="text" id="recieveValue2">
我想在servlet中得到两个值,传到recieveValue和recieveValue2上
chenam 2007-03-26
  • 打赏
  • 举报
回复
调式可以了,
我再问题一下,
text=xmlHttp.responseText;
只有一个值传回,
在servlet中有多个值,怎样传回来?
cchaha 2007-03-26
  • 打赏
  • 举报
回复
good
imA 2007-03-26
  • 打赏
  • 举报
回复
servlet映射配置(web.xml中的部分内容):
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>

上面的这些代码你可以发布到tomcat上,看看结果。
imA 2007-03-26
  • 打赏
  • 举报
回复
html文件的源文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>TEST</title>

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
<script>
function theBlur()
{
var xmlHttp;
alert("hello");
//首先声明一个与服务端servlet打交道的xmlHttp
if(window.XMLHttpRequest)
{
xmlHttp=new XMLHttpRequest()
}
else if(window.ActiveXObject)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP")
}
//设置xmlHttp的响应方法,只有当readystate为4并且status为200时,才说明后台servlet返回数据成功
xmlHttp.onreadystatechange=function()
{
if((xmlHttp.readystate==4)&&(xmlHttp.status==200))
{
//得到servlet返回的数据(在这里后台servlet就是简单生成一个随机数返回)
text=xmlHttp.responseText;
document.getElementById("recieveValue").value=text;
}
}
//通过xmlHttp对象指定请求的方式(POST)服务端地址(/webchat/ViewServlet),异步交互方式(true)
xmlHttp.open("POST","TestServlet",true);
//设置请求的格式
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//发送请求
xmlHttp.send();
}
</script>
</head>

<body>
输入字符:<input type="text" id="theValue" onblur="theBlur()">(输入后将焦点移走)
<br>
返回结果:<input type="text" id="recieveValue">
</body>
</html>
imA 2007-03-26
  • 打赏
  • 举报
回复
servlet源文件:
package com.servlet;

import java.io.IOException;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{ // 生成一个随机数
Random r = new Random();
long l = r.nextLong();
// 将生成的随机数通过response对象写到客户端去,客户端接收将值写页面的recieveValue中。在这里就可以查询数据库,将查询的结果返回
response.getWriter().write("" + l);
response.getWriter().flush();
}
}
imA 2007-03-26
  • 打赏
  • 举报
回复
给你写个简单的例子,你只要把html文件中的onblur函数换成onmouseout就行了。
imA 2007-03-26
  • 打赏
  • 举报
回复
设置html元素的onmouseout 的js函数,在js中通过HttpRequest请求后台的servlet,执行数据库查询,然后返回给客户端,通过document对象将数据填充的指定的位置。

也就是现在常说的AJAX。

你可以在网上搜索一些例子。

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧