【SpringMVC】框架超详细学习笔记

springMVC最全笔记,一篇就够 springMVC最全笔记内容 阅读详情

 

目录

一、什么是MVC

 二、什么是SpringMVC

 三、SpringMVC特点

 四、初识SpringMVC

        1)创建maven项目

        2)配置web.xml

        3)创建控制器

       4)创建springMVC的配置文件

五、RequestMappg 注解详解

        1)功能

        2)位置

        3)value 属性

        4) method属性

        5)parems属性

        6)headers属性

RequestMapping 注解value属性特点

        springMVC支持ant风格请求路径

        springMVC支持路径的占位符 @PathViable

 六、springMVC获取请求参数

        1、通过ServletAPI 获取请求参数

        2、通过控制器方法的形参获取请求参数

        3、@RequestParam 参数注解

        4、@RequestHeader

        5、@CookieValue

        6、通过POJO获取请求参数

 七、域对象共享数据

1、session作用域的钝化和活化

2、通过servletAPI向request域对象共享数据

3、使用ModeAndView向request域对象共享数据

4、使用Model向request域共享数据

5、使用Map向request域共享数据

6、使用ModelMap向request域共享数据

7,Model ModelMap Map 之间的关系

8、向session域共享数据

9、向application域共享数据

10、Request域 、Session域 和 Application域的区别

八、springMVC视图

1、ThymeleafView

2. 转发视图

3、重定向视图 

 4、View-Controller

 九、RESTFul

1)简介

2)实现

 3)案例

 1)查询所有员工信息

 2) 删除指定员工功能

         3)添加功能

         4) 修改员工信息

5)总结

 十、HttpMessageConverter

1)@RequestBody

2)RequestEntity

3) @ResopneBody 

4) springMVC响应json

5)springMVC处理Ajax(页面不发生跳转,响应浏览器)

6)@RestController

7)ResponseEntity

九、文件下载和上传

1)文件下载

2)文件上传

十、拦截器

                 1、拦截器的配置

        2、拦截器的三个抽象方法、

        3、多个拦截器方法执行流程

十一、异常处理器

        1)基于配置的异常处理器

         2)基于注解的异常处理器

  十二、注解配置springMVC

 十三、SpringMVC的执行流程

        1、springMVC的常用组件

        2、执行流程


一、什么是MVC

 二、什么是SpringMVC

 三、SpringMVC特点

 四、初识SpringMVC

        1)创建maven项目

                        a    添加web模块

                        b    打包方式 : war

                        c    引入依赖

<packaging>war</packaging> <!--设置打包方式 web -> war -->

    <properties>
        <maven.compiler.source>16</maven.compiler.source>
        <maven.compiler.target>16</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!--依赖-->
    <dependencies>
        <!-- SpringMVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.1</version>
        </dependency>
        <!-- 日志 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- ServletAPI -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- Spring5和Thymeleaf整合包 -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.12.RELEASE</version>
        </dependency>
    </dependencies>

        2)配置web.xml

                 默认配置方式

        此配置作用下,SpringMVC的配置文件默认位于WEB-INF下,默认名称为- servlet.xml,例如,以下配置所对应SpringMVC的配置文件位于WEB-INF下,文件名为springMVC-servlet.xm

<!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servletclass>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<!--
设置springMVC的核心控制器所能处理的请求的请求路径
/所匹配的请求可以是/login或.html或.js或.css方式的请求路径
但是/不能匹配.jsp请求路径的请求
-->
<url-pattern>/</url-pattern>
</servlet-mapping>

                扩展配置方式

        可通过init-param标签设置SpringMVC配置文件的位置和名称,通过load-on-startup标签设置 SpringMVC前端控制器DispatcherServlet的初始化时间

