Ajax解决多余刷新的两种方法(总结)
发布时间 - 2026-01-10 23:12:52 点击率:次控制器Servlet则提供了简单的改变:

对于Ajax系统而言,服务器响应无须是整个页面内容,可以仅是
必需的数据,控制器不能将数据请求转发到jsp页面。
此时控制器有两个选择:
1、直接生成简单的响应数据。
在这种模式下,Servlet直接通过response获取页面输出流,通过
输出流生成字符响应。
package pers.zkr.chat.web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import pers.zkr.chat.service.ChatService;
@WebServlet(urlPatterns={"/chat.do"})
public class ChatServlet extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
String msg=request.getParameter("chatMsg");
System.out.println(msg);
if(msg!=null&&!msg.equals("")){
String user=(String)request.getSession().getAttribute("user");
System.out.println(user+"user");
ChatService.instance().addMsg(user, msg);
}
//设置响应内容的类型
<strong>response.setContentType("text/html;charset=utf-8");
// 获取页面输出流
PrintWriter out = response.getWriter();
//直接生成响应
out.println(ChatService.instance().getMsg());</strong>
request.setAttribute("msg",ChatService.instance().getMsg());
forward("/chat.jsp", request , response);
}
private void forward(String url, HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.getRequestDispatcher(url)
.forward(request , response);
}
}
2、转向一个简单的jsp使用JSP页面生成简单的响应。
控制器将请求转发到另外的JSP页面,而JSP页面仅仅负责输出聊天信息
在这里需要一个jsp页面来接收控制器发来的数据,也是服务器的响应文本,而在
原来的页面,只需:
1)创建XMLHttpRequest对象
2) 发送请求
3)接收服务器的响应
package org.crazyit.chat.web;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.*;
import org.crazyit.chat.service.*;
/**
* Description:
* <br/>网站: <a href=https://www.></a>
* <br/>Copyright (C), 2001-2014, Yeeku.H.Lee
* <br/>This program is protected by copyright laws.
* <br/>Program Name:
* <br/>Date:
* @version 1.0
*/
@WebServlet(urlPatterns={"/chat.do"})
public class ChatServlet extends HttpServlet
{
public void service(HttpServletRequest request,
HttpServletResponse response)throws IOException,ServletException
{
// 设置使用GBK字符集来解析请求参数
request.setCharacterEncoding("utf-8");
String msg = request.getParameter("chatMsg");
if ( msg != null && !msg.equals(""))
{
// 取得当前用户
String user = (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);
}
// 执行转发请求的方法
private void forward(String url , HttpServletRequest request,
HttpServletResponse response)throws ServletException,IOException
{
// 执行转发
request.getRequestDispatcher(url)
.forward(request,response);
}
}
接收数据的页面
<%@ page contentType="text/html;charset=GBK" errorPage="error.jsp"%>
<%-- 输出当前的聊天信息 --%>
${requestScope.chatList}
html页面
<!DOCTYPE html>
<html>
<head>
<meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>聊天页面</title>
</head>
<body onload="sendEmptyRequest();">
<div style="width:780px;border:1px solid black;text-align:center">
<h3>聊天页面</h3>
<p>
<textarea id="chatArea" name="chatArea" cols="90"
rows="30" readonly="readonly"></textarea>
</p>
<div align="center">
<input id="chatMsg" name="chatMsg" type="text"
size="90" onkeypress="enterHandler(event);"/>
<input type="button" name="button" value="提交"
onclick="sendRequest();"/>
</div>
</div>
<script type="text/javascript">
var input = document.getElementById("chatMsg");
input.focus();
var XMLHttpReq;
// 创建XMLHttpRequest对象
function createXMLHttpRequest()
{
if(window.XMLHttpRequest)
{
// DOM 2浏览器
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 sendRequest()
{
// input是个全局变量,就是用户输入聊天信息的单行文本框
var chatMsg = input.value;
// 完成XMLHttpRequest对象的初始化
createXMLHttpRequest();
// 定义发送请求的目标URL
var url = "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);
}
//定时请求服务器
function sendEmptyRequest()
{
// 完成XMLHttpRequest对象的初始化
createXMLHttpRequest();
// 定义发送请求的目标URL
var url = "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);
}
// 处理返回信息函数
function processResponse()
{
// 当XMLHttpRequest读取服务器响应完成
if (XMLHttpReq.readyState == 4)
{
// 服务器响应正确(当服务器响应正确时,返回值为200的状态码)
if (XMLHttpReq.status == 200)
{
// 使用chatArea多行文本域显示服务器响应的文本
document.getElementById("chatArea").value
= XMLHttpReq.responseText;
}
else
{
// 提示页面不正常
window.alert("您所请求的页面有异常。");
}
}
}
function enterHandler(event)
{
// 获取用户单击键盘的“键值”
var keyCode = event.keyCode ? event.keyCode
: event.which ? event.which : event.charCode;
// 如果是回车键
if (keyCode == 13)
{
sendRequest();
}
}
</script>
</body>
</html>
以上这篇Ajax解决多余刷新的两种方法(总结)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# ajax解决多余刷新
# 纯JS实现AJAX局部刷新功能
# ajax无刷新评论功能
# AJAX如何实现无刷新登录功能
# ajax的分页查询示例(不刷新页面)
# 给大家
# 时需
# 是个
# 在这里
# 两种
# 只需
# 而在
# 回车键
# 希望能
# 在这种
# 仅是
# 这篇
# 能将
# 不正常
# 您所
# 小编
# 单击
# 值为
# 大家多多
# 键值
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
jQuery 常见小例汇总
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何快速重置建站主机并恢复默认配置?
如何在建站之星绑定自定义域名?
教你用AI将一段旋律扩展成一首完整的曲子
JavaScript数据类型有哪些_如何准确判断一个变量的类型
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
java中使用zxing批量生成二维码立牌
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
Laravel如何实现用户注册和登录?(Auth脚手架指南)
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
网站制作免费,什么网站能看正片电影?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
音响网站制作视频教程,隆霸音响官方网站?
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
如何基于云服务器快速搭建网站及云盘系统?
php json中文编码为null的解决办法
手机网站制作与建设方案,手机网站如何建设?
Laravel PHP版本要求一览_Laravel各版本环境要求对照
简单实现Android文件上传
Python自动化办公教程_ExcelWordPDF批量处理案例
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
linux写shell需要注意的问题(必看)
如何用腾讯建站主机快速创建免费网站?
高防服务器租用首荐平台,企业级优惠套餐快速部署
零基础网站服务器架设实战:轻量应用与域名解析配置指南
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
canvas 画布在主流浏览器中的尺寸限制详细介绍
Laravel如何使用Eloquent进行子查询
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
JavaScript Ajax实现异步通信
php 三元运算符实例详细介绍
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Android自定义控件实现温度旋转按钮效果
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
java获取注册ip实例
公司网站制作需要多少钱,找人做公司网站需要多少钱?
高端建站三要素:定制模板、企业官网与响应式设计优化
如何在阿里云部署织梦网站?
如何实现建站之星域名转发设置?
Laravel如何配置和使用缓存?(Redis代码示例)
Swift开发中switch语句值绑定模式
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
如何正确选择百度移动适配建站域名?
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
上一篇:laravel服务容器是什么
下一篇:如何让元素背景从右侧开始收缩显示
上一篇:laravel服务容器是什么
下一篇:如何让元素背景从右侧开始收缩显示

