【WEEK4】 【DAY5】AJAX第二部分【中文版】

2024.3.22 Friday

接上文【WEEK4】 【DAY4】AJAX第一部分【中文版】

目录

  • 8.4.Ajax异步加载数据
    • 8.4.1.新建User.java
    • 8.4.2.在pom.xml中添加lombok、jackson支持
    • 8.4.3.更改tomcat设置
    • 8.4.4.修改AjaxController.java
    • 8.4.5.新建test2.jsp
      • 8.4.5.1.注意:和WEB-INF平级!
      • 8.4.5.2.验证点击事件
      • 8.4.5.3.输出userList的内容
      • 8.4.5.4.修改JavaScript版本
      • 8.4.5.5.再修改test2.jsp,使userList直接在网页上显示
    • 8.4.6.运行
  • 8.5.Ajax验证用户名体验
    • 8.5.1.修改AjaxController.java
    • 8.5.2.新建login.jsp
    • 8.5.3.运行
  • 8.6.获取百度接口demo

8.4.Ajax异步加载数据

8.4.1.新建User.java

在这里插入图片描述

package P24.project;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private String name;private int age;private String gender;
}

8.4.2.在pom.xml中添加lombok、jackson支持

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>SpringMVC_try1</artifactId><groupId>com.kuang</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>P24</groupId><artifactId>springmvc-06-ajax</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.2</version></dependency></dependencies></project>

8.4.3.更改tomcat设置

初始情况下Application context的默认值为/springmvc_06_ajax_war_exploded,可以修改为/,简化url。
在这里插入图片描述
在这里插入图片描述

8.4.4.修改AjaxController.java

package P24.controller;import P24.project.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;//不返回到视图解析器
@RestController
public class AjaxController {@RequestMapping("/t1")public String test(){return "hello";}@RequestMapping("/a1")public void a(String name, HttpServletResponse response) throws IOException {System.out.println("a1:param=>"+name);if ("zzz".equals(name)){response.getWriter().print("true");}else {response.getWriter().print("false");}}@RequestMapping("/a2")public List<User> a2(){List<User> userList = new ArrayList<User>();//添加数据userList.add(new User("zhangsan",11,"male"));userList.add(new User("lisi",22,"female"));userList.add(new User("wangwu",33,"male"));return userList;}
}

8.4.5.新建test2.jsp

8.4.5.1.注意:和WEB-INF平级!

在这里插入图片描述
否则无法通过更改url访问jsp文件!(如下图)将出现404的问题【因为位置错误导致的404找了几乎一天,实际上只需要在创建时注意好即可!】
在这里插入图片描述
如果无意之间把test2.jsp放在了WEB-INF/jsp目录下其实也可以访问(不推荐),步骤如下:

  1. 修改AjaxController.jsp,将代码改为使用视图解析器的方式
  2. 创建方法t2访问test2,此时,通过视图解析器即可访问到WEB-INF/jsp/test2.jsp
package P24.controller;import P24.project.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;@Controller //会返回到视图解析器
//@RestController   //不返回到视图解析器//    如果需要从控制器访问test2.jsp,则需要使用applicationContext.xml中的视图解析器
//    在此情况下,最外层AjaxController方法需要使用@Controller注释@GetMapping("/t2")public String t2(){return "/WEB-INF/test2.jsp";}
}
  1. 其他方式可参考以下链接进行修改,注意idea项目 的真实保存地址,不能在tomcat的保存地址进行操作(更不推荐,个人觉得很繁琐)
    https://www.cnblogs.com/jet-angle/p/11477297.html
    https://www.cnblogs.com/atsong/p/13118155.html

8.4.5.2.验证点击事件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><script src="${pageContext.request.contextPath}/statics/js/jquery-3.7.1.js"></script><script>$(function () {$("#btn").click(function (){console.log("test2");})});</script>
</head><body>
<%--先获取事件--%>
<input type="button" value="加载数据" id="btn">
<%--用table展示页面--%>
<table><tr><td>姓名</td><td>年龄</td><td>性别</td></tr><tbody><%--数据在后台,无法直接获取,所以需要使用“请求”--%></tbody>
</table>
</body>
</html>

http://localhost:8080/springmvc_06_ajax_war_exploded/test2.jsp
F12加载出console页,然后点击“加载数据”即可看到console.log(“test2”);被运行,输出“test2”
在这里插入图片描述

8.4.5.3.输出userList的内容