!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servletclass>
<!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -->
<init-param>
<!-- contextConfigLocation为固定值 -->
<param-name>contextConfigLocation</param-name>
<!-- 使用classpath:表示从类路径查找配置文件,例如maven工程中的
src/main/resources -->
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<!--
作为框架的核心组件,在启动过程中有大量的初始化操作要做
而这些操作放在第一次请求时才执行会严重影响访问速度
因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<!--
设置springMVC的核心控制器所能处理的请求的请求路径
/所匹配的请求可以是/login或.html或.js或.css方式的请求路径
但是/不能匹配.jsp请求路径的请求
注:
<url-pattern>标签中使用/和/*的区别:
/所匹配的请求可以是/login或.html或.js或.css方式的请求路径,但是/不能匹配.jsp请求路径的请
求
因此就可以避免在访问jsp页面时,该请求被DispatcherServlet处理,从而找不到相应的页面
/*则能够匹配所有请求,例如在使用过滤器时,若需要对所有请求进行过滤,就需要使用/*的写
法
4、创建请求控制器
由于前端控制器对浏览器发送的请求进行了统一的处理,但是具体的请求有不同的处理过程,因此需要
创建处理具体请求的类,即请求控制器
请求控制器中每一个处理请求的方法成为控制器方法
因为SpringMVC的控制器由一个POJO(普通的Java类)担任,因此需要通过@Controller注解将其标识
为一个控制层组件,交给Spring的IoC容器管理,此时SpringMVC才能够识别控制器的存在
5、创建springMVC的配置文件
-->
<url-pattern>/</url-pattern>
</servlet-mapping>

        3)创建控制器

                        由于前端控制器对浏览器发送的请求进行了统一的处理,但是具体的请求有不同的处理过程,因此需要 创建处理具体请求的类,即请求控制器 请求控制器中每一个处理请求的方法成为控制器方法 因为SpringMVC的控制器由一个POJO(普通的Java类)担任,因此需要通过@Controller注解将其标识 为一个控制层组件,交给Spring的IoC容器管理,此时SpringMVC才能够识别控制器的存在

@Controller
public class HelloController {
}

       4)创建springMVC的配置文件

<context:component-scan base-package="com.bofu.mvc.controller"></context:component-scan>
    <!-- 配置Thymeleaf视图解析器 -->
    <bean id="viewResolver"
          class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean
                            class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!-- 视图前缀 -->
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <!-- 视图后缀 -->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

五、RequestMappg 注解详解

        1)功能

                将用户请求与控制器请求方法相关联起来,建立映射关系。SpringMVC接受指定的请求,就会在映射关系中对应的控制器方法处理这个请求。

        2)位置

         3)value 属性

        4) method属性

                1-get

                        提交请求参数拼接请求地址后。 - 查询

                2- post

                        提交请求参数放在请求体中。 - 添加

                3-delete

                        删除

                4- put

                        修改

 

 派生注解的使用

        5)parems属性

概述

                @RequestMapping注解的params属性通过请求的请求参数匹配请求映射

作用

                @RequestMapping注解的params属性是一个字符串类型的数组,可以通过四种表达式设置请求参数 和请求映射的匹配关系、

表达式

        "param":要求请求映射所匹配的请求必须携带param请求参数         

        "!param":要求请求映射所匹配的请求必须不能携带param请求参数

        "param=value":要求请求映射所匹配的请求必须携带param请求参数且param=value "

        param!=value":要求请求映射所匹配的请求必须携带param请求参数但是param!=value

用法

 携带参数的url连接设置

         6)headers属性

 @RequestMapping注解的headers属性通过请求的请求头信息匹配请求映射

@RequestMapping注解的headers属性是一个字符串类型的数组,可以通过四种表达式设置请求头信 息和请求映射的匹配关系

"header":要求请求映射所匹配的请求必须携带header请求头信息

"!header":要求请求映射所匹配的请求必须不能携带header请求头信息

"header=value":要求请求映射所匹配的请求必须携带header请求头信息且header=value "header!=value":要求请求映射所匹配的请求必须携带header请求头信息且header!=value

        若当前请求满足@RequestMapping注解的value和method属性,但是不满足headers属性,此时页面 显示404错误,即资源未找到

RequestMapping 注解value属性特点

        springMVC支持ant风格请求路径

概述

        请求地址模糊匹配

符号

        ?:表示任意的单个字符

        *:表示任意的0个或多个字符,不能匹配 / 和 ?

        **:表示任意的一层或多层目录 注意:在使用**时,只能使用/**/xxx的方式

应用:

        springMVC支持路径的占位符 @PathViable

原始方式:/user/id=1

rest风格:   /user/1

        概述

                SpringMVC路径中的占位符常用于restful风格中,当请求路径中将某些数据通过路径的方式传输到服务器中,就可以在相应的@RequestMapping注解的value属性中通过占位符{xxx}表示传输的数据,在通过@PathVariable注t解,将占位符所表示的数据赋值给控制器方法的形参

        应用

        前端代码

         Controller

输出结果

 六、springMVC获取请求参数

        1、通过ServletAPI 获取请求参数

                request对象表示当前请求

         2、通过控制器方法的形参获取请求参数

                控制器方法的形参的参数名要与请求路径参数参数名相同,若不相同,则为空

         3、@RequestParam 参数注解

概述

                @RequestParam是将请求参数和控制器方法的形参创建映射关系
                @RequestParam注解一共有三个属性:
                       1)value: 指定为形参赋值的请求参数的参数名
                       2) required: 设置是否必须传输此请求参数,默认值为true
                                若设置为true时,则当前请求必须传输value所指定的请求参数,若没有传输该请求参数,且没有设置defaultValue属性,则页面报错400: Required String parameter 'xxx' is not present; 若设置为false,则当前请求不是必须传输Value所指定的请求参数,若没有传输,则注解所标识的形参的值为null
                      3)  defaultValue: 不管required属性值为true或false,当value所指定的请求参数没有传输时,则使用默认值为形参赋值。

应用

        4、@RequestHeader

概述

 应用

         5、@CookieValue

概述

        @CookieValue是将cookie数据和控制器方法的形参创建映射关系

        @CookieValue注解一共有三个属性: value、 required、defaultValue,用法同@RequestParam。

第一次获取session,set-cookie 在响应报文key=JSESSIONID中,往后一值携带在请求头中。

应用

         3、通过POJO获取请求参数

概述

                通过实体类获取请求参数,在控制器方法中写入 拥有请求参数一致的属性的实体类,从而进行赋值

应用

 输出

解决post获取参数乱码问题

web.xml 过滤器配置

 CharacterEncodingFilter源码

 七、域对象共享数据

1、session作用域的钝化和活化

1)Session钝化:

         Session在一段时间内没有被使用时,会将当前存在的Session对象序列化到磁盘上,而         不再占用内存空间。

