欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

程序员文章站 2022-06-02 15:25:24
...

SpringMVC的学习心得:

MVC模型

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写其中模型是指数据模型,用dao层获取数据,或是通过后端代码计算出来的数据,它代表的是整个数据类的东西。

视图呢是指前端页面。

控制器就是指控制数据注入到页面的一种类.

SpringMVC和Struts2的优略分析

共同点:

​ 都是通过MVC写的

​ 底层都离不开ServletAPI

​ 它们处理请求的机制都是一个核心控制器。

不同点:

​ 1、Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter

​ 2、Spring MVC 是基于方法设计的,而Struts2是基于类,Struts2每次执行都会创建一个Action类。所以Spring MVC的性能 会稍微比 Struts2 快些。

​ 3、Spring MVC 使用更加简洁

  • ## SpringMVC的基本运行原理:

前提:它有以下几大组件:前端控制器、处理器映射器、处理器适配器、视图解析器、handler处理器等。

首先呢用户发送request请求到前端控制器,前端控制器会将请求发送大处理器映射器来获得执行链这执行链就是方法,这些方法又会到处理器适配器进行分类分发送handler处理器进行处理获得ModleAndView,ModleAndView又被前端控制器送到视图解析器里面进行解析,获取一个view,然后前端控制器会通过ModleAndView对view进行渲染形成一个页面。

SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

SpringMVC注解:

  1. RequestMapping(value=“请求的路径” method=“指定的请求方法默认:post” params=“指定限制参数条件的条件(要求请求的key和value必须和配置上面的一摸一样)” headers=“用于指定限制消息头的条件” )当括号内的条件都达到的时候该方法才会被处理器适配器加到执行链上去。

    SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

请求参数的绑定:

再方法后面写上参数,前端控制器会通过request里面的参数自动填充(就是这么牛)SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

支持参数绑定的数据类型:

  1. 基本数据类型

  2. POJO类型参数:包括实体类以及关联的实体类如图:SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

  3. SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

  4. SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

  5. SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

  6. @RequestBody获取请求体内容

  7. @Respondbody:方法被改注解注释那么方法的返回值不会被视图解析器解析而是转成json数据直接传回页面。

  8. @PathVariable获取用于绑定占位符

  9. @HiddentHttpMethodFilter用于更改请求方式

  10. @RequestHeader获取请求消息头

  11. @CookieValue把指定的Cookie传入到请求参数进去

  12. @ModelAttribute主要是使一个方法提前于指定方法执行,比如一个数据模型有三个参数,而前端只传俩那么剩下的那个参数要用原来的值保存,这时就可以用该注解提前获得一个数据模型,并返回给前端控制器然后前端控制器自动封装的时候就用那个模型来封装,剩下一个没参数的位置就可以用到了原来的数据。如图:SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

  13. @SessionAttribute用于多次执行控制器方法间的参数共享:可以用来数据共享,我可以在方法的参数中设立一个Modle然后可以通过Modle设置一个Map数据对。然后把map放到SessionAttribute中去,之后通过modelmap在SessionAttribute中获取到数据如下图:SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

SpringMVC的方法响应:

Control的返回值是String情况:

