<filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
`applicationContext.xml`:记得加 **静态资源过滤** 和 **注解驱动配置**。<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 --> <context:component-scan base-package="com.yusael.controller"/> <!--静态资源过滤--> <mvc:default-servlet-handler/> <!--注解驱动配置--> <mvc:annotation-driven/> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!-- 前缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 后缀 --> <property name="suffix" value=".jsp" /> </bean>
编写一个 `AjaxController`:
@RestController
public class AjaxController {
@RequestMapping("/ajax1") public void ajax1(String name, HttpServletResponse response) throws IOException { if ("admin".equals(name)) { response.getWriter().write("true"); } else { response.getWriter().write("false"); } }
}
编写 `index.jsp` 测试:
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
<title>Ajax测试</title> <script src="${pageContext.request.contextPath}/statics/js/jquery-3.4.1.min.js"></script> <script> function a1() { $.ajax({ url : "${pageContext.request.contextPath}/ajax1", data : {'name' : $("#username").val()}, success : function(data, status) { alert(data); alert(status); }, error : function () {} }); } </script>
<%--onblur:失去焦点触发事件--%> 用户名: <input type="text" id="username" onblur="a1()">
![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=2020061423190750.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNDA5NQ==,size_16,color_FFFFFF,t_70) []( )Ajax 执行流程 ---------------------------------------------------------------------------- ![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20200614233752946.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNDA5NQ==,size_16,color_FFFFFF,t_70) []( )Ajax 异步加载数据案例 ================================================================================ 首先写一个实体类 `User`:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name; private int age; private String sex;
}
在 Controller 中获取一个集合对象,展示到前端页面:
@RequestMapping("/ajax2")
public List ajax2() {
List<User> list = new ArrayList<>(); list.add(new User("zhenyu", 21, "男")); list.add(new User("yusael", 99, "男")); list.add(new User("hahaha", 18, "女")); return list; // 由于@RestController注解, 将list转成json格式返回
}
前端页面:`ajaxtest.jsp`
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
<meta charset="UTF-8"> <title>Ajax测试</title>
<tr> <td>姓名</td> <td>年龄</td> <td>性别</td> </tr> <tbody id="content"></tbody>
![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20200615000523518.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNDA5NQ==,size_16,color_FFFFFF,t_70) []( )Ajax 验证用户名密码 =============================================================================== 思考一下:我们平时登录时,输入框后面的实时提示是怎么做到的? `Controller`:
@RequestMapping("/ajax3")
public String ahax3(String name, String pwd) {
String msg = ""; if (name != null) { if ("admin".equals(name)) { msg = "OK"; } else { msg = "用户名有误!"; } } if (pwd != null) { if ("123456".equals(pwd)) { msg = "OK"; } else { msg = "密码输入有误!"; } } return msg;
}
前端页面 `login.jsp`:
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
<title>Login</title> <script src="${pageContext.request.contextPath}/statics/js/jquery-3.4.1.min.js"></script> <script> function a1() { $.post({ url : "${pageContext.request.contextPath}/ajax3", data : {'name' : $("#name").val()}, success : function (data) { if (data.toString() === 'OK') { $("#userInfo").css("color", "green"); } else { $("#userInfo").css("color", "red"); } $("#userInfo").html(data); } }); } function a2() { $.post("${pageContext.request.contextPath}/ajax3", {'pwd' : $("#pwd").val()}, function (data) { if (data.toString() === "OK") { $("#pwdInfo").css("color", "green"); } else { $("#pwdInfo").css("color", "red"); } $("#pwdInfo").html(data); }); } </script>
用户名:
<span id="userInfo"></span>
密码: <input type="text" id="pwd" onblur="a2()"> <span id="pwdInfo"></span>
注:记得处理 JSON 乱码! `applicationContext.xml` 中加入以下代码:
mvc:annotation-driven
<mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8"/> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"> <property name="failOnEmptyBeans" value="false"/> </bean> </property> </bean> </mvc:message-converters>
</mvc:annotation-driven>
![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20200615003237873.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNDA5NQ==,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20200615003254669.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNDA5NQ==,size_16,color_FFFFFF,t_70) []( )获取 百度 接口案例 ============================================================================= ![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=2020061500345580.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNDA5NQ==,size_16,color_FFFFFF,t_70)
<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写入ul Ul.innerHTML = html; } } // 1.步骤一 window.onload = function(){ // 获取输入框和ul var Q = document.getElementById('q'); var Ul = document.getElementById('ul'); // 事件鼠标抬起时候 Q.onkeyup = function(){ // 如果输入框不等于空 if (this.value != '') { // ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆JSONPz重点☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ // 创建标签 var script = document.createElement('script'); //给定要跨域的地址 赋值给src //这里是要请求的跨域的地址 我写的是百度搜索的跨域地址
Redis基于内存,常用作于缓存的一种技术,并且Redis存储的方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。
Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。
抬起时候
Q.onkeyup = function(){ // 如果输入框不等于空 if (this.value != '') { // ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆JSONPz重点☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ // 创建标签 var script = document.createElement('script'); //给定要跨域的地址 赋值给src //这里是要请求的跨域的地址 我写的是百度搜索的跨域地址
Redis基于内存,常用作于缓存的一种技术,并且Redis存储的方式是以key-value的形式。Redis是如今互联网技术架构中,使用最广泛的缓存,在工作中常常会使用到。Redis也是中高级后端工程师技术面试中,面试官最喜欢问的问题之一,因此作为Java开发者,Redis是我们必须要掌握的。
Redis 是 NoSQL 数据库领域的佼佼者,如果你需要了解 Redis 是如何实现高并发、海量数据存储的,那么这份腾讯专家手敲《Redis源码日志笔记》将会是你的最佳选择。
[外链图片转存中…(img-MCCaLdjX-1630666418307)]
CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】