2)Session活化:

         Session被钝化后,服务器再次调用Session对象时,将Session对象由磁盘中加载到内         存中使用。

         如果希望Session域中的对象也能够随Session钝化过程一起序列化到磁盘上,则对象的    实现类也必须实现java.io.Serializable接口。不仅如此,如果对象中还包含其他对象的引用,则被关联的对象也必须支持序列化,否则会抛出异常:java.io.NotSerializableException。

2、通过servletAPI向request域对象共享数据

应用

 

 

 3、使用ModeAndView向request域对象共享数据

概述

        Model 主要向共享域中共享数据。

        View 主要处理视图转发。

应用

 4、使用Model向request域共享数据

前端代码与上述一致

 

  5、使用Map向request域共享数据

 

 6、使用ModelMap向request域共享数据

 7,Model ModelMap Map 之间的关系

8、向session域共享数据

 9、向application域共享数据

 10、Request域 、Session域 和 Application域的区别

   1. request( 请求作用域 )对象内数据存活范围是当客户端向服务器发送一个请求,服务器向客户端返回一个响应之后,该请求对象就被销毁了。之后再次发送的请求也无法获取之前request对象存放的任何数据。

2. session(会话作用域)对象内数据的存活范围是当前浏览器页面的时间。只要浏览器窗口未关闭,session对象就一直存在。

        3. application(全局作用范围)的存货范围是只要服务器没有关闭,application对象中的数据就一直存在。

八、springMVC视图

        SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户 SpringMVC视图的种类很多,默认有转发视图和重定向视图 当工程引入jstl的依赖,转发视图会自动转换为JstlView 若使用的视图技术为Thymeleaf,在SpringMVC的配置文件中配置了Thymeleaf的视图解析器,由此视 图解析器解析之后所得到的是ThymeleafView。

1、ThymeleafView

        当控制器方法中所设置的视图名称没有任何前缀时,此时的视图名称会被SpringMVC配置文件中所配置 的视图解析器解析,视图名称拼接视图前缀和视图后缀所得到的最终路径,会通过转发的方式实现跳转。

2. 转发视图

        不符合Thymeleaf 前后缀的资源用转发

        SpringMVC中默认的转发视图是InternalResourceView

        SpringMVC中创建转发视图的情况: 当控制器方法中所设置的视图名称以"forward:"为前缀时,创建InternalResourceView视图,此时的视 图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"forward:"去掉,剩余部 分作为最终路径通过转发的方式实现跳转 例如"forward:/","forward:/employee

3、重定向视图 

        SpringMVC中默认的重定向视图是RedirectView

        当控制器方法中所设置的视图名称以"redirect:"为前缀时,创建RedirectView视图,此时的视图名称不 会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"redirect:"去掉,剩

余部分作为最 终路径通过重定向的方式实现跳转 例如"redirect:/","redirect:/employee"

 4、View-Controller

        设置路径和视图之间的映射。不需要任何的请求处理,只需要设置视图名称,即可使用此标签。

 九、RESTFul

1)简介

a>资源
        资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且客户端应用开发者能够理解。与面问对象设计类似,资源是以名词为核心来组织的,首先关注的是名词。一个资源可以由一个或多个UR来标识。URI既是资源的名称,也是资源在Web上的地址。对某个资源感兴趣的客户端应用,可以通过资源的URI与其进行交互。

b>资源的表述
        资源的表述是一段对于资源在某个特定时刻的状态的描述。可以在客户端·服务器端之间转移(交换)。资源的表述可以有多种格式,例如HTML/XML/SON/纯文本/图片/视频/音频等等。资源的表述格式可以通过协商机制来确定。请求-响应方向的表述通常便用不同的格式。

c>状态转移
        状态转移说的是: 在客户端和服务器端之间转移 (transfer)代表资源状态的表述。通过转移和操作资源的表述来间接实现提作资源的目的。

d>注解

        如操作同一个资源,则可使用统一资源路径,来完成对资源的各种操作

2)实现

注解:浏览器不支持 put 和 delete 需要使用过滤器,进而完成。

 3)案例

        1)查询所有员工信息

实体类

public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    //1 male, 0 female
    private Integer gender;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public Integer getGender() {
        return gender;
    }
    public void setGender(Integer gender) {
        this.gender = gender;
    }
    public Employee(Integer id, String lastName, String email, Integer
            gender) {
        super();
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;
    }
    public Employee() {
    }
}

dao层

package com.liubo.study.mvc.dao;

import com.liubo.study.mvc.bean.Employee;
import org.springframework.stereotype.Repository;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * @Author 再进一步
 * @Date 2023/1/31 20:38
 * @DAY_NAME_FULL: 星期二
 */

@Repository
public class EmployeeDao {
    private static Map<Integer, Employee> employees = null;

    static{
        employees = new HashMap<Integer, Employee>();
        employees.put(1001, new Employee(1001, "E-AA", "aa@163.com", 1));
        employees.put(1002, new Employee(1002, "E-BB", "bb@163.com", 1));
        employees.put(1003, new Employee(1003, "E-CC", "cc@163.com", 0));
        employees.put(1004, new Employee(1004, "E-DD", "dd@163.com", 0));
        employees.put(1005, new Employee(1005, "E-EE", "ee@163.com", 1));
    }
    private static Integer initId = 1006;

    public void save(Employee employee){
        if(employee.getId() == null){
            employee.setId(initId++);
        }
        employees.put(employee.getId(), employee);
    }
    public Collection<Employee> getAll(){
        return employees.values();
    }
    public Employee get(Integer id){
        return employees.get(id);
    }
    public void delete(Integer id){
        employees.remove(id);
    }
}

Controller 层

package com.liubo.study.mvc.controller;

import com.liubo.study.mvc.bean.Employee;
import com.liubo.study.mvc.dao.EmployeeDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import java.util.Collection;

/**
 * @Author 再进一步
 * @Date 2023/1/31 20:30
 * @DAY_NAME_FULL: 星期二
 */
@Controller
public class EmployeeController {
    @Autowired
    private EmployeeDao employeeDao;

    @RequestMapping(value = "employee",method = RequestMethod.GET)
    public ModelAndView getEmployeeInfoList() {
        ModelAndView modelAndView = new ModelAndView();
        Collection<Employee> employeeDaoAll = employeeDao.getAll();
        modelAndView.addObject("employeeList",employeeDaoAll);
        modelAndView.setViewName("EmployeeList");
        return modelAndView;
    }
}

连接跳转

<a th:href="@{/employee}">查看员工所有信息</a>

前端页面

<table border="1" cellspacing="0" style="text-align: center;">
    <tr>
        <th colspan="5">EmployeeInfo</th>
    </tr>
    <tr>
        <th>id</th>
        <th>lastName</th>
        <th>email</th>
        <th>gender</th>
        <th>options</th>
    </tr>
    <tr th:each="employee: ${employeeList}">
        <td th:text="${employee.id}"></td>
        <td th:text="${employee.lastName}"></td>
        <td th:text="${employee.email}"></td>
        <td th:text="${employee.gender}"></td>
        <td>
            <a href="">delete</a>
            <a href="">update</a>
        </td>
    </tr>
</table>

        2) 删除指定员工功能

                前端代码

 后端代码

 需要开启静态资源的访问

        3)添加功能

                        1. 在员工页面添加 跳转添加员工页面

                        2. 视图控制器

                         3. 员工增加页面

                        4. 实体对象获取请求参数,实体对象的属性名必须和请求参数一致

        4) 修改员工信息

                1、点击对应的超链接,跳转到该员工的信息表单

                 2. 获取该员工信息,并保存在request域中,跳转到修改页面

                3. 修改员工信息提交到控制器中,后转到员工列表中

5)总结

        前端注册了dispatchServlet覆盖了原来的defaultServlet,故要开启

        1)静态资源交给默认的servlet处理

 十、HttpMessageConverter

HttpMessageConverter,报文信息转换器,将请求报文转换为ava对象,或将Java对象转换为响应报文HttpMessageConverter提供了两个注解和两个类型:

        @RequestBody(将请求数据中的转换Java对象)

        @ResponseBody(将Java数据转换成响应体)

        RequestEntity(类型,请求实体,接受整个请求报文)

        ResponseEntity(类型,响应实体)

1)@RequestBody

概述

        可以获取请求体,需在控制器方法中设置形参,使用@RequestBody注解标识,当前请求的请求体参数会赋值于该形参。

测试

        前端页面

         控制器方法

        输出

 2)RequestEntity

        请求实体类型

实现

 

 

 3) @ResopneBody 

概述

        @ResopneBody 用于标识控制器方法,表示该方法的返回值,会成为响应报文中的响应体,响应给浏览器。

        只能响应文本

        可以把对象转换json格式(数据交互格式)

实现

4) springMVC响应json

json对象 :键值对 {} 包括

json数组:[] 包括

        1、添加依赖

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.1</version>
        </dependency>

        2、开启注解驱动

         3、在控制器方法中,使用@ResponseBody标识,该方法的返回值,会自动解析成json对象响应浏览器。

5)springMVC处理Ajax(页面不发生跳转,响应浏览器)

实现

        1)添加静态资源

        

        2)前端

<div id="box">
    <a @click="sendAxios"th:href="@{/testAJax}">测试ajax请求</a>
</div>
<script type="text/javascript" th:src="@{/static/js/vue.js}"></script>
<script type="text/javascript" th:src="@{/static/js/axios.min.js}"></script>
<script type="text/javascript">
    var vue = new Vue({
        el:"#box",
        methods:{
            sendAxios:function (event) {
                axios({
                    method:"post",
                    url:event.target.href,
                    params:{
                        username:"admin",
                        password:"123"
                    }
                    }
                ).then(function (response){
                    alert(response.data);
                });
                event.preventDefault();
            }
        }
    });
</script>

        3)控制器方法

 6)@RestController

        @RestController注解是springMVC提供的一个复合注解,标识在控制器的类上,就相当于为类添加了@Controller注解,并且为其中的每个方法添加了@ResponseBody注解。

7)ResponseEntity

        ResponseEntity用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文。

九、文件下载和上传

1)文件下载

        点击连接下载对应文件到客户端

实现

控制器方法

 @RequestMapping(value = "/testFileDown")
    public ResponseEntity<byte[]> testFileDown(HttpSession session) throws IOException {
        ServletContext servletContext = session.getServletContext();
        String realPath = servletContext.getRealPath("/static/img/1.jpg");

        // 输入流
        FileInputStream fis = new FileInputStream(realPath);

        //fis.available() 获取 文件所有的字节数
        byte[] content = new byte[fis.available()];

        fis.read(content); // 文件内容读入到字节数组中

        // 创建HttpHeaders对象设置响应头信息
        MultiValueMap<String, String> headers = new HttpHeaders();
        headers.add("Content-Disposition", "attachment;filename=1.jpg");

        HttpStatus statusCode = HttpStatus.OK; // 设置响应状态码

        // 创建ResponseEntity 对象
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(content, headers,statusCode);
        return responseEntity;
    }

2)文件上传

        文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data" SpringMVC中将上传的文件封装到MultipartFile对象中,通过此对象可以获取文件相关信息。

实现

        1、 添加依赖

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>

        2、配置文件解析器

<!--必须通过文件解析器的解析才能将文件转换为MultipartFile对象-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>

         3、前端页面

<form th:action="@{/testUp}" method="post" enctype="multipart/form-data">
    文件上传<input type="file" name="photo" >
    <input type="submit" value="上传" >
</form>

        4、控制器方法

@RequestMapping(value = "/testUp")
    public String testUp(MultipartFile photo, HttpSession session) throws IOException {
        // 上传同名文件 会覆盖
        String fileName = photo.getOriginalFilename();
        //  解决 上传同名文件 -> 随机ID
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        String uuId = UUID.randomUUID().toString();
        fileName = uuId + suffixName;
        // 确定下载目录
        ServletContext servletContext = session.getServletContext();
        String realPath = servletContext.getRealPath("photo"); // 表示 服务器下 photo目录
        File file = new File(realPath);
        if (!file.exists()) { // 判断是否存在
            file.mkdir();
        }

        // File.separator 表示文件分隔符
        String finalPath = realPath + File.separator + fileName;
        photo.transferTo(new File(finalPath));
        return "success";
    }

十、拦截器

        1、拦截器的配置

        SpringMVC中的拦截器用于拦截控制器方法的执行

        SpringMVC中的拦截器需要实现HandlerInterceptor

        SpringMVC的拦截器必须在SpringMVC的配置文件中进行配置:

    <!--配置拦截器-->
    <mvc:interceptors>
<!--        <bean class="com.liubo.study.mvc.interceptors.FirstInterceptor"></bean>-->
<!--        <ref bean="firstInterceptor"></ref>-->

<!-- 以上两种配置方式都是对DispatcherServlet所处理的所有的请求进行拦截 -->
        
        <mvc:interceptor>
            <mvc:mapping path="/**"/> <!--表示拦截所有请求 ant风格路径-->
            <mvc:exclude-mapping path="/"/> <!--不包括 路径-->
            <bean class="com.liubo.study.mvc.interceptors.FirstInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

        2、拦截器的三个抽象方法、

         preHandle:控制器方法执行之前执行preHandle(),其boolean类型的返回值表示是否拦截或放行,返 回true为放行,即调用控制器方法;返回false表示拦截,即不调用控制器方法         

        postHandle:控制器方法执行之后执行postHandle()

       afterComplation:处理完视图和模型数据,渲染视图完毕之后执行afterComplation()。

        3、多个拦截器方法执行流程

        a>若每个拦截器的preHandle()都返回true 此时多个拦截器的执行顺序和拦截器在SpringMVC的配置文件的配置顺序有关:

        preHandle()会按照配置的顺序执行,

        postHandle()afterComplation()会按照配置的反序执行

    b>若某个拦截器的preHandle()返回了false

        preHandle()返回false和它之前的拦截器的preHandle()都会执行,

        postHandle()都不执行,返回false 的拦截器之前的拦截器的afterComplation()会执行

十一、异常处理器

SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口:HandlerExceptionResolver HandlerExceptionResolver接口的实现类有:DefaultHandlerExceptionResolver和 SimpleMappingExceptionResolver SpringMVC提供了自定义的异常处理器SimpleMappingExceptionResolver。

概述

        在业务处理过程中,控制器方法出现异常,会跳转到 一个新的HTML页面。

        1)基于配置的异常处理器

<!--配置拦截器-->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings"> <!--配置对应的异常信息 跳转到指定页面-->
            <props>
                <prop key="java.lang.ArithmeticException">error</prop>
            <!--出现java.lang.ArithmeticException异常,会跳转到error页面-->
            </props>
        </property>
        <!--把异常信息 放入请求域中 value对应的键值-->
        <property name="exceptionAttribute" value="ex"></property>
    </bean>

 

         2)基于注解的异常处理器

@ControllerAdvice // 注解异常处理器
public class AnnotationException {

    // 出现 value 中的异常,会执行该方法
    @ExceptionHandler(value = {ArithmeticException.class, NullPointerException.class})
    public String anEx(Exception ex, Model model) {
        model.addAttribute("ex",ex); // ex 表示当前异常
        return "error";
    }
}

  十二、注解配置springMVC

        在Servlet3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类, 如果找到的话就用它来配置Servlet容器。 Spring提供了这个接口的实现,名为 SpringServletContainerInitializer,这个类反过来又会查找实现WebApplicationInitializer的类并将配 置的任务交给它们来完成。Spring3.2引入了一个便利的WebApplicationInitializer基础实现,名为 AbstractAnnotationConfigDispatcherServletInitializer,当我们的类扩展了 AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候,容器会自 动发现它,并用它来配置Servlet上下文。

实现

        1、 创建webInit 代替 web.xml

public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {

    /**
     * 指定spring的配置类
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }
    
    /**
     * 指定SpringMVC的配置类
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }
    
    /**
     * 指定DispatcherServlet的映射规则,即url-pattern
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    /**
     * 添加过滤器
     * @return
     */
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
        encodingFilter.setEncoding("UTF-8");
        encodingFilter.setForceRequestEncoding(true);
        HiddenHttpMethodFilter hiddenHttpMethodFilter = new
                HiddenHttpMethodFilter();
        return new Filter[]{encodingFilter, hiddenHttpMethodFilter};
    }
}

        2、创建 WebConfigle类 代替 springMVC.xml

/**
 * @Author 再进一步
 * @Date 2023/2/9 15:54
 * @DAY_NAME_FULL: 星期四
 * 代替 SpringMVC 的配置文件
 * 1 注解扫描 2、视图解析器 3、view-controller 4、default -servlet
 * 5、注解驱动 6、上传文件解析器 7、异常处理 8、拦截器
 *
 */
@Configuration
@ComponentScan("com.liubo.mvc")
@EnableWebMvc // MVC 注解驱动
public class WebConfig implements WebMvcConfigurer {

    // 开启 静态资源管理 default-servlet
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    // 配置view-controller
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
    }

    // 配置文件上传解析器
    @Bean
    public CommonsMultipartResolver getCommonsMultipartResolver() {
        return new CommonsMultipartResolver();
    }

    // 配置异常处理
    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
        SimpleMappingExceptionResolver simpleMappingExceptionResolver = new SimpleMappingExceptionResolver();
        Properties prop = new Properties();
        // 设置异常,和对应的跳转的页面
        prop.setProperty("java.lang.ArithmeticException","error");
        simpleMappingExceptionResolver.setExceptionMappings(prop);

        //  在请求域中,把当前错误信息设置到请求域中,key = exception
        simpleMappingExceptionResolver.setExceptionAttribute("exception");

        resolvers.add(simpleMappingExceptionResolver);
    }

    // 配置拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**");
    }

    //配置生成模板解析器
    @Bean
    public ITemplateResolver templateResolver() {
        WebApplicationContext webApplicationContext =
                ContextLoader.getCurrentWebApplicationContext();
// ServletContextTemplateResolver需要一个ServletContext作为构造参数,可通过
        //WebApplicationContext 的方法获得
        ServletContextTemplateResolver templateResolver = new
                ServletContextTemplateResolver(
                webApplicationContext.getServletContext());
        templateResolver.setPrefix("/WEB-INF/templates/");
        templateResolver.setSuffix(".html");
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setTemplateMode(TemplateMode.HTML);
        return templateResolver;
    }
    //生成模板引擎并为模板引擎注入模板解析器
    @Bean
    public SpringTemplateEngine templateEngine(ITemplateResolver
                                                       templateResolver) {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);
        return templateEngine;
    }
    //生成视图解析器并未解析器注入模板引擎
    @Bean
    public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setCharacterEncoding("UTF-8");
        viewResolver.setTemplateEngine(templateEngine);
        return viewResolver;
    }
}

        3、创建springConfig类 代表spring 的配置文件

 十三、SpringMVC的执行流程

        1、springMVC的常用组件

                1)DispatchServlet :前端控制器,不需要开发,统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求。

                2)HandlerMapping:处理器映射器,不需要工程师开发,由框架提供,根据请求的url、method等信息查找Handler,即控制器方法。

                3)Handler:处理器,需要工程师开发 作用:在DispatcherServlet的控制下Handler对具体的用户请求进行处理。

                4)HandlerAdapter:处理器适配器,不需要工程师开发,由框架提供 作用:通过HandlerAdapter对处理器(控制器方法)进行执行。

                5)ViewResolver:视图解析器,不需要工程师开发,由框架提供 作用:进行视图解析,得到相应的视图,例如:ThymeleafView、InternalResourceView、 RedirectView。

                6)View:视图 作用:将模型数据通过页面展示给用户 2、DispatcherServlet初始。

        2、执行流程

                1) 用户向服务器发送请求,请求被SpringMVC 前端控制器 DispatcherServlet捕获。

                2) DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI),判断请求URI对应的映射:

                 a) 不存在 

                再判断是否配置了mvc:default-servlet-handler

                 ii. 如果没配置,则控制台报映射查找不到,客户端展示DispatchServlet 404错误。

                iii. 如果有配置,则访问目标资源(一般为静态资源,如:JS,CSS,HTML),找不到客户端也会展示404 错误。

                b) 存在则执行下面的流程(handler -》Controller)

                3) 根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及 Handler对象对应的拦截器),最后以HandlerExecutionChain执行链对象的形式返回。

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

                5) 如果成功获得HandlerAdapter,此时将开始执行拦截器的preHandler(…)方法【正向】。

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

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

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

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

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

                7)  Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象。

                8) 此时将开始执行拦截器的postHandle(...)方法【逆向】。

                9) 根据返回的ModelAndView(此时会判断是否存在异常:如果存在异常,则执行 HandlerExceptionResolver进行异常处理)选择一个适合的ViewResolver进行视图解析,根据Model 和View,来渲染视图。

                10) 渲染视图完毕执行拦截器的afterCompletion(…)方法【逆向】。

                11) 将渲染结果返回给客户端。

SpringMVC框架学习笔记整理-动力节点王鹤(无必详细) 继续整理了Springmvc的学习笔记,动力节点王鹤老师讲的springmvc,分享给大家。 看了这么多网上的视频,还是只有王鹤老师讲的能听明白…就喜欢讲的细的,而且老师条理很清晰 视频资源:https://www.bilibili.com/video/BV1sk4y167pD 第一章 SpringMVC 概述 1.1 SpringMVC 基本说明 SpringMVC是基于spring的, 是spring中的一个模块,做web开发使用的。 springmvc 叫做spring web mvc 说明他是spr 阅读详情

相关推荐

JavaEE框架学习笔记——SpringMVC篇

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)最新整理电子书《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!最新整理电子书[外链图片转存中…(img-AOISp3IX-1714673441642)]《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》

2401_84092574的博客 904

SpringMVC基础知识学习笔记

在SpringMVC的学习中,我们首先要明确其核心内容是稳定的,而其他内容则需要在探索中逐渐掌握。对于那些不熟悉Spring的底层知识,你无需过于担心,可以先学会如何使用它,然后在你单独学习Spring的基础知识时再去深入理解其背后的原理。同样,如果你对Servlet的知识感到困惑,可能会让你对请求和响应的处理感到迷茫。此时,你不应停滞不前,去深入研究Servlet的知识,可以先学会如何使用SpringMVC,然后再去深入了解Servlet的相关知识。我们在学习的过程中切忌偏离主题,不要因为关注一些细枝

qq_36722262的博客 1500

基于扩展卡尔曼滤波(EKF)结合到达时间(TDOA)、到达频率(FDOA)实现多无人机无源定位,MATLAB代码

该程序实现了一种结合到达时间差(TDOA)和到达频率差(FDOA)技术的多无人机定位方法,利用扩展卡尔曼滤波(EKF)对单一目标进行定位。程序通过模拟多无人机的运动及其与目标的相对位置,估计目标的状态(位置和速度)。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 1266

SpringMVC学习笔记

学习笔记

2301_80073794的博客 1777

GEO优化实战:用AnswerBit量化AI搜索可见度与品牌监控体系

生成式引擎优化(GEO)正取代传统SEO,成为品牌在AI搜索生态中获取可见度的关键。当用户习惯从“翻列表”转向“直接问AI”,品牌能否被生成式引擎识别、引用并正向推荐,直接决定了其在用户决策链条中的存在感。AI搜索可见度因此从模糊概念演变为可度量的运营指标,涵盖提及率、引文率、情感分与回源质量等维度。腾讯AnswerBit作为答案侧分析工具,帮助运营者拆解AI回复中的品牌语境与引用来源,让优化动作有据可循。从内容结构化改造、品牌实体建设到第三方权威背书,GEO要求团队建立“度量-优化-再度量”的闭环。文章结

weixin_31100517的博客 150

Unity3D Lua与C#的相互调用与性能剖析详解

在游戏开发中,经常会遇到Lua与C#之间的相互调用的情况。本文将详细介绍Unity3D中Lua与C#的相互调用的方式,并对其性能进行剖析。对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!一、Lua与C#的相互调用方式Lua调用C#在Unity3D中,可以通过Lua调用C#的方式来实现Lua与C#的相互调用。具体步骤如下:(1)首先需要在Unity3D项目中导入Lua的相关库,例如tolua或者xlua。

weixin_49669470的博客 1211

SpringMVC-2-Controller和RestFul风格

SpringMVC:Controller控制器、RestFul风格、重定向与转发、请求参数与数据回显、乱码处理

baidu_38126306的博客 597

MAIXCAM无线连接实战:5分钟搞定远程调试与代码烧录(避坑版)

本文提供了一份详细的MAIXCAM无线连接实战指南,帮助嵌入式视觉开发者快速配置远程调试与代码烧录。文章重点介绍了通过MaixHub IDE进行Wi-Fi配置、建立远程终端连接、使用SFTP进行文件传输以及管理自启动应用程序的完整流程,并针对IP地址变动、信号中断等常见问题提供了实用的避坑解决方案,旨在提升开发效率与灵活性。

weixin_29188043的博客 297

SpringMVC笔记

SpringMVC笔记

weixin_62633072的博客 1870

基于 YOLOv26 的 PCB 板缺陷检测:工业级视觉实战

本文提出了一种基于YOLOv26的PCB板缺陷检测系统,通过深度学习技术实现对PCB板缺陷的自动化检测。系统能够识别短路、开路、焊点不良等8种常见缺陷,具有高精度、多类别分类和实时推理等优势。文章详细介绍了系统架构,包括数据采集、预处理、YOLOv26模型检测和后处理模块。在代码实现部分,给出了环境配置、数据预处理与增强的具体方法,使用Albumentations库进行图像增强处理。该系统为电子制造业提供了高效、准确的PCB质量检测解决方案,显著提升了检测效率和准确性。

一键难忘的博客 337

选型不再靠感觉:一文看懂 SAP Event Mesh 与 SAP Integration Suite, advanced event mesh 的能力边界

本文对比分析了SAP Event Mesh与SAP Integration Suite, advanced event mesh的差异。SAP Event Mesh适合轻量级场景,主要用于SAP系统间异步通信,支持AMQP、MQTT等协议,消息大小限制为1MB。而advanced event mesh面向企业级事件网络,提供跨云/本地部署、事件治理、监控等高级功能,支持30MB消息和更大存储容量。选择时需考虑业务规模、实时性要求、治理需求等因素:单一SAP生态内扩展可选Event Mesh;跨区域、多云环境

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 133

Java框架之SpringMVC学习笔记

1.SpringMVC的基本概念 学习黑马传智播客视频所记录的笔记 1.1 三层架构和MVC 三层架构指的是 web层,业务层,持久化层。 MVC只是把web层又细分了三层: model(模型):JavaBean View(视图):JSP Controller(控制层):Servlet 1.2 SpringMVC是什么 引用百度 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 M

ledrsnet的博客 1887

【即插即用模块】注意力篇 | MICCAI 2023 | MFE:多尺度特征提取,告别固定感受野,猛涨2个点!

本文提出一种用于低分辨率乳腺癌病理图像超分辨率与分类的网络SHISRCNet。针对现有方法处理低分辨率图像效果差、感受野固定等问题,设计了多特征提取模块(MFE),通过多速率空洞卷积覆盖全尺度感受野(局部到全局),结合递进残差连接和动态权重融合机制,实现自适应多尺度特征增强。实验表明,该模块在超分辨率任务中PSNR提升近2个点,分类准确率显著提高。代码提供详细注释,支持即插即用,适用于各类多尺度视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 206

SpringMVC框架学习笔记01

目录01. 三层结构和MVC1.1. 三层架构1.2. MVC模型02. SpringMVC2.1. SpringMVC的优势?(了解)03. SpringMVC的入门3.1. 入门案例3.2. 执行步骤3.3. 组件介绍3.3.1. DispatcherServlet:前端控制器3.3.2. HandlerMapping:处理器映射器3.3.3. HandlAdapter:处理器适配器3.3.4. Handler或者称为Controller:处理器3.3.5. View Resolver:视图解析器3.3

474

TMS320F28335调试跟踪的问题:DSP从上电复位,一直到执行main()的第一条语句之间,都干了些什么,以及CCS调试时程序查找的问题

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1210

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SpringMVC框架学习笔记

SpringMVCSpringMVC 的基本概念三层架构MVC模型SpringMVC 是什么SpringMVC 的优势RequestMapping 注解请求参数的绑定请求参数的绑定说明请求绑定入门基本数据类型和字符串类型实体类型(JavaBean)配置解决中文乱码的过滤器集合数据类型(List、map集合等) SpringMVC 的基本概念 三层架构   我们的开发架构一般都是基于两种形式,一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就是浏览器服务器。在 JavaEE 开发中,几

qq_44647911的博客 225

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java框架学习笔记——SpringMVC

Spring MVC(全称 Spring Web MVC)是 Spring 框架提供的一款基于 MVC 模式的轻量级 Web 开发框架,是 Spring 为表示层(UI)开发提供的一整套完备的解决方案。

小熊的学习记录 2219

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SSM框架学习笔记8—SpringMVC背景

SSM框架学习笔记8—SpringMVC背景

北街末雨Yyg 1034

SpringMVC框架学习笔记(一)

简单了解 M 模型 javabean中的一个对象 V 视图 C 控制器 接收请求并进行处理,使用javabean将接收到的数据进行封装。 入门程序 需求:便写jsp的页面,使用超链接,点击链接,发送请求,SpringMVC框架处理请求,转发到成功页面 一、搭建开发环境 1、创建项目。 然后不停地next即可。如果要解决加载过慢的问题,可以在如下页面添加键值对: 创建成功后,将文件结构补充完整。在main下面新建一个名为java的目录,按照如下图所示进行设置。 2、导入开发的jar包(坐标依赖)。

畅春园 179

SpringMVC框架学习笔记02

目录01,响应数据和结果视图1.1,返回值分类1.1.1,返回字符串1.1.2, 返回void1.1.3,返回ModelAndView1.2,使用关键字进行转发和重定向(不经过视图解析器)(了解即可)1.2.1 ,forward 转发1.2.2, Redirect 重定向02,SpringMVC实现文件上传2.1,文件上传回顾2.1.1, 文件上传的必要前提2.1.2, 文件上传的原理分析2.1.3 借助第三方组件实现文件上传2.1.4 传统方式实现文件上传2.2,springmvc实现文件上传2.2.1

289

【SpringMVC学习笔记】整合SSM框架

文章目录整合SSM框架一. 搭建整合环境1.整合的思路2.创建数据库和表结构3.创建maven的工程4.pom.xml引入坐标依赖5. 编写实体类6. 编写dao接口7. 编写service接口和实现类二、Spring框架代码的编写1. applicationContext.xml配置文件2. 编写测试方法SpringTest三、SpringMVC框架编写1. 配置DispatcherServlet前端控制器2. 配置DispatcherServlet过滤器解决中文乱码3. 创建springmvc.xml的

Stay Hungry, Stay Foolish! 646

SSM-SpringMVC框架学习笔记

SpringMVC框架 第一章 SpringMVC 概述 1.1 SpringMVC 基本说明 SpringMVC是基于spring的, 是spring中的一个模块,做web开发使用的。 springmvc 叫做spring web mvc 说明他是spring的核心技术, 做web开发,springmvc内部是使用mvc架构模式。 SpringMVC 是一个容器, 管理对象的,使用IoC核心技术。 springmvc管理界面层中的控制器对象。 SpringMVC底层也是Servlet。 以Servlet为

qq_45603808的博客 434
上一篇: Spring5 框架学习笔记
下一篇: Java8 新特性
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值