@Controller
@RequestMapping("/user")
public class UserController {
        @RequestMapping("/testString")
        public String testString(Model model){
        System.out.println("执行了!");
        return  "success";
}

返回的值会被视图解析器解析加上前缀和后缀然后映射到指定的文件

<!--配置视图解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--前缀-->
    <property name="prefix" value="/WEB-INF/pages/"></property>
    <!--后缀-->
    <property name="suffix" value=".jsp"></property>
</bean>

@Controller
@RequestMapping("/user")
public class UserController {
        @RequestMapping("/testString")
        public String testString(Model model){
        System.out.println("执行了!");
        User user = new User();
        user.setAge(15);
        user.setPassword("123");
        user.setUsername("琪琪");
        model.addAttribute("user", user);
        return  "success";
}

需要把从数据库中查询出的数据打到页面上去就需要用model属性,把数据装到共享域里面去

Control的当返回值为Void的情况:

一、通过request来进行数据转发:

request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);

二、通过response来进行数据重定向

response.sendRedirect("testRetrunString")

三、new一个modelAndView对象

mv.addObject("username", "张三");//key值为username  Value值为:张三

可以通过上面的方法来向request对象中放入共享资源,页面可以直接通过获取Request对象并通过key值来获取资源

mv.setViewName("success");

用于向视图解析器发送数据来指定要跳转的页面

使用关键字来进行请求转发和重定向:

SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

对资源的放行:

由于SpringMVC把资源和请求进行拦截处理,有时候一些js、css、image等文件会被拦截到所以需要以下配置进行放行

<!--因为全部前端资源都被拦截所以配置放行资源       location:需要放行的资源地址-->
<mvc:resources mapping="/js/**" location="/js/"></mvc:resources>
<mvc:resources mapping="css/**" location="css/"></mvc:resources>
<mvc:resources mapping="/image/**" location="/image/"></mvc:resources>

后台响应json数据:

后台对json数据的响应很简单只需要获取请求体内容,框架会自动把json数据打包好这里就不多讲诉

文件上传:

传统方法需要自己对request请求进行解析或处理而SpringMVC中有一组件叫:配置文件解析器它会对request进行自动解析,我们只需要在方法名后面加上Multipartfile就可以方便的进行文件操作配置文案

SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

SpringMVC中的异常处理(404页面)

一般的异常处理,java的各个组件中要是有一个地方出现bug,都是一直往上抛(开始甩锅)直到SpringMVC中有一背锅侠出现(异常处理器)对这个异常进行处理(变成了漂亮的异常)。然后。。。。。上抛(还是甩锅)。

首先要先定义一个异常类方便后面对异常进行处理

SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

异常处理器的常规方法如上图

最后在SpringMVC配置文件中加上异常处理器的位置即可如下图:

SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

再贴上获取异常的前端代码
SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

拦截器:

拦截器和servlet的过滤器有一些相似地方比如对资源的拦截,但是过滤器比拦截器强大因为过滤器是servlet的,可以用在任何的javaweb的场景而拦截器是SpringMVC的只能用在该框架下面,拦截器拦截的是controller方法对js、css等前端资源漠不关心。而过滤器就不挑,什么都可以给他拦截。

​ 首先我们创建拦截器的时候,使用HandlerInterceptor接口并不会出现需要你改写的方法(比较自律,自己都搞定了),这是你需要按ctrl+O把需要的方法调出,再选择出要用到拦截器,进行自己的改写(perhandle:再所有方法执行前进行拦截、posthandle:对指定的端口进行拦截、afterhandle:再controller方法执行完后进行拦截)SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

最后再SpringMVC的xml配置上拦截器如下图:

SpringMVC的学习心得(实用的点都总结好啦( ̄︶ ̄)↗ )

有了这个可以对用户进行拦截,防止用户进行跨权限查看资源。(❁´◡`❁)✲゚

配置文件的配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
    <!--开启注解扫描-->
    <context:component-scan base-package="com.controler"></context:component-scan>
    <!--配置视图解析器-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--自定义类型转换器-->
    <bean id="conversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.util.StringToDateconverter"></bean>
            </set>
        </property>
    </bean>

    <!--注解驱动-->
    <mvc:annotation-driven conversion-service="conversionServiceFactoryBean"/>
</beans>

maven的pom.xml配置

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.0.2.RELEASE</spring.version>
        </properties>

<dependencies>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>${spring.version}</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>${spring.version}</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>${spring.version}</version>
</dependency>

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.0</version>
  <scope>provided</scope>
</dependency>

</dependencies>

░░░░░░░░░░░▄▄
░░░░░░░░░░░█░█
░░░░░░░░░░░█░█
░░░░░░░░░░█░░█
░░░░░░░░░█░░░█
███████▄▄█░░░██████▄
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█████░░░░░░░░█
██████▀░░░▀▀██████▀

░░░░░░░░░░░▄▄
░░░░░░░░░░░█░█
░░░░░░░░░░░█░█
░░░░░░░░░░█░░█
░░░░░░░░░█░░░█
███████▄▄█░░░██████▄
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█████░░░░░░░░█
██████▀░░░▀▀██████▀░░░░░░░░░░░▄▄
░░░░░░░░░░░█░█
░░░░░░░░░░░█░█
░░░░░░░░░░█░░█
░░░░░░░░░█░░░█
███████▄▄█░░░██████▄
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█░░░░░░░░░░░░█
▓▓▓▓▓▓█████░░░░░░░░█
██████▀░░░▀▀██████▀