Ajax解决多余刷新的两种方法(总结)
控制器Servlet则提供了简单的改变:
对于Ajax系统而言,服务器响应无须是整个页面内容,可以仅是
必需的数据,控制器不能将数据请求转发到jsp页面。
此时控制器有两个选择:
1、直接生成简单的响应数据。
在这种模式下,Servlet直接通过response获取页面输出流,通过
输出流生成字符响应。
packagepers.zkr.chat.web;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importpers.zkr.chat.service.ChatService;
@WebServlet(urlPatterns={"/chat.do"})
publicclassChatServletextendsHttpServlet{
@Override
publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
//TODOAuto-generatedmethodstub
request.setCharacterEncoding("utf-8");
Stringmsg=request.getParameter("chatMsg");
System.out.println(msg);
if(msg!=null&&!msg.equals("")){
Stringuser=(String)request.getSession().getAttribute("user");
System.out.println(user+"user");
ChatService.instance().addMsg(user,msg);
}
//设置响应内容的类型
<strong>response.setContentType("text/html;charset=utf-8");
//获取页面输出流
PrintWriterout=response.getWriter();
//直接生成响应
out.println(ChatService.instance().getMsg());</strong>
request.setAttribute("msg",ChatService.instance().getMsg());
forward("/chat.jsp",request,response);
}
privatevoidforward(Stringurl,HttpServletRequestrequest,
HttpServletResponseresponse)throwsServletException,IOException{
//TODOAuto-generatedmethodstub
request.getRequestDispatcher(url)
.forward(request,response);
}
}
2、转向一个简单的jsp使用JSP页面生成简单的响应。
控制器将请求转发到另外的JSP页面,而JSP页面仅仅负责输出聊天信息
在这里需要一个jsp页面来接收控制器发来的数据,也是服务器的响应文本,而在
原来的页面,只需:
1)创建XMLHttpRequest对象
2)发送请求
3)接收服务器的响应
packageorg.crazyit.chat.web;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjavax.servlet.annotation.*;
importjava.io.*;
importorg.crazyit.chat.service.*;
/**
*Description:
*<br/>网站:<ahref=https://www.nhooo.com>毛票票</a>
*<br/>Copyright(C),2001-2014,Yeeku.H.Lee
*<br/>Thisprogramisprotectedbycopyrightlaws.
*<br/>ProgramName:
*<br/>Date:
*@version1.0
*/
@WebServlet(urlPatterns={"/chat.do"})
publicclassChatServletextendsHttpServlet
{
publicvoidservice(HttpServletRequestrequest,
HttpServletResponseresponse)throwsIOException,ServletException
{
//设置使用GBK字符集来解析请求参数
request.setCharacterEncoding("utf-8");
Stringmsg=request.getParameter("chatMsg");
if(msg!=null&&!msg.equals(""))
{
//取得当前用户
Stringuser=(String)request.getSession(true)
.getAttribute("user");
//调用ChatService的addMsg来添加聊天消息
ChatService.instance().addMsg(user,msg);
}
//将全部聊天信息设置成request属性
<strong>request.setAttribute("chatList",
ChatService.instance().getMsg());</strong>
//转发到chatreply.jsp页面
forward("/chatreply.jsp",request,response);
}
//执行转发请求的方法
privatevoidforward(Stringurl,HttpServletRequestrequest,
HttpServletResponseresponse)throwsServletException,IOException
{
//执行转发
request.getRequestDispatcher(url)
.forward(request,response);
}
}
接收数据的页面
<%@pagecontentType="text/html;charset=GBK"errorPage="error.jsp"%>
<%--输出当前的聊天信息--%>
${requestScope.chatList}
html页面
<!DOCTYPEhtml>
<html>
<head>
<metaname="author"content="Yeeku.H.Lee(CrazyIt.org)"/>
<metahttp-equiv="Content-Type"content="text/html;charset=GBK"/>
<title>聊天页面</title>
</head>
<bodyonload="sendEmptyRequest();">
<divstyle="width:780px;border:1pxsolidblack;text-align:center">
<h3>聊天页面</h3>
<p>
<textareaid="chatArea"name="chatArea"cols="90"
rows="30"readonly="readonly"></textarea>
</p>
<divalign="center">
<inputid="chatMsg"name="chatMsg"type="text"
size="90"onkeypress="enterHandler(event);"/>
<inputtype="button"name="button"value="提交"
onclick="sendRequest();"/>
</div>
</div>
<scripttype="text/javascript">
varinput=document.getElementById("chatMsg");
input.focus();
varXMLHttpReq;
//创建XMLHttpRequest对象
functioncreateXMLHttpRequest()
{
if(window.XMLHttpRequest)
{
//DOM2浏览器
XMLHttpReq=newXMLHttpRequest();
}
elseif(window.ActiveXObject)
{
//IE浏览器
try
{
XMLHttpReq=newActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
XMLHttpReq=newActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
}
}
}
}
//发送请求函数
functionsendRequest()
{
//input是个全局变量,就是用户输入聊天信息的单行文本框
varchatMsg=input.value;
//完成XMLHttpRequest对象的初始化
createXMLHttpRequest();
//定义发送请求的目标URL
varurl="chat.do";
//通过open方法取得与服务器的连接
//发送POST请求
XMLHttpReq.open("POST",url,true);
//设置请求头-发送POST请求时需要该请求头
XMLHttpReq.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
//指定XMLHttpRequest状态改变时的处理函数
XMLHttpReq.onreadystatechange=processResponse;
//清空输入框的内容
input.value="";
//发送请求,send的参数包含许多的key-value对。
//即以:请求参数名=请求参数值的形式发送请求参数。
XMLHttpReq.send("chatMsg="+chatMsg);
}
//定时请求服务器
functionsendEmptyRequest()
{
//完成XMLHttpRequest对象的初始化
createXMLHttpRequest();
//定义发送请求的目标URL
varurl="chat.do";
//发送POST请求
XMLHttpReq.open("POST",url,true);
//设置请求头-发送POST请求时需要该请求头
XMLHttpReq.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
//指定XMLHttpRequest状态改变时的处理函数
XMLHttpReq.onreadystatechange=processResponse;
//发送请求,,不发送任何参数
XMLHttpReq.send(null);
//指定0.8s之后再次发送请求
setTimeout("sendEmptyRequest()",800);
}
//处理返回信息函数
functionprocessResponse()
{
//当XMLHttpRequest读取服务器响应完成
if(XMLHttpReq.readyState==4)
{
//服务器响应正确(当服务器响应正确时,返回值为200的状态码)
if(XMLHttpReq.status==200)
{
//使用chatArea多行文本域显示服务器响应的文本
document.getElementById("chatArea").value
=XMLHttpReq.responseText;
}
else
{
//提示页面不正常
window.alert("您所请求的页面有异常。");
}
}
}
functionenterHandler(event)
{
//获取用户单击键盘的“键值”
varkeyCode=event.keyCode?event.keyCode
:event.which?event.which:event.charCode;
//如果是回车键
if(keyCode==13)
{
sendRequest();
}
}
</script>
</body>
</html>
以上这篇Ajax解决多余刷新的两种方法(总结)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。