只需要将上一步的function进行修改

  <script>$(function () {$("#btn").click(function (){//$.post(url, param[可省略], success)$.post("${pageContext.request.contextPath}/a2",function(data){console.log(data);})})});</script>

http://localhost:8080/springmvc_06_ajax_war_exploded/test2.jsp
在这里插入图片描述

8.4.5.4.修改JavaScript版本

如图,目前一般都是默认6+
在这里插入图片描述
在这里插入图片描述

8.4.5.5.再修改test2.jsp,使userList直接在网页上显示

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><script src="${pageContext.request.contextPath}/statics/js/jquery-3.7.1.js"></script><script>$(function () {$("#btn").click(function (){//$.post(url, param[可省略], success)$.post("${pageContext.request.contextPath}/a2",function(data){// console.log(data);var html="";for (let i = 0; i < data.length; i++) {html += "<tr>" +"<td>" + data[i].name + "</td>" +"<td>" + data[i].age + "</td>" +"<td>" + data[i].sex + "</td>" +"</tr>"}$("#content").html(html); //将var html="<>";中的元素放入这行});})});</script>
</head><body>
<%--先获取事件--%>
<input type="button" value="加载数据" id="btn">
<%--用table展示页面--%>
<table><tr><td>姓名</td><td>年龄</td><td>性别</td></tr><tbody id="content"><%--数据在后台,无法直接获取,所以需要使用“请求”--%></tbody>
</table>
</body>
</html>

8.4.6.运行

http://localhost:8080/springmvc_06_ajax_war_exploded/test2.jsp
在这里插入图片描述

8.5.Ajax验证用户名体验

8.5.1.修改AjaxController.java

package P24.controller;import P24.project.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;//@Controller //会返回到视图解析器
@RestController   //不返回到视图解析器
public class AjaxController {@RequestMapping("/t1")public String test(){return "hello";}//    如果需要从控制器访问test2.jsp,则需要使用applicationContext.xml中的视图解析器
//    在此情况下,最外层AjaxController方法需要使用@Controller注释
//    @GetMapping("/t2")
//    public String t2(){
//        return "/WEB-INF/test2.jsp";
//    }@RequestMapping("/a1")public void a(String name, HttpServletResponse response) throws IOException {System.out.println("a1:param=>"+name);if ("zzz".equals(name)){response.getWriter().print("true");}else {response.getWriter().print("false");}}@RequestMapping("/a2")public List<User> a2(){List<User> userList = new ArrayList<User>();//添加数据userList.add(new User("zhangsan",11,"male"));userList.add(new User("lisi",22,"female"));userList.add(new User("wangwu",33,"male"));return userList;}@RequestMapping("/a3")public String a3(String name, String pwd){String msg = "";if (name != null){//admin这些数据应该在数据库中if ("admin".equals(name)){msg = "Accepted";}else {msg = "name have an error";}}if (pwd != null){//123456这些数据应该在数据库中if ("123456".equals(pwd)){msg = "Accepted";}else {msg = "password has an error";}}return msg;}
}

8.5.2.新建login.jsp

在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><script src="${pageContext.request.contextPath}/statics/js/jquery-3.7.1.js"></script><script>function a1(){$.post({url:"${pageContext.request.contextPath}/a3",data:{'name':$("#name").val()},success:function (data) {if (data.toString()=='Accepted'){$("#userInfo").css("color","green");}else {$("#userInfo").css("color","red");}$("#userInfo").html(data);  //在网页上打印出data}});}function a2() {$.post({url:"${pageContext.request.contextPath}/a3",data:{'pwd':$("#pwd").val()},success:function (data) {if (data.toString()=='Accepted'){$("#pwdInfo").css("color","green");}else {$("#pwdInfo").css("color","red");}$("#pwdInfo").html(data);}});}</script>
</head>
<body><p>
<%--  失去焦点--%>用户名: <input type="text" id="name" onblur="a1()">
<%--  提示信息--%><span id="userInfo"></span>
</p>
<p>密码: <input type="text" id="pwd" onblur="a2()"><span id="pwdInfo"></span>
</p></body>
</html>

8.5.3.运行

http://localhost:8080/springmvc_06_ajax_war_exploded/login.jsp
在这里插入图片描述
在这里插入图片描述

8.6.获取百度接口demo

在这里插入图片描述

<!DOCTYPE HTML>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>JSONP百度搜索</title><style>#q{width: 500px;height: 30px;border:1px solid #ddd;line-height: 30px;display: block;margin: 0 auto;padding: 0 10px;font-size: 14px;}#ul{width: 520px;list-style: none;margin: 0 auto;padding: 0;border:1px solid #ddd;margin-top: -1px;display: none;}#ul li{line-height: 30px;padding: 0 10px;}#ul li:hover{background-color: #f60;color: #fff;}</style><script>// 2.步骤二// 定义demo函数 (分析接口、数据)function demo(data){var Ul = document.getElementById('ul');var html = '';// 如果搜索数据存在 把内容添加进去if (data.s.length) {// 隐藏掉的ul显示出来Ul.style.display = 'block';// 搜索到的数据循环追加到li里for(var i = 0;i<data.s.length;i++){html += '<li>'+data.s[i]+'</li>';}// 循环的li写入ulUl.innerHTML = html;}}// 1.步骤一window.onload = function(){// 获取输入框和ulvar Q = document.getElementById('q');var Ul = document.getElementById('ul');// 事件鼠标抬起时候Q.onkeyup = function(){// 如果输入框不等于空if (this.value != '') {// ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆JSONPz重点☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆// 创建标签var script = document.createElement('script');//给定要跨域的地址 赋值给src//这里是要请求的跨域的地址 我写的是百度搜索的跨域地址script.src = 'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd='+this.value+'&cb=demo';// 将组合好的带src的script标签追加到body里document.body.appendChild(script);}}}</script>
</head><body>
<input type="text" id="q" />
<ul id="ul"></ul>
</body>
</html>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文解析:固定电感器结构、作用及其与扼流圈和可变电感器的差异

固定电感器是一种电子元件又称固定线圈&#xff0c;用于在电路中产生固定的电感值。电感是指导致电流变化时产生电动势的能力&#xff0c;通常用亨利&#xff08;Henry&#xff09;作为单位。固定电感器的电感值是预先确定的&#xff0c;通常以特定的数值标识&#xff0c;例如1…

【正点原子FreeRTOS学习笔记】————(10)FreeRTOS时间管理

这里写目录标题 一、延时函数介绍&#xff08;了解&#xff09;二、延时函数解析&#xff08;熟悉&#xff09;三、延时函数演示实验&#xff08;掌握&#xff09; 一、延时函数介绍&#xff08;了解&#xff09; 相对延时&#xff1a;指每次延时都是从执行函数vTaskDelay()开始…

onnxruntime 中的 Gather 算子

上一篇文章中介绍了 Division by Invariant Integers using Multiplication 的原理&#xff0c;很多框架均才用该算法优化除法运算。onnxruntime 是已知实现中最为简洁的&#xff0c;因此本文结合 onnxruntime 的 Gather 实现进行介绍。 Gather 算子是一个索引类算子&#xff0…

Python(django)之单一接口展示功能前端开发

1、代码 建立apis_manage.html 代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>测试平台</title> </head> <body role"document"> <nav c…

S7-200 SMART 选型指南及详细技术参数

S7-200 SMART 选型指南 选型指南 硬件能力 功能 CPU外形结构与电源需求计算 直流安装 交流安装 电源需求与计算 S7-200 SMART CPU模块提供5VDC和24VDC电源&#xff1a; CPU有一个内部电源&#xff0c;用于为CPU、扩展模块、信号板提供电源和满足其他24 VDC用户电源需求。请使…

鸿蒙HarmonyOS应用开发之使用Node-API接口进行线程安全开发

场景介绍 napi_create_threadsafe_function是Node-API接口之一&#xff0c;用于创建一个线程安全的JavaScript函数。主要用于在多个线程之间共享和调用&#xff0c;而不会出现竞争条件或死锁。例如以下场景&#xff1a; 异步计算&#xff1a;如果需要进行耗时的计算或IO操作&a…

Scala介绍与环境搭建

Scala环境搭建与介绍 一、Scala环境搭建 1、环境准备与下载 2、验证Scala 3、IDEA新建项目&#xff0c;配置Scala&#xff0c;运行Hello world 二、Scala介绍 1、Scala 简介 2、Scala 概述 一、Scala环境搭建 1、环境准备与下载 JDK1.8 Java Downloads | Oracle 下载需求版本…

如何将python项目转变成deb安装包

先将python项目转变成可执行文件 1. 首先确保你的python项目可以正常执行 2.安装pyinstaller模块&#xff0c;pip install pyinstaller -i Simple Index 3.确定好你的项目的文件入口&#xff0c;也就是运行的文件.py 4. 开始打包成单文件&#xff0c;pyinstaller -F <第…

STM32学习笔记(6_7)- TIM定时器的编码器接口原理

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 现在开…

【Java程序设计】【C00374】基于(JavaWeb)Springboot的社区疫情管理系统(有论文)

TOC 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;博客中有上百套程序可供参考&#xff0c;欢迎共同交流学习。 项目简介 项目获取 &#x1f345;文末点击卡片…

教学软件哪个好?这个一站式智慧教学系统值得推荐!

过去培训机构老师授课的场景主要在线下&#xff0c;可以使用大屏幕 PPT 来完成培训的交付&#xff0c;而现在随着数字化基础设施的完善&#xff0c;同时为了尽可能覆盖更多的人&#xff0c;依赖线下的培训场景也逐步转移到线上来完成&#xff0c;因此也对在线教学工具产生了需…

东方博宜 1521. 计算分数加减表达式的值

东方博宜 1521. 计算分数加减表达式的值 #include<iostream> #include<iomanip> using namespace std; int main() {double n ;cin >> n ;double sum ;sum 0.0 ;double j ;j 1.0 ;for (int i 1 ; i < n ; i){sum 1.0 / i * j ; j * -1 ;}cout <…

计算机网络01-20

计算机网络01-20 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用1、OSI 的七层模型分别是&#xff1f;各自的功能是什么&#xff1f;2、说一下一次完整的HTTP请求过程包括哪些内容&#xff1f;孤单小弟 —— HTTP真实地址查询 —— DNS指南好帮手 —— 协议栈可…

Docker进阶:Docker Swarm —弹性伸缩调整服务的副本数量

Docker进阶&#xff1a;Docker Swarm —弹性伸缩调整服务的副本数量 1、 创建一个Nginx服务&#xff08;Manager节点&#xff09;2、查看服务状态&#xff08;Manager节点&#xff09;3、测试访问&#xff08;Worker节点&#xff09;4、查看服务日志&#xff08;Manager节点&am…

详解智慧路灯杆网关的集中供电能力

智慧路灯杆网关是智慧杆物联网系统中不可或缺的设备。智慧杆网关不仅可以作为杆载设备与云平台、设备与设备之间的桥梁&#xff0c;促进数据的无缝传输&#xff0c;而且还能提供高效的能源管理和供电功能。 BMG8200系列交流型智慧路灯杆网关就集成了强大的供电能力&#xff0c;…

浅析扩散模型与图像生成【应用篇】(十三)——PITI

13. Pretraining is All You Need for Image-to-Image Translation 该文提出一种基于预训练扩散模型的图像转换方法&#xff0c;称为PITI。其思想并不复杂&#xff0c;就是借鉴现有视觉和NLP领域中常见的预训练方法&#xff0c;考虑预先在一个大规模的任务无关数据集上对扩散模…

nginx学习记录-反向代理

1. 反向代理 一个简单的反向代理示意图如下&#xff1a; 我们的PC需要访问内网资源时&#xff0c;网关路由不直接将请求转发给内网的应用服务器&#xff0c;而是通过nginx服务器进行代理转发&#xff0c;转发到应用服务器上&#xff0c;应用服务器响应请求后会将响应数据再通过…

AJAX~

概念:AJAX(Asynchronous JavaScript And XML):异步的JavaScript和XML AJAX作用&#xff1a; 1.与服务器进行数据交换:通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的数据 使用了AJAX和服务器进行通信&#xff0c;就可以使用HTMLAJAX来替换JSP页面了 2&#xf…

【MATLAB源码-第170期】基于matlab的BP神经网络股票价格预测GUI界面附带详细文档说明。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 基于BP神经网络的股票价格预测是一种利用人工神经网络中的反向传播&#xff08;Backpropagation&#xff0c;简称BP&#xff09;算法来预测股票市场价格变化的技术。这种方法通过模拟人脑的处理方式&#xff0c;尝试捕捉股票…

欧美用户真实反馈!他们为什么选择爱可声助听器?

在竞争激烈的助听器市场上&#xff0c;爱可声助听器在欧美地区赢得了广泛的认可和好评。为什么越来越多的欧美用户选择爱可声助听器呢&#xff1f; 约翰&#xff0c;纽约的退休音乐教师 约翰是一位热爱音乐的退休音乐教师&#xff0c;他的一生都与音乐相伴&#xff0c;从年轻…