SpringMVC知识大览
SpringMVC大览
springMVC的基础知识
什么是SpringMVC?
springmvc框架原理(掌握)
前端控制器、‘处理映射器、处理适配器、视图解析器
springmvc的入门程序
目的:对前端控制器、‘处理映射器、处理适配器、视图解析器学习
非注解的处理映射器、处理器适配器
注解的处理器映射器、处理器适配器
springmvc和mybatis整合(掌握)
springmvc的注解开发
常用的注解学习
参数绑定(简单类型、pojo、集合类型)
自定义参数绑定
springmvc和struts2区别
springmvc的高级应用
参数绑定
数据回显
上传图片
json数据交互
RESTful支持
拦截器
SpringMVC框架
什么是springmvc
springmvc是spring 框架的一个模块,SpringMVC和spring无需通过中间整合层进行整合。
Springmvc是基于mvc的web框架
1.2什么是MVC
mvc是一个设计模式
model view controller
1.3springMVC框架
前端控制器:
DispatcherServlet接口用户请求,响应
请求查找Handler ↓↓
处理器映射器:
HandlerMapping
返回一个执行链:HandlerExecutionChain{
handletInterceptor1
handletInterceptor1
Handler
}
Handler处理器
Handler(controller)
第一步:发起请求到前端控制器(dispacherServlet)
第二步:前端控制器请求HandlerMapping查找Handler
可以根据xml配置、注解进行查找
第三步:处理映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView 是springmvc框架的一个底层对象,包括Model和View
第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染
视图渲染讲模型数据填充到request域
第十一步:response响应,前端控制器向用户响应结果
组件
前端控制器
作用:接受请求,响应结果,相当于转发器
处理器映射器
作用:根据请求的url查找Handler
处理器适配器HandlerAdapter
作用按照规则去执行Handler
要按照HandlerAdapter编写Handler
视图解析器 View resolver
作用:进行视图解析,根据逻辑图名解析成真正的视图(view)视图View
View是一个接口,实现类支持不同的View类型
Spring环境搭建
2.1入门程序
基础搭建
https://blog.csdn.net/qq_40709468/article/details/78757783
2.3配置前端控制器
在web.xml中配置前端控制
<!-- spring 前端控制器-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- contextConfiguration配置springmvc的加载文件(配置处理器映射器,适配器等等)
如果不配置的话,默认加载WEB-INF目录下名称-servlet.xml for example:SpringMVC-servlet.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:Springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<!-- 第一种: *.action 访问以.action结尾的由dispatcherServlet解析-->
<!-- 第二种:/. 所有访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需要配置不让DispatcherServlet进行解析
使用此种方式可以实现RestFul风格的URL
第三种:/*,错误!!,在转发后一样会被拦截
-->
<servlet-name>SpringMVC</servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
新建Springxml文件配置处理器映射器、处理器适配器、处理器解析器
- 配置处理器适配器bean: SimpleControllerHandlerAdapter
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
配置处理器映射器
<!--处理器映射器将bean的name作为url查找,需要在配置handler的时候指定beanName(就是URL)-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
编写Handler(Controller类)
public class testController1 implements Controller { public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception { List<blog> blogs= new ArrayList<blog>(); blog blog1=new blog(); blog1.setId(1); blog blog2=new blog(); blog2.setId(2); blogs.add(blog1); blogs.add(blog2); /** * 返回ModelAndView */ ModelAndView modelAndView=new ModelAndView(); /** * 相当于request的setAttribute */ modelAndView.addObject("id", blogs); /** * 指定视图 */ modelAndView.setViewName("/WEB-INF/jsp/test.jsp"); return modelAndView; }}
编写视图解析器
<!-- 处理器解析器 解析jsp视图,默认使用jstl标签classpath下要有jstl包-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
配置handler
将编写的handler在Spring容器中加载,依据前端控制器的配置
<!-- 配置Handler--> <bean id="/ids.do" class="controller.testController1"></bean>
处理器映射器(注解与非注解)
非注解的处理器映射器
处理器映射器:
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
简单URL映射
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/getids1.do">controller的Bean id</prop>
<prop key="/getids2.do">controller的Bean id</prop>
</props>
</property>
</bean>
非注解的适配器
SimpleUrlHandlerMapping
HttpRequestHandlerAdapter
要求编写的Handler实现HTTPRequestHandler接口
注解开发SpringMVC
配置注解映射器和适配器
<!-- 注解映射器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--注解适配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- 使用mvc的注解驱动mvc:annotion-driven可以代替上面两个注解映射器和注解适配器
mvc:annotation-driven默认加载很多参数绑定方法,比如json转换解析器-->
<mvc:annotation-driven></mvc:annotation-driven>
开发注解Handler
import org.springframework.stereotype.Controller;
@Controller
public class testController {
/**
* 一般建议URL和方法名字相同
* @return
* @throws Exception
*/
@RequestMapping("/queryIds")
public ModelAndView queryIds()throws Exception{
List<Userid> userids=new ArrayList<>();
Userid userid1=new Userid();
userid1.setId(1);
Userid userid2=new Userid();
userid2.setId(54);
userids.add(userid1);
userids.add(userid2);
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("idList", userids);
modelAndView.addObject("message", "nice!");
modelAndView.setViewName("index.html");
return modelAndView;
}
}
必须使用注解的映射器和注解的适配器!
RequestMapping 有两个子类PostMapping & GetMapping
加载Handler
<!-- 扫描controller包-->
<context:component-scan base-package="controller"></context:component-scan>
视图解析器
prefix:前缀
suffix:后缀
原理是在返回的文件名上添加前缀和后缀
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/html/"/>
<property name="suffix" value=".html"/>
</bean>
PS:为什么不能访问html文件
https://blog.csdn.net/Henry_Lin_Wind/article/details/81110635
原因:
【/】:它会拦截所有的url,如:/test,/test1.html,/1.jpg……,但是除了以jsp结尾的url不会交给前端控制器。所以导致了不能访问html文件。对于*.jsp,由于servlet容器中内置了jspServlet,所以不会被/
拦截
解决方法
在web.xml中添加,类似的css,jpg,gif,png,都可以使用这个办法解决
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
SpringMVC知识大览的更多相关文章
- kubebuilder实战之三:基础知识速览
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- FPGA知识大梳理(四)FPGA中的复位系统大汇总
本文整合特权(吴厚航)和coyoo(王敏志)两位大神的博文.我也很推崇这两位大神的书籍,特权的书籍要偏基础一下,大家不要一听我这么说就想买coyoo的.我还是那一句话,做技术就要step by ste ...
- MySQL系列(一)--基础知识大总结
MySQL系列(一)---基础知识大总结 前言:本文主要为mysql基础知识的大总结,mysql的基础知识很多,这里只是作为简单的介绍,但是具体的细节还是需要自行搜索.当然本文还有很多遗漏的地方,后续 ...
- 转帖--计算机网络基础知识大总汇 https://www.jianshu.com/p/674fb7ec1e2c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
计算机网络基础知识大总汇 龙猫小爷 关注 2016.09.14 23:01* 字数 12761 阅读 30639评论 35喜欢 720 一.什么是TCP/IP 网络和协议 1. TCP/IP是 ...
- 转:XSS知识大总结
转:https://www.jianshu.com/p/75a3d9332b8c XSS知识大总结 2016.10.28 21:05* 字数 1332 阅读 961评论 2喜欢 13 XSS-即Cro ...
- 《.Net 的冰与火之歌》寄雁传书,你必须知道的C#参数知识大盘点
引言 参数,也叫参变量,是一个变量.在方法签名中随处可见,实现了不同方法间对于数据的寄雁传书,基本上充斥在代码的各个角落里.在方法签名或者原型中,方法名称后的括号包含方法的参数及其类型的完整列表.参数 ...
- FPGA知识大梳理(一)对FPGA行业的一点感言
今天想开始把这FPGA行业的知识点做一个大整理,从个人感想,到语法,到器件基础,难点攻克,到项目应用.把自己这几年接触到的知识做一个全面的回顾,看看自己这几年走过的路. 人生无常,几年的跌跌撞撞勉强算 ...
- SpringMVC 知识整理
SpringMVC架构设计 MVC是一种架构模式,它把业务的实现和展示相分离. SpringMVC与struts2的区别 Struts2是类级别的拦截, 一个类对应一个request上下文,Sprin ...
- 二:SpringMVC知识整理
springmvc复习: 1.SpringMVC介绍 2.SpringMVC入门程序 1)创建web工程 2)导入jar包 3)在web.xml中配置前端控制器(指定上下文件的路径 classpath ...
随机推荐
- Android模拟器不能上网的解决方法
我原来一直不用Android的模拟器,因为这东西的多年前的印象真的是很糟糕——启动半个小时,不支持OpenGL.即使后来有了x86镜像,在HAXM的支持下快的飞起,也不想用,因为NDK还要编译x86的 ...
- Python 获取MySql某个表所有字段名
在使用python导出数据库中数据的时候,往往除了插入的数据以外,还有表字段等信息需要导出,查阅了资料后发现了2种方法 第一种:在mysql自带的表里查询,这个表保存了每张表的字段信息,可以用pymy ...
- var, let ,const区别
ES6中加入了let,const字符,先说说新的区别: 作用域:let 声明的变量只在它所在的代码块内有效,而且不存在变量提升,即变量可以在声明之前使用,值为undefined.let未声明变量前会报 ...
- 浅谈Java中静态代码块和非静态代码块
静态代码块: static{} 执行优先级高于非静态的初始化块,它会在类初始化(类初始化这个问题改天再详细讨论)的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员. 非静 ...
- JVM04——七个GC垃圾收集器,一个都不能少
了解了JVM内存区域与垃圾回收算法,今天将为各位带来关于垃圾收集器的知识.关注我的公众号「Java面典」了解更多 Java 相关知识点. Java 堆内存被划分为新生代和老年代两部分,因此 JVM 通 ...
- 10.xadmin后台使用管理
目录 xadmin后台管理 xadmin后台管理 安装:luffy虚拟环境下 >: pip install https://codeload.github.com/sshwsfc/xadmin/ ...
- asp.net core 3.1 引用的元包dll版本兼容性问题解决方案
自从.netcore 3.1出来后,大家都想立马升级到最新版本.我也是如此,微软也对.netcore 3.1的官方组件不断升级,几乎每隔几天就会有部分元包可以升级.每次打开Nuget包管理器,“更新” ...
- Java并发编程之CAS二源码追根溯源
Java并发编程之CAS二源码追根溯源 在上一篇文章中,我们知道了什么是CAS以及CAS的执行流程,在本篇文章中,我们将跟着源码一步一步的查看CAS最底层实现原理. 本篇是<凯哥(凯哥Java: ...
- 2020年Java基础高频面试题汇总(1.4W字详细解析)
1. Java语言有哪些特点 (1)简单易学.有丰富的类库 (2)面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高) (3)与平台无关性(JVM是Java跨平台使用的根本) (4)可靠安全 ...
- C# 基础知识系列- 3 集合数组
简单的介绍一下集合,通俗来讲就是用来保管多个数据的方案.比如说我们是一个公司的仓库管理,公司有一堆货物需要管理,有同类的,有不同类的,总而言之就是很多.很乱.我们对照集合的概念对仓库进行管理的话,那么 ...