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响应,前端控制器向用户响应结果

组件

  1. 前端控制器

    作用:接受请求,响应结果,相当于转发器

  2. 处理器映射器

    作用:根据请求的url查找Handler

  3. 处理器适配器HandlerAdapter

    作用按照规则去执行Handler

    要按照HandlerAdapter编写Handler

  4. 视图解析器 View resolver

    作用:进行视图解析,根据逻辑图名解析成真正的视图(view)

  5. 视图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文件配置处理器映射器、处理器适配器、处理器解析器

  1. 配置处理器适配器bean: SimpleControllerHandlerAdapter
  <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
  1. 配置处理器映射器

    <!--处理器映射器将bean的name作为url查找,需要在配置handler的时候指定beanName(就是URL)-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
  2. 编写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;    }}
  1. 编写视图解析器

    <!--    处理器解析器    解析jsp视图,默认使用jstl标签classpath下要有jstl包-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
  2. 配置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>

非注解的适配器

  1. SimpleUrlHandlerMapping

  2. 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知识大览的更多相关文章

  1. kubebuilder实战之三:基础知识速览

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. FPGA知识大梳理(四)FPGA中的复位系统大汇总

    本文整合特权(吴厚航)和coyoo(王敏志)两位大神的博文.我也很推崇这两位大神的书籍,特权的书籍要偏基础一下,大家不要一听我这么说就想买coyoo的.我还是那一句话,做技术就要step by ste ...

  3. MySQL系列(一)--基础知识大总结

    MySQL系列(一)---基础知识大总结 前言:本文主要为mysql基础知识的大总结,mysql的基础知识很多,这里只是作为简单的介绍,但是具体的细节还是需要自行搜索.当然本文还有很多遗漏的地方,后续 ...

  4. 转帖--计算机网络基础知识大总汇 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是 ...

  5. 转:XSS知识大总结

    转:https://www.jianshu.com/p/75a3d9332b8c XSS知识大总结 2016.10.28 21:05* 字数 1332 阅读 961评论 2喜欢 13 XSS-即Cro ...

  6. 《.Net 的冰与火之歌》寄雁传书,你必须知道的C#参数知识大盘点

    引言 参数,也叫参变量,是一个变量.在方法签名中随处可见,实现了不同方法间对于数据的寄雁传书,基本上充斥在代码的各个角落里.在方法签名或者原型中,方法名称后的括号包含方法的参数及其类型的完整列表.参数 ...

  7. FPGA知识大梳理(一)对FPGA行业的一点感言

    今天想开始把这FPGA行业的知识点做一个大整理,从个人感想,到语法,到器件基础,难点攻克,到项目应用.把自己这几年接触到的知识做一个全面的回顾,看看自己这几年走过的路. 人生无常,几年的跌跌撞撞勉强算 ...

  8. SpringMVC 知识整理

    SpringMVC架构设计 MVC是一种架构模式,它把业务的实现和展示相分离. SpringMVC与struts2的区别 Struts2是类级别的拦截, 一个类对应一个request上下文,Sprin ...

  9. 二:SpringMVC知识整理

    springmvc复习: 1.SpringMVC介绍 2.SpringMVC入门程序 1)创建web工程 2)导入jar包 3)在web.xml中配置前端控制器(指定上下文件的路径 classpath ...

随机推荐

  1. C# 存储相同键多个值的Dictionary

    涉及到两个问题: 一.访问磁盘中文件夹.文件夹下面的文件夹 先看一下磁盘文件夹结构 C盘下面有个根文件夹SaveFile,SaveFIle下面有两个子文件夹分别为,2018.2019, 子文件下201 ...

  2. 从解决Cocos2dx-2.x arm64 Crash 来看C的奇技淫巧

    最近把以前做的老游戏拿出来,重新编到手机上来玩玩,然后就有了以下的经历. 那时的引擎还是Cocos2dx-2.x,iPhone5还是高档机型.现在的机器是这样的,iPhone6S Plus我自用,今年 ...

  3. 第八次——非确定的自动机NFA确定化为DFA

    NFA 确定化为 DFA 子集法: f(q,a)={q1,q2,…,qn},状态集的子集 将{q1,q2,…,qn}看做一个状态A,去记录NFA读入输入符号之后可能达到的所有状态的集合. 步骤: 1. ...

  4. Python3基础语法和数据类型

    Python3基础语法 编码 默认情况下,Python3源文件以UTF-8编码,所有字符串都是unicode字符串.当然你也可以为原码文件制定不同的编码: # -*- coding: 编码 -*- 标 ...

  5. python opencv Sobel、Laplace、canny算子的边缘提取 以及参数解析

    前提:各种算子不完全区分好坏,但根据我实际操作分析得到,有的算子之间效果大相径庭,但有的也很相似,也就是各有各的用法,这里按 Sobel.Laplace.canny三种算子作比较,看其结果: 一.  ...

  6. vquery 一些应用

    // JavaScript Document function myAddEvent(obj,sEv,fn){ if(obj.attachEvent){ obj.attachEvent('on'+sE ...

  7. 【python】定时锁屏,保护身体

    前言 最近越来越懒,一上班坐到电脑前就不愿意动,不喝水也不起来走动,一下班离开电脑就头晕眼花.想起前两年被肾结石支配的恐惧o(╥﹏╥)o,,,还是写个小工具强制自己喝水防止复发吧.VS Code启动 ...

  8. Vulnhub靶场 DC-2 WP

    DC-2简介 描述 与DC-1一样,DC-2是另一个专门构建的易受攻击的实验室,目的是获得渗透测试领域的经验. 与原始DC-1一样,它在设计时就考虑了初学者. 必须具备Linux技能并熟悉Linux命 ...

  9. 《JavaScript 模式》读书笔记(3)— 字面量和构造函数1

    新的篇章开始了,本章开始,所有的内容都是十分有价值和意义的.本章主要的内容包括对象字面量.构造函数.数组字面量.正则字面量.基本值类型字面量以及JSON等.在大家的工作和实际应用中也有一定的指导意义. ...

  10. Natas18 Writeup(Session登录,暴力破解)

    Natas18: 一个登录界面,查看源码,发现没有连接数据库,使用Session登录,且$maxid设定了不大的上限,选择采取爆破. 源码解析: <html> <head> & ...