SpringMVC框架笔记,全网最详细!!!(13)

文章目录

  • 第一章、SpringMVC概述
    • 1.1 SpringMVC简介
    • 1.2 SpringMVC的优点
    • 1.3 第一个基于注解方式的SpringMVC程序
      • 1.3.1 创建一个web maven工程
      • 1.3.2 加入依赖
      • 1.3.3 在web.xml中注册DispatcherServlet (Servlet对象)
      • 1.3.4 创建一个发起请求的页面
      • 1.3.5 创建一个控制器(处理器)类
      • 1.3.6 创建结果展示页面
      • 1.3.7 配置视图解析器
    • 1.4 SpringMVC执行流程(理解)
    • 1.5 SpringMVC的MVC组件
  • 第二章、SpringMVC注解式开发
    • 2.1 @RequestMapping定义请求规则
      • 2.1.1 指定模块名称
      • 2.1.2 对请求提交方式的定义
    • 2.2 处理器方法的参数
      • 2.2.1 逐个接收参数
      • 2.2.2 请求参数中文乱码问题
      • 2.2.3 校正请求参数名@RequestParam
      • 2.2.4 对象接收参数(主要用)
    • 2.3 处理器方法的返回值
      • 2.3.1 返回ModelAndView,表示数据和视图
      • 2.3.2返回String,表示视图
      • 2.3.3 返回void,什么都不表示(了解)
      • 2.3.4.1 返回对象Object
      • 2.3.4.2 返回List< Object >
      • 2.3.4.3 返回String
    • 2.4 解读< url-pattern />
      • 2.4.1 使用< mvc:default-servlet-handler />解决
      • 2.4.2 使用< mvc:resources />解决(掌握)
    • 2.5 绝对路径和相对路径
      • 2.5.1 访问地址不加”/”的问题
      • 2.5.2 解决办法
  • 第三章、SSM整合注解开发
    • 3.1 搭建SSM开发环境
      • 3.1.1 新建Student表
      • 3.1.2 加入maven依赖
      • 3.1.3 定义包,创建结构
      • 3.1.4 编写配置文件
        • 3.1.4.1 Jdbc属性配置文件jdbc.properties
        • 3.1.4.2 Spring配置文件applicationContext.xml
        • 3.1.4.3 springMvc的配置文件dispatcherServlet.xml
        • 3.1.4.4 mybatis的配置文件mybatis.xml
      • 3.1.5 编写web.xml
        • 3.1.5.1 注册spring的监听器
        • 3.1.5.2 注册字符集过滤器
        • 3.1.5.3 注册springmvc的中央调度器
    • 3.2 SSM整合注解开发
      • 3.2.1 完成注册学生功能
        • 3.2.1.1 实体类Student
        • 3.2.1.2 Dao接口和sql映射文件
        • 3.2.1.3 Service接口和实现类
        • 3.2.1.4 controller处理器定义
        • 3.2.1.5 前端页面处理
        • 3.2.1.6 注册功能流程
      • 3.2.2 完成查询学生功能
        • 3.2.2.1 在StudentController中添加一个queryStudent方法
        • 3.2.2.2 前端页面处理
  • 第四章、SpringMVC核心技术
    • 4.1 请求重定向和转发
      • 4.1.1 请求转发forward
      • 4.1.2 请求重定向redirect
    • 4.2 异常处理
      • 4.2.1 自定义异常类
      • 4.2.2 修改Controller抛出异常
      • 4.2.3 定义全局异常处理类
      • 4.2.4 定义Spring配置文件
      • 4.2.5 定义异常响应页面
    • 4.3 拦截器
      • 4.3.1 一个拦截器的执行
        • 4.3.1.1 自定义拦截器
        • 4.3.1.2 在springmvc.xml中声明拦截器
        • 4.3.1.3 拦截器和处理器的执行顺序
      • 4.3.2 多个拦截器的执行
        • 4.3.2.1 两个拦截器preHandle都是true的情况
          • 4.3.2.1.1 新增加一个MyInterceptor
          • 4.3.2.1.2 在springmvc.xml中再声明一个拦截器
          • 4.3.2.1.3 多个拦截器执行顺序
        • 4.3.2.2 两个拦截器preHandle第一个为true第二个false的情况
        • 4.3.2.3 两个拦截器preHandle第一个为false第二个true/false的情况
      • 4.3.3 过滤器和拦截器的区别
      • 4.3.4 例子:登录验证拦截器实现

