<%--
Created by IntelliJ IDEA.
User: muqua
Date: 2022/7/26
Time: 19:04
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录验证title>
<script src="${pageContext.request.contextPath}/static/js/jquery-3.6.0.js">script>
head>
<body>
<p>
用户名:<input type="text" id="name" onblur="a1()">
<br>
<span id="userInfo">span>
p>
<p>
密码:<input type="text" id="pwd" onblur="a2()">
<br>
<span id="pwdInfo">span>
p>
<script>
function a1(){
$.post({
url: "${pageContext.request.contextPath}/a3",
data: {
"name": $("#name").val()
},
success: (res) => {
if(res === 'ok'){
$("#userInfo").css("color","green");
}else{
$("#userInfo").css("color","red");
}
$("#userInfo").html(res);
}
})
}
function a2(){
$.post({
url: "${pageContext.request.contextPath}/a3",
data: {
"pwd": $("#pwd").val()
},
success: (res) => {
if(res === 'ok'){
$("#pwdInfo").css("color","green");
}else{
$("#pwdInfo").css("color","red");
}
$("#pwdInfo").html(res);
}
})
}
script>
body>
html>
@RequestMapping("/a3")
public String a3(String name,String pwd){
String msg = "";
System.out.println(name + " || " + pwd);
if(name != null){
// admin 这些数据 应该在数据库中查
if("admin".equals(name)){
msg = "ok";
}else{
msg = "用户名有误";
}
}
if(pwd != null){
// admin 这些数据 应该在数据库中查
if("123".equals(pwd)){
msg = "ok";
}else{
msg = "密码有误";
}
}
return msg;
}
SpringMVC 的处理拦截器
类似于 Servlet 开发中的 过滤器 Filter
,用于 对 处理器进行预处理和后处理。开发者 可以自己定义一些拦截器来实现 特定的功能。
过滤器和拦截器的区别:拦截器是基于AOP思想开发出来的具体应用。也就是说 它是切面编程的,不会对原有的 代码 有影响。
拦截器还有一个最大的好处:它会自动的过滤掉 jsp、html、css、image、js 等一系列资源文件,不去做 拦截的访问。而只对 Controller 方法进行拦截!!!
applicationContext.xml
中 配置 拦截器
<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
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="top.muquanyu.controller">context:component-scan>
<mvc:default-servlet-handler>mvc:default-servlet-handler>
<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>
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/">property>
<property name="suffix" value=".jsp">property>
bean>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**/"/>
<bean class="top.muquanyu.config.MyInterceptor">bean>
mvc:interceptor>
mvc:interceptors>
beans>
HandlerInterceptor
接口,就是一个拦截器了。preHandle
:请求目标页面/Controller方法 处理前,触发拦截。
postHandle
:Controller方法处理完之后,DispatcherServlet进行视图的渲染之前,也就是说在这个方法中你可以对ModelAndView进行操作
afterCompletion
:DispatcherServlet进行视图的渲染之后,多用于清理资源。
preHandle 的返回值 是 boolean 类型的,返回 true 则继续执行下一个拦截器 或 直接访问到页面。返回 false 则 卡住 不再往下执行。
package top.muquanyu.config;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("============处理前============");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("============处理后============");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("============进行清理============");
}
}
package top.muquanyu.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@RequestMapping("/t1")
public String test(){
System.out.println("TestController==> test() 执行了!");
return "OK";
}
}