SpringMVC学习笔记

SpringMVC学习笔记

1.0 SpringMVC简介

SpringMVC 也叫Spring web mvc。是Spring 框架的一部分,是在Spring3.0 后发布的。

1.1 SpringMVC的优点

1.1.1基于MVC 架构

基于 MVC 架构,功能分工明确。解耦合。

1.1.2容易理解,上手快,使用简单

就可以开发一个注解的 SpringMVC 项目,SpringMVC 也是轻量级的,jar 很小。不依赖的特定的接口和类。

1.1.3作为Spring框架一部分,能够使用Spring的IOC和AOP

方便整合Strtus,MyBatis,Hiberate,JPA 等其他框架。

1.1.4 SpringMVC 强化注解的使用

在Controller, Service, Dao 都可以使用注解。方便灵活。使用@Controller 创建处理器对象,@Service 创建业务对象,@Autowired 或者@Resource 在控制器类中注入 Service,在Service 类中注入 Dao。

1.2 SpringMVC执行的流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dna1bQSe-1660750183150)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817161147933.png)]

执行流程说明:

  1. 向服务器发送HTTP请求,请求被前端控制器 DispatcherServlet 捕获。

  2. DispatcherServlet 根据中的配置对请求的URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用 HandlerMapping 获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以 HandlerExecutionChain 对象的形式返回。

  3. DispatcherServlet 根据获得的Handler,选择一个合适的 HandlerAdapter。

  4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

HttpMessageConveter:将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息。

数据转换:对请求消息进行数据转换。如String转换成Integer、Double等。

数据格式化:对请求消息进行数据格式化。如将字符串转换成格式化数字或格式化日期等。

数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中。

  1. Handler(Controller)执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象。

  2. 根据返回的ModelAndView,选择一个适合的 ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet。

  3. ViewResolver 结合Model和View,来渲染视图。

  4. 视图负责将渲染结果返回给客户端。

1.3基于注解的SpringMVC程序

所谓 SpringMVC 的注解式开发是指,在代码中通过对类与方法的注解,便可完成处理器在 springmvc 容器的注册。注解式开发是重点。

项目案例功能:用户提交一个请求,服务端处理器在接收到这个请求后,给出一条欢迎信息,在响应页面中显示该信息。

1.3.1创建maven工程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Q1LXtn2-1660750183151)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817164927777.png)]

web.xml版本太低了,删除web.xml文件重新添加。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xlt6KJIj-1660750183152)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817165512592.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AdXetO3h-1660750183153)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817165417990.png)]

在web.xml文件中注册SpringMvc框架。因为web的请求都是由Servlet来进行处理的,而SpringMVC的核心处理器就是一个DispatcherServlet,它负责接收客户端的请求,并根据请求的路径分派给对应的action(控制器)进行处理,处理结束后依然由核心处理器DispatcherServlet进行响应返回。

classpath:springmvc.xml表示从类路径下加载SpringMVC的配置文件。

指定拦截以.action结尾的请求,交给核心处理器DispatcherServlet处理。

1)删除index.jsp页面,重新建index.jsp页面,因为自动生成的页面缺失指令设置。

2)开发页面,发出请求。

  <servlet>
    <servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-imqRhxqi-1660750183154)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817170637083.png)]

删除index.jsp页面,重新建index.jsp页面,因为自动生成的页面缺失指令设置。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <a href="${pageContext.request.contextPath}/zar/hello.action">访问action</a>
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AqL1Ifxm-1660750183155)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817170627157.png)]

/zar 是类上的注解路径

/hello 是方法上的注解路径

1)在webapp目录上新添目录/admin。

2)在/admin目录下新建main.jsp页面。用来进行服务器处理完毕后数据的回显。

3)开发HelloSpringMvc.java–>控制器(相当于以前的servlet)。这是一个普通的类,不用继承和实现接口。类中的每个方法就是一个具体的action控制器。

在resource建立springmvc.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"
       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">

<!--    添加包扫描-->
    <context:component-scan base-package="com.bbgu.edu.controller"></context:component-scan>
<!--    添加视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--    配置前缀-->
        <property name="prefix" value="/admin/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    
</beans>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RjGlEvbc-1660750183157)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817201033253.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o6QYeuWf-1660750183158)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817201215600.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ySvwqi71-1660750183159)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817201224639.png)]

SpringMVC框架为了避免对于请求资源路径与扩展名上的冗余,在视图解析器

InternalResouceViewResolver 中引入了请求的前辍与后辍。而action中只需给出要跳转页面的文件名即可,对于具体的文件路径与文件扩展名,视图解析器会自动完成拼接。

context:component-scan:用来进行包扫描,这里用于指定@Controller注解所在的包路径。

1.4 SpringMVC注解式开发

通过@RequestMapping 注解可以定义处理器对于请求的映射规则。该注解可以注解在方法上,也可以注解在类上,但意义是不同的。value 属性值常以“/”开始。@RequestMapping 的 value 属性用于定义所匹配请求的 URI。

一个@Controller 所注解的类中,可以定义多个处理器方法。当然,不同的处理器方法所匹配的 URI 是不同的。这些不同的 URI 被指定在注解于方法之上的@RequestMapping 的value 属性中。但若这些请求具有相同的 URI 部分,则这些相同的 URI部分可以被抽取到注解在类之上的@RequestMapping 的 value 属性中。此时的这个 URI 表示模块(相当于包)的名称。URI 的请求是相对于 Web 的根目录。换个角度说,要访问处理器的指定方法,必须要在方法指定 URI 之前加上处理器类前定义的模块名称。、

提取前

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p9q74Uih-1660750183160)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817201403325.png)]

提取后

@Controller
@RequestMapping("/zar")
public class HelloSpringMvc {
//相当于一个控制器处理的方法
@RequestMapping("/hello")
public String one() {
return "main";
}
@RequestMapping("/two")
public String two() {
return "main";
}
//客户端的请求:
// <form action="${pageContext.request.contextPath}/zar/hello.action">
    // <form action="${pageContext.request.contextPath}/zar/two.action">
}

1.5对请求提交方式的定义

对于@RequestMapping,其有一个属性 method,用于对被注解方法所处理请求的提交方式进行限制,即只有满足该 method 属性指定的提交方式的请求,才会执行该被注解方法。Method 属性的取值为 RequestMethod 枚举常量。常用的为 RequestMethod.GET 与RequestMethod.POST,分别表示提交方式的匹配规则为 GET 与 POST 提交。

@RequestMapping(value = "/hello",method = RequestMethod.POST)

以上处理器方法只能处理 POST 方式提交的请求。

客户端浏览器常用的请求方式,及其提交方式有以下几种:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f2VlplDU-1660750183163)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817201746865.png)]

也就是说,只要指定了处理器方法匹配的请求提交方式为 POST,则相当于指定了请求发送的方式:要么使用表单请求,要么使用 AJAX 请求。其它请求方式被禁用。当然,若不指定 method 属性,则无论是 GET 还是 POST 提交方式,均可匹配。即对于请求的提交方式无要求

1.5.1post提交方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GNyhuZT6-1660750183165)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817201933784.png)]

1.5.2get提交方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W0zKwgpD-1660750183166)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817201951519.png)]

1.6 五种数据提交的方式

1.6.1在方法中声明一个和表单提交的参数名称相同的参数,由框架按照名称直接注入。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qcEd3e2G-1660750183168)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817202052770.png)]

1.6.2对象封装注入

在方法中声明一个自定义的实体类参数,框架调用实体类中相应的setter方法注入属性值,只要保证实体类中成员变量的名称与提交请求的name属性值一致即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rxW21b6B-1660750183169)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817202202254.png)]

1.6.3动态占位符提交(仅用于超链接)

使用框架提供的一个注解@PathVariable,将请求url中的值作为参数进行提取,只能是超链接。restful风格下的数据提取方式。restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3yHeVCtr-1660750183169)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817202747216.png)]

1.6.4请求参数名称与形参名称不一致

请求与形参中的名字不对应,可以使用@RequestParam(value=“name1”,required=true)String namea来进行参数名称绑定。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OlSg5Dsx-1660750183169)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817205417657.png)]

1.6.5使用HttpServletRequest对象提取

在方法参数中声明一个request对象,使用request的getParameter()获取表单提交的数据,这样得到的数据还要手工进行数据类型的转换。

public String five(HttpServletRequest request){
int age=new Integer(request.getParameter("stuage"));
String name=request.getParameter("stuname");
System.out.println(age+"*********"+name);
    return "main";
}

1.7请求参数中文乱码解决

对于前面所接收的请求参数,若含有中文,则会出现中文乱码问题。Spring 对于请求参数中的中文乱码问题,给出了专门的字符集过滤器: spring-web-5.2.5.RELEASE.jar 的org.springframework.web.filter 包下的 CharacterEncodingFilter 类。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VfX69FSM-1660750183170)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817205622390.png)]

解决方案

在 web.xml 中注册字符集过滤器,即可解决 Spring 的请求参数的中文乱码问题。不过,最好将该过滤器注册在其它过滤器之前。因为过滤器的执行是按照其注册顺序进行的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZwlCx8Ug-1660750183174)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817205708568.png)]

1.8处理器方法的返回值

使用@Controller 注解的处理器的方法,其返回值常用的有四种类型:

  • 第一种:ModelAndView

  • 第二种:String

  • 第三种:无返回值void

  • 第四种:返回对象类型

1.8.1返回 ModelAndView

若处理器方法处理完后,需要跳转到其它资源,且又要在跳转的资源间传递数据,此时处理器方法返回 ModelAndView 比较好。当然,若要返ModelAndView,则处理器方法中需要定义 ModelAndView 对象。在使用时,若该处理器方法只是进行跳转而不传递数据,或只是传递数据而并不向任何资源跳转(如对页面Ajax 异步响应),此时若返回 ModelAndView,则将总是有一部分多余:要么 Model 多余,要么 View 多余。即此时返回 ModelAndView 将不合适。较少使用。

1.8.2返回 String

处理器方法返回的字符串可以指定逻辑视图名,通过视图解析器解析可以将其转换为物理视图地址。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TtbROvYZ-1660750183176)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817225102506.png)]

当然,也可以直接返回资源的物理视图名。不过,此时就不需要再在视图解析器中再配置前辍与后辍了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uOxRruMN-1660750183177)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817225300586.png)]

1.8.3无返回值void

对于处理器方法返回 void 的应用场景,应用在AJAX 响应处理。若处理器对请求处理后,无需跳转到其它任何资源,此时可以让处理器方法返回 void。

1.8.4返回对象Object

处理器方法也可以返回 Object 对象。这个 Object 可以是 Integer,自定义对象,Map,List 等。但返回的对象不是作为逻辑视图出现的,而是作为直接在页面显示的数据出现的。返回对象,需要使用@ResponseBody 注解,将转换后的 JSON 数据放入到响应体中。Ajax请求多用于Object返回值类型。由于转换器底层使用了Jackson 转换方式将对象转换为JSON 数据,所以需要添加Jackson的相关依赖。

1.9 SpringMVC的四种跳转方式

默认的跳转是请求转发,直接跳转到jsp页面展示,还可以使用框架提供的关键字redirect:,进行一个重定向操作,包括重定向页面和重定向action,使用框架提供的关键字forward:,进行服务器内部转发操作,包括转发页面和转发action。当使用redirect:和forward:关键字时,视图解析器中前缀后缀的拼接就无效了。

页面部分:

<!--ctrl+d:复制当前行-->
<a href="${pageContext.request.contextPath}/one.action">请求转发页面(默认)</a><br>
<a href="${pageContext.request.contextPath}/two.action">请求转发action</a><br>
<a href="${pageContext.request.contextPath}/three.action">重定向页面</a><br>
<a href="${pageContext.request.contextPath}/four.action">重定向action</a><br>

Controller部分:

@Controller
public class JumpAction {
    @RequestMapping("/one")
    public String one(){
        System.out.println("请求转发页面(默认)");
        //以前的访问方式
        //request.getRequestDispatcher("/admin/main.jsp").forward(request,response);
        //观察地址栏的变化:  http://localhost:8080/one.action
        //return "main"; //默认的访问方式是自动拼接前缀和后缀进行跳转
        return "forward:/fore/user.jsp";//只要使用了forward:就可以屏蔽前缀和后缀的拼接,自己手工构建返回的全部路径+.jsp
    }
    @RequestMapping("/two")
    public String two(){
        System.out.println("请求转发action");
        //观察地址栏的变化:  http://localhost:8080/two.action
        return "forward:/other.action";   //不使用forward:,就会是这样的路径  /admin/other.action/.jsp
    }
    @RequestMapping("/three")
    public String three(){
        System.out.println("重定向页面");
        //观察地址栏的变化  http://localhost:8080/admin/main.jsp
        return "redirect:/admin/main.jsp";//只要使用了redirect:就可以屏蔽前缀和后缀的拼接
    }
    @RequestMapping("/four")
    public String four(){
        System.out.println("重定向action");
        //观察地址栏的变化  http://localhost:8080/other.action
        return "redirect:/other.action";//只要使用了redirect:就可以屏蔽前缀和后缀的拼接
    }
}

2.0 SpringMVC支持的默认参数类型

这些类型只要写在方法参数中就可以使用了。

1.HttpServletRequest对象

2.HttpServletResponse对象

3.HttpSession对象

4.Model/ModelMap对象

5.Map<String,Object>对象

@Controller
public class ParamAction {
    @RequestMapping("/param")
    public String param(HttpServletRequest request,
                        HttpServletResponse response,
                        HttpSession session,
                        Model model,
                        ModelMap modelMap,
                        Map map){
        //Map ,Model,ModelMap,request都使用请求作用域进行传值,
        //所以必须使用请求转发的方式进行跳转,否则丢失数据
        Student stu = new Student("张三",22);
        request.setAttribute("requestStu",stu);
        session.setAttribute("sessionStu",stu);
        modelMap.addAttribute("modelMapStu",stu);
        model.addAttribute("modelStu",stu);
        map.put("mapStu",stu);
        return "main"; //切记请求转发跳
       // return "redirect:/admin/main.jsp";//会丢失数据
    }
}

2.1日期处理

日期类型不能自动注入到方法的参数中。需要单独做转换处理。使用@DateTimeFormat注解,需要在springmvc.xml文件中添加mvc:annotation-driven/标签。

2.1.1在方法的参数上使用@DateTimeFormat注解

@RequestMapping("/submitone")
public String submitdateone(
@DateTimeFormat(pattern="yyyy-MM-dd")
        Date mydate){
    System.out.println(mydate);
    return "dateShow";

但这种解决方案要在每个使用日期类型的地方都去添加使用@DateTimeFormat注解,比较麻烦,我们可以使用@InitBinder注解来进行类中统一日期类型的处理。

@InitBinder注解解决类中日期问题

@InitBinder
public void initBinder(WebDataBinder dataBinder) {
    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
dataBinder.registerCustomEditor(Date.class, new CustomDateEditor(sf, true));
}

这样在类中出现的所有日期都可以进行转换了。

2.1.2日期显示

JSON中的日期显示

需要在类中的成员变量的getXXX方法上加注解。

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
public Date getDate() {
return date;
}

2.1.3JSP页面的日期显示

需要使用国际化标签,先添加依赖

<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

导入国际化的标签库

<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

再使用标签显示日期

<div id="stulistgood">
<c:forEach items="${list}" var="stu">
<p>${stu.name}-------${stu.age}-------<fmt:formatDate value="${stu.date}" pattern="yyyy-MM-dd"></fmt:formatDate></p>
</c:forEach>
</div>

2.2资源在WEB-INF目录下

很多企业会将动态资源放在WEB-INF目录下,这样可以保证资源的安全性。在WEB-INF目录下的动态资源不可以直接访问,必须要通过请求转发的方式进行访问。这样避免了通过地址栏直接对资源的访问。重定向也无法访问动态资源。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CqD7h2vh-1660750183177)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817231513376.png)]

此目录下的动态资源,不可直接访问,只能通过请求转发的方式进行访问

action:

@Controller
public class ShowAction {
    @RequestMapping("/showIndex")
    public String showIndex(){
        System.out.println("index.............");
        return "index";
    }
    @RequestMapping("/showMain")
    public String showMain(){
        System.out.println("main.............");
        return "main";
    }
    @RequestMapping("/showLogin")
    public String showLogin(){
        System.out.println("login.............");
        return "login";
    }
    @RequestMapping("/login")
    public String login(String name, String pwd, HttpServletRequest request){
        if("admin".equals(name) && "123".equals(pwd)){
            return "main";
        }
        request.setAttribute("msg","用户名或密码不正确!");
        return "login";
    }
}

2.3 SpringMVC拦截器

SpringMVC 中的 Interceptor 拦截器,它的主要作用是拦截指定的用户请求,并进行相应的预处理与后处理。其拦截的时间点在“处理器映射器根据用户提交的请求映射出了所要执行的处理器类,并且也找到了要执行该处理器类的处理器适配器,在处理器适配器执行处理器之前”。当然,在处理器映射器映射出所要执行的处理器类时,已经将拦截器与处理器组合为了一个处理器执行链,并返回给了中央调度器。

2.3.1拦截器的应用场景

1、日志记录:记录请求信息的日志

2、权限检查,如登录检查

3、性能检测:检测方法的执行时间

2.3.2拦截器的执行原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JAOrhhoI-1660750183179)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817231954032.png)]

2.3.3拦截器执行的时机

1)preHandle():在请求被处理之前进行操作

2)postHandle():在请求被处理之后,但结果还没有渲染前进行操作,可以改变响应结果

3)afterCompletion:所有的请求响应结束后执行善后工作,清理对象,关闭资源

2.3.4拦截器实现的两种方式

1)继承HandlerInterceptorAdapter的父类

2)实现HandlerInterceptor接口,实现的接口,推荐使用实现接口的方式

2.3.5自定义拦截器实现权限验证

实现一个权限验证拦截器。

  1. 修改web.xml文件中请求路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ohkWZzO-1660750183180)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817232353394.png)]

  1. 将所有的页面放入WEB-INF目录下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZTqNhtx4-1660750183180)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817232427530.png)]

  1. 开发登录action

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rdgK02t7-1660750183180)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817232459185.png)]

  1. 开发拦截器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uuV0Ga6q-1660750183181)(C:\Users\13417\AppData\Roaming\Typora\typora-user-images\image-20220817232533354.png)]

  1. 配置springmvc.xml文件
<!--注册拦截器-->
<mvc:interceptors>
    <mvc:interceptor>
        <!--配置拦截的路径(哪些请求被拦截)-->
        <mvc:mapping path="/**"/>
        <!--设置放行的请求-->
        <mvc:exclude-mapping path="/login"></mvc:exclude-mapping>
        <mvc:exclude-mapping path="/showLogin"></mvc:exclude-mapping>
        <!--设置进行功能处理的拦截器类-->
        <bean class="com.bjpowernode.interceptor.LoginInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值