第一章、SpringMVC概述

SpringMVC框架笔记,全网最详细!!!(13)_第1张图片

1.1 SpringMVC简介

SpringMVC框架笔记,全网最详细!!!(13)_第2张图片

1.2 SpringMVC的优点

SpringMVC框架笔记,全网最详细!!!(13)_第3张图片

1.3 第一个基于注解方式的SpringMVC程序

SpringMVC框架笔记,全网最详细!!!(13)_第4张图片

1.3.1 创建一个web maven工程

在这里插入图片描述

1.3.2 加入依赖

SpringMVC框架笔记,全网最详细!!!(13)_第5张图片

1.3.3 在web.xml中注册DispatcherServlet (Servlet对象)

由于maven创建的web.xml版本太低,我们先手动换个4.0的版本
在这里插入图片描述
在web.xml中
SpringMVC框架笔记,全网最详细!!!(13)_第6张图片

1.3.4 创建一个发起请求的页面

访问some.do这个servlet
SpringMVC框架笔记,全网最详细!!!(13)_第7张图片

1.3.5 创建一个控制器(处理器)类

就是index.html访问的some.do,来处理前端的数据,控制器类可以有多个,就相当于是一个servlet类
SpringMVC框架笔记,全网最详细!!!(13)_第8张图片
SpringMVC框架笔记,全网最详细!!!(13)_第9张图片
SpringMVC框架笔记,全网最详细!!!(13)_第10张图片

1.3.6 创建结果展示页面

数据没有返回,没用jsp
SpringMVC框架笔记,全网最详细!!!(13)_第11张图片

1.3.7 配置视图解析器

我们的show.html是在webapp包下的,这个包下是用户能直接访问的,用户可以直接通过浏览器访问到show.html,这就造成了安全隐患,所以我们要把show.xml放到WEB-INF包下,这个包不能直接访问,是对用户不可见的
这里面还有一个other.html后面用来讲解视图解析器
SpringMVC框架笔记,全网最详细!!!(13)_第12张图片
更改Mycontrol中doSome方法,返回视图的路径
SpringMVC框架笔记,全网最详细!!!(13)_第13张图片
此时我们发现,两个页面的路径有重复的地方,只有名字不一样但是前缀和后缀都一样,此时就可以配置一个视图解析器,来帮我们写前缀和后缀
SpringMVC框架笔记,全网最详细!!!(13)_第14张图片
SpringMVC框架笔记,全网最详细!!!(13)_第15张图片

1.4 SpringMVC执行流程(理解)

SpringMVC框架笔记,全网最详细!!!(13)_第16张图片
SpringMVC框架笔记,全网最详细!!!(13)_第17张图片
SpringMVC框架笔记,全网最详细!!!(13)_第18张图片
SpringMVC框架笔记,全网最详细!!!(13)_第19张图片
SpringMVC框架笔记,全网最详细!!!(13)_第20张图片
SpringMVC框架笔记,全网最详细!!!(13)_第21张图片

1.5 SpringMVC的MVC组件

SpringMVC框架笔记,全网最详细!!!(13)_第22张图片

第二章、SpringMVC注解式开发

在这里插入图片描述

2.1 @RequestMapping定义请求规则

2.1.1 指定模块名称

在上面程序的基础上修改

1.修改Index.html
SpringMVC框架笔记,全网最详细!!!(13)_第23张图片
2.修改处理器类MyController
SpringMVC框架笔记,全网最详细!!!(13)_第24张图片

2.1.2 对请求提交方式的定义

SpringMVC框架笔记,全网最详细!!!(13)_第25张图片

2.2 处理器方法的参数

SpringMVC框架笔记,全网最详细!!!(13)_第26张图片
处理器方法可以包含以下四类参数,这些参数会在系统调用时由系统自动赋值,即程序员可在方法内直接使用
SpringMVC框架笔记,全网最详细!!!(13)_第27张图片
SpringMVC框架笔记,全网最详细!!!(13)_第28张图片

2.2.1 逐个接收参数

请求的参数少的时候可以用逐个接收参数
在这里插入图片描述
在第一个程序的基础上修改

1.修改 Index.html提交参数
SpringMVC框架笔记,全网最详细!!!(13)_第29张图片
2. 修改处理器类MyControlle
SpringMVC框架笔记,全网最详细!!!(13)_第30张图片

2.2.2 请求参数中文乱码问题

SpringMVC框架笔记,全网最详细!!!(13)_第31张图片
在web.xml中添加过滤器,注意要把这个放到最前面,
SpringMVC框架笔记,全网最详细!!!(13)_第32张图片
CharacterEncodingFilter的源码分析
SpringMVC框架笔记,全网最详细!!!(13)_第33张图片

2.2.3 校正请求参数名@RequestParam

SpringMVC框架笔记,全网最详细!!!(13)_第34张图片
1.修改index.html页面
将表单中的参数名称修改为和MyController中doSome()的参数不同
SpringMVC框架笔记,全网最详细!!!(13)_第35张图片
参数名和属性名不一致
在这里插入图片描述
2.修改处理器MyController中
SpringMVC框架笔记,全网最详细!!!(13)_第36张图片

2.2.4 对象接收参数(主要用)

将处理器方法的参数定义为一个对象,只要保证请求参数名与这个对象的属性同名即可

在上一个程序的基础上修改

1.index.html
SpringMVC框架笔记,全网最详细!!!(13)_第37张图片
2.定义一个Student类
SpringMVC框架笔记,全网最详细!!!(13)_第38张图片
3.修改MyController
SpringMVC框架笔记,全网最详细!!!(13)_第39张图片

2.3 处理器方法的返回值

SpringMVC框架笔记,全网最详细!!!(13)_第40张图片
SpringMVC框架笔记,全网最详细!!!(13)_第41张图片

2.3.1 返回ModelAndView,表示数据和视图

SpringMVC框架笔记,全网最详细!!!(13)_第42张图片

2.3.2返回String,表示视图

处理器方法返回的字符串可以指定逻辑视图名,也可以是完整的视图路径

1.修改index.html
SpringMVC框架笔记,全网最详细!!!(13)_第43张图片
2.必须要有视图解析器,才能用用逻辑名称
SpringMVC框架笔记,全网最详细!!!(13)_第44张图片
3.修改MyController
SpringMVC框架笔记,全网最详细!!!(13)_第45张图片

2.3.3 返回void,什么都不表示(了解)

不是处理Ajax的方式,他还有很多问题,我们用的返回对象Object
在这里插入图片描述
对于处理器方法返回void的应用场景,AJAX响应.若处理器对请求处理后,无需跳转到其它任何资源,此时可以让处理器方法返回void。

例如,对于AJAX的异步请求的响应
1.maven加入jackson依赖
SpringMVC框架笔记,全网最详细!!!(13)_第46张图片
2. 引入jQuery库
SpringMVC框架笔记,全网最详细!!!(13)_第47张图片
3.index.html发送ajax请求
SpringMVC框架笔记,全网最详细!!!(13)_第48张图片
4.修改MyController
SpringMVC框架笔记,全网最详细!!!(13)_第49张图片
5.前端返回数据
SpringMVC框架笔记,全网最详细!!!(13)_第50张图片

2.3.4.1 返回对象Object

处理Ajax,主要用返回对象,而且比void返回值写的还少,void中需要我们写的,在object中框架帮我们写了
实现步骤
SpringMVC框架笔记,全网最详细!!!(13)_第51张图片
SpringMVC框架笔记,全网最详细!!!(13)_第52张图片
1.加入Jackson依赖
SpringMVC框架笔记,全网最详细!!!(13)_第53张图片
2.声明注册驱动
SpringMVC框架笔记,全网最详细!!!(13)_第54张图片
SpringMVC框架笔记,全网最详细!!!(13)_第55张图片
SpringMVC框架笔记,全网最详细!!!(13)_第56张图片
3.在MyController中
SpringMVC框架笔记,全网最详细!!!(13)_第57张图片

2.3.4.2 返回List< Object >

用于多个对象的处理
和Object是一样的

1.MyController中
SpringMVC框架笔记,全网最详细!!!(13)_第58张图片
2.index.html中
SpringMVC框架笔记,全网最详细!!!(13)_第59张图片

2.3.4.3 返回String

1.Mycontroller中
SpringMVC框架笔记,全网最详细!!!(13)_第60张图片
2.index.html
SpringMVC框架笔记,全网最详细!!!(13)_第61张图片
SpringMVC框架笔记,全网最详细!!!(13)_第62张图片

2.4 解读< url-pattern />

问题:在web.xml中,声明中央调度器的时候,使用”/”存在的问题:无法处理静态文件
因为:当使用”/”的时候静态文件也归中央调度器处理了,我们之前的*.do指的是只是.do结尾的交给中央调度器处理,静态文件还是归tomcat处理,因为tomcat中有一个default
SpringMVC框架笔记,全网最详细!!!(13)_第63张图片
index.html
SpringMVC框架笔记,全网最详细!!!(13)_第64张图片
找不到静态文件
SpringMVC框架笔记,全网最详细!!!(13)_第65张图片

2.4.1 使用< mvc:default-servlet-handler />解决

在springmvc中
SpringMVC框架笔记,全网最详细!!!(13)_第66张图片

2.4.2 使用< mvc:resources />解决(掌握)

Spring定义了专门用于处理静态资源访问请求的处理器ResourceHttpRequestHandler。

在springmvc中

SpringMVC框架笔记,全网最详细!!!(13)_第67张图片

2.5 绝对路径和相对路径

SpringMVC框架笔记,全网最详细!!!(13)_第68张图片
SpringMVC框架笔记,全网最详细!!!(13)_第69张图片

2.5.1 访问地址不加”/”的问题

前端访问user/some.do
SpringMVC框架笔记,全网最详细!!!(13)_第70张图片
User/some.do中,跳转到index.html
SpringMVC框架笔记,全网最详细!!!(13)_第71张图片
第一次访问index.html时,基于的地址是http://localhost:8080/myWeb/
SpringMVC框架笔记,全网最详细!!!(13)_第72张图片
在上述页面中,点击”访问/user/some.do”,就会报错,因为第二次点击基于的地址是
http://localhost:8080/myWeb/user/
SpringMVC框架笔记,全网最详细!!!(13)_第73张图片

2.5.2 解决办法

在index.html中加入base标签
SpringMVC框架笔记,全网最详细!!!(13)_第74张图片
SpringMVC框架笔记,全网最详细!!!(13)_第75张图片

第三章、SSM整合注解开发

SpringMVC框架笔记,全网最详细!!!(13)_第76张图片
SpringMVC框架笔记,全网最详细!!!(13)_第77张图片

3.1 搭建SSM开发环境

3.1.1 新建Student表

SpringMVC框架笔记,全网最详细!!!(13)_第78张图片

3.1.2 加入maven依赖

<dependencies>
  <dependency>
    <groupId>junitgroupId>
    <artifactId>junitartifactId>
    <version>4.11version>
    <scope>testscope>
  dependency>
  
  <dependency>
    <groupId>javax.servletgroupId>
    <artifactId>javax.servlet-apiartifactId>
    <version>3.1.0version>
    <scope>providedscope>
  dependency>
  
  <dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-webmvcartifactId>
    <version>5.2.5.RELEASEversion>
  dependency>
  
  <dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-txartifactId>
    <version>5.2.5.RELEASEversion>
  dependency>
  <dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-jdbcartifactId>
    <version>5.2.5.RELEASEversion>
  dependency>
  
  <dependency>
    <groupId>com.fasterxml.jackson.coregroupId>
    <artifactId>jackson-coreartifactId>
    <version>2.9.0version>
  dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.coregroupId>
    <artifactId>jackson-databindartifactId>
    <version>2.9.0version>
  dependency>
  
  <dependency>
    <groupId>org.mybatisgroupId>
    <artifactId>mybatis-springartifactId>
    <version>1.3.1version>
  dependency>
  
  <dependency>
    <groupId>org.mybatisgroupId>
    <artifactId>mybatisartifactId>
    <version>3.5.1version>
  dependency>
  
  <dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
    <version>5.1.9version>
  dependency>
  
  <dependency>
    <groupId>com.alibabagroupId>
    <artifactId>druidartifactId>
    <version>1.1.12version>
  dependency>
dependencies>

<build>
  <resources>
    <resource>
      <directory>src/main/javadirectory>
      <includes>
        <include>**/*.propertiesinclude>
        <include>**/*.xmlinclude>
      includes>
      <filtering>falsefiltering>
    resource>
  resources>
build>

3.1.3 定义包,创建结构

SpringMVC框架笔记,全网最详细!!!(13)_第79张图片

3.1.4 编写配置文件

3.1.4.1 Jdbc属性配置文件jdbc.properties

SpringMVC框架笔记,全网最详细!!!(13)_第80张图片

3.1.4.2 Spring配置文件applicationContext.xml

SpringMVC框架笔记,全网最详细!!!(13)_第81张图片

3.1.4.3 springMvc的配置文件dispatcherServlet.xml

SpringMVC框架笔记,全网最详细!!!(13)_第82张图片

3.1.4.4 mybatis的配置文件mybatis.xml

SpringMVC框架笔记,全网最详细!!!(13)_第83张图片

3.1.5 编写web.xml

3.1.5.1 注册spring的监听器

注册ServletContext监听器的实现类ContextLoaderListener,用于创建Spring容器及将创建好的Spring容器对象放入到ServletContext的作用域中。
SpringMVC框架笔记,全网最详细!!!(13)_第84张图片

3.1.5.2 注册字符集过滤器

用于解决请求参数中携带中文时产生乱码问题。
SpringMVC框架笔记,全网最详细!!!(13)_第85张图片

3.1.5.3 注册springmvc的中央调度器

配置中央调度器时需要注意,SpringMVC的配置文件名与其它Spring配置文件名不相同。这样做的目的是Spring容器创建管理Spring配置文件中的bean,SpringMVC容器中负责视图层bean的初始。
SpringMVC框架笔记,全网最详细!!!(13)_第86张图片

3.2 SSM整合注解开发

3.2.1 完成注册学生功能

3.2.1.1 实体类Student

SpringMVC框架笔记,全网最详细!!!(13)_第87张图片

3.2.1.2 Dao接口和sql映射文件

Dao接口
SpringMVC框架笔记,全网最详细!!!(13)_第88张图片
SQL映射文件
SpringMVC框架笔记,全网最详细!!!(13)_第89张图片

3.2.1.3 Service接口和实现类

Service接口
SpringMVC框架笔记,全网最详细!!!(13)_第90张图片
实现类
SpringMVC框架笔记,全网最详细!!!(13)_第91张图片

3.2.1.4 controller处理器定义

SpringMVC框架笔记,全网最详细!!!(13)_第92张图片

3.2.1.5 前端页面处理

SpringMVC框架笔记,全网最详细!!!(13)_第93张图片
SpringMVC框架笔记,全网最详细!!!(13)_第94张图片
AddStudent.html 注册功能
SpringMVC框架笔记,全网最详细!!!(13)_第95张图片
SpringMVC框架笔记,全网最详细!!!(13)_第96张图片

3.2.1.6 注册功能流程

用户点击index.html中的注册学生—》跳转到addStudent.html,添加学生信息—》studentController中的addStudent方法接收到信息—》调用service,把信息传给service层的addStudent()—》service层调用dao层,把信息传给dao层方法—》dao获取数据往上传

3.2.2 完成查询学生功能

在上述功能的基础上

3.2.2.1 在StudentController中添加一个queryStudent方法

SpringMVC框架笔记,全网最详细!!!(13)_第97张图片

3.2.2.2 前端页面处理

Index.html
SpringMVC框架笔记,全网最详细!!!(13)_第98张图片
SpringMVC框架笔记,全网最详细!!!(13)_第99张图片
listStudent.html,发送ajax请求
SpringMVC框架笔记,全网最详细!!!(13)_第100张图片
SpringMVC框架笔记,全网最详细!!!(13)_第101张图片

第四章、SpringMVC核心技术

4.1 请求重定向和转发

SpringMVC框架笔记,全网最详细!!!(13)_第102张图片
SpringMVC框架笔记,全网最详细!!!(13)_第103张图片

4.1.1 请求转发forward

SpringMVC框架笔记,全网最详细!!!(13)_第104张图片

4.1.2 请求重定向redirect

SpringMVC框架笔记,全网最详细!!!(13)_第105张图片

4.2 异常处理

SpringMVC框架笔记,全网最详细!!!(13)_第106张图片
SpringMVC框架笔记,全网最详细!!!(13)_第107张图片
当Controller中的处理器抛出异常的时候,框架就会去全局异常处理类中,找指定异常的处理方式,这个全局异常类的功能和controller的处理器一样,都能传数据和页面

4.2.1 自定义异常类

定义三个异常类:NameException、AgeException、MyUserException。其中MyUserException是另外两个异常的父类。

MyUserException
SpringMVC框架笔记,全网最详细!!!(13)_第108张图片
AgeException
SpringMVC框架笔记,全网最详细!!!(13)_第109张图片
NameException
SpringMVC框架笔记,全网最详细!!!(13)_第110张图片

4.2.2 修改Controller抛出异常

SpringMVC框架笔记,全网最详细!!!(13)_第111张图片

4.2.3 定义全局异常处理类

SpringMVC框架笔记,全网最详细!!!(13)_第112张图片

4.2.4 定义Spring配置文件

SpringMVC框架笔记,全网最详细!!!(13)_第113张图片

4.2.5 定义异常响应页面

NameException、AgeException defaultException三个异常的响应页面
SpringMVC框架笔记,全网最详细!!!(13)_第114张图片

4.3 拦截器

SpringMVC框架笔记,全网最详细!!!(13)_第115张图片
SpringMVC框架笔记,全网最详细!!!(13)_第116张图片
SpringMVC框架笔记,全网最详细!!!(13)_第117张图片

4.3.1 一个拦截器的执行

SpringMVC框架笔记,全网最详细!!!(13)_第118张图片

4.3.1.1 自定义拦截器

SpringMVC框架笔记,全网最详细!!!(13)_第119张图片
preHandle方法一般都只用这个方法
SpringMVC框架笔记,全网最详细!!!(13)_第120张图片
postHandle方法
SpringMVC框架笔记,全网最详细!!!(13)_第121张图片
afterCompletion方法
SpringMVC框架笔记,全网最详细!!!(13)_第122张图片

4.3.1.2 在springmvc.xml中声明拦截器

SpringMVC框架笔记,全网最详细!!!(13)_第123张图片

4.3.1.3 拦截器和处理器的执行顺序

SpringMVC框架笔记,全网最详细!!!(13)_第124张图片
MyController
SpringMVC框架笔记,全网最详细!!!(13)_第125张图片
控制台执行顺序
SpringMVC框架笔记,全网最详细!!!(13)_第126张图片

4.3.2 多个拦截器的执行

多个拦截器可以处理不同的验证
SpringMVC框架笔记,全网最详细!!!(13)_第127张图片

4.3.2.1 两个拦截器preHandle都是true的情况

4.3.2.1.1 新增加一个MyInterceptor

MyInterceptor1
SpringMVC框架笔记,全网最详细!!!(13)_第128张图片
MyInterceptor2
SpringMVC框架笔记,全网最详细!!!(13)_第129张图片

4.3.2.1.2 在springmvc.xml中再声明一个拦截器

SpringMVC框架笔记,全网最详细!!!(13)_第130张图片

4.3.2.1.3 多个拦截器执行顺序

SpringMVC框架笔记,全网最详细!!!(13)_第131张图片
SpringMVC框架笔记,全网最详细!!!(13)_第132张图片

4.3.2.2 两个拦截器preHandle第一个为true第二个false的情况

SpringMVC框架笔记,全网最详细!!!(13)_第133张图片

4.3.2.3 两个拦截器preHandle第一个为false第二个true/false的情况

在这里插入图片描述

4.3.3 过滤器和拦截器的区别

SpringMVC框架笔记,全网最详细!!!(13)_第134张图片

4.3.4 例子:登录验证拦截器实现

1.前端发送请求,用户名和密码
SpringMVC框架笔记,全网最详细!!!(13)_第135张图片
2.拦截器拦截,验证用户名
SpringMVC框架笔记,全网最详细!!!(13)_第136张图片
3.验证通过就让处理器处理
SpringMVC框架笔记,全网最详细!!!(13)_第137张图片
验证失败就给个失败页面
SpringMVC框架笔记,全网最详细!!!(13)_第138张图片

你可能感兴趣的:(SSM框架)