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


相关推荐: Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  Linux系统命令中screen命令详解  奇安信“盘古石”团队突破 iOS 26.1 提权  网站制作壁纸教程视频,电脑壁纸网站?  利用vue写todolist单页应用  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  高性能网站服务器部署指南:稳定运行与安全配置优化方案  无锡营销型网站制作公司,无锡网选车牌流程?  如何快速使用云服务器搭建个人网站?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  JavaScript实现Fly Bird小游戏  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  中山网站推广排名,中山信息港登录入口?  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  nodejs redis 发布订阅机制封装实现方法及实例代码  制作旅游网站html,怎样注册旅游网站?  详解jQuery停止动画——stop()方法的使用  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  Android okhttputils现在进度显示实例代码  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Laravel如何实现文件上传和存储?(本地与S3配置)  Laravel如何自定义错误页面(404, 500)?(代码示例)  Laravel怎么实现验证码(Captcha)功能  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  大型企业网站制作流程,做网站需要注册公司吗?  Laravel怎么为数据库表字段添加索引以优化查询  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  如何用虚拟主机快速搭建网站?详细步骤解析  JS碰撞运动实现方法详解  JavaScript模板引擎Template.js使用详解  做企业网站制作流程,企业网站制作基本流程有哪些?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  如何为不同团队 ID 动态生成多个独立按钮  如何获取上海专业网站定制建站电话?  Laravel怎么在Blade中安全地输出原始HTML内容  零服务器AI建站解决方案:快速部署与云端平台低成本实践  详解Oracle修改字段类型方法总结  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Python正则表达式进阶教程_复杂匹配与分组替换解析  如何用好域名打造高点击率的自主建站?  如何在云主机上快速搭建多站点网站?  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  网站制作免费,什么网站能看正片电影?  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Android仿QQ列表左滑删除操作