SpringMVC知识点汇总

MVC模式

MVC模式做了哪些事情呢?总结了下,主要有以下几点:

①将URL映射到java类(Struts2框架)或者java方法(SpringMvc框架)上
②封装用户提交的数据
③处理请求–调用相关的业务逻辑处理–封装响应的数据
④将响应的数据进行渲染

SpringMVC简介

SpringMVC是一个轻量级的,基于请求响应的MVC框架。主要的优点如下:

①springMVC分工非常明确,可以说是基于AOP实现的,每一个功能的实现由一个专门的对象负责完成,其中包括控制器、验证器、命令对象、模型对象、处理程序映射、视图解析器等等。

②springMVC支持国际化。

③支持多种视图技术,如jsp。

④提供一个简单而强大的JSP标签库,支出数据绑定功能。

⑤提供内置校验器,可以校验用户输入,如果校验不正确,则重定向输入表单。

下面我们来和Struts2来做一个简单的对比,让你更清晰的了解springMvc。

①Struts2是基于类设计的,每发一次请求都会创建一个Action实例,每个Action都会被注入属性,而SpringMVC是基于方法设计的,粒度更细,一个方法对应一个request上下文,而方法同时又跟一个url对应,从架构本身上springmvc非常容易实现Restful风格,而Struts2实现起来就比较麻烦,因为虽然一个Action的方法可以对应一个URL,但是类的属性却被共享,这也就无法用注解或其他方式表示属性所属的方法。

②从数据校验上来说,springMvc支持JSR3.0,处理Ajax请求更是方便,只需要一个注解@RequestBody,然后知己返回响应文本请求即可,而Struts2就比较麻烦。

③从配置上来说,Struts2大多采用传统的配置文件,而springMVC除了配置Springmvc-servlet.xml之外,几乎没有其他配置了,所以在开发效率上来说高于struts2。

④从项目管理上来说,SpringMVC和Spring无缝结合,这个是struts2不能它相提并论的。
初学者,看到这可能有点不是很能理解这些对比以及优势,可在后续看完springmvc教程之后再回头来看。

SpringMVC工作流程(原理)


①客户端发送请求到DispatcherServlet

②DispatcherServlet收到请求,调用HandlerMapping处理器映射器

③处理器映射器找到具体的处理器(可以根据XML配置,注解进行查找,生成处理器对象以及处理器拦截器(如果有)一并返回给DispatcherServlet)

④DispatcherServlet再调用HandlerAdapter处理器适配器

⑤HandlerAdapter经过适配器调用具体的处理器Controller,也叫后端控制器。

⑥Controller执行完成返回MondelAndView。

⑦HandlerAdapter将Controler执行结果ModelAndView返回给DispatcherServlet。

⑧Dispatcherservlet将ModelAndView传给ViewReslover视图解析器。

⑨ViewReslover解析后返回具体的View。

⑩DischerServlet根据View进行渲染视图。

⑪最后响应给用户。

Controller配置总结

一、最古老的配置方式(通过URL对应Bean)

1.配置web.xml

<!--定义SpringMVC的前端控制器DispatcherServlet-->
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><!-- SpringMVC的前端控制器 --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>WEB-INF/springmvc-config.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!-- 拦截设置 --><servlet-mapping><servlet-name>springmvc</servlet-name><!-- 由SpringMVC拦截所有请求 --><url-pattern>/</url-pattern></servlet-mapping></web-app>

2.配置springmvc-config.xml

<!--springmvc-config.xml-->
<beans xmlns="http://www.springframework.org/schema/beans"  xmlns:context="http://www.springframework.org/schema/context"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  xsi:schemaLocation="    http://www.springframework.org/schema/mvc   http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    http://www.springframework.org/schema/context     http://www.springframework.org/schema/context/spring-context-3.0.xsd">  <!-- 配置handlerMapping--><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean><!-- 配置handlerAdapter--><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean><!-- 配置渲染器--><bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property><property name="prefix" value="/WEB-INF/jsp/"></property><property name="suffix" value=".jsp"></property></bean><!-- 配置请求和处理器--><bean name="/hello.do" class="com.controller.HelloController"></bean>
</beans>

3.编写controller类

package com.controller
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class HelloController implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {ModelAndView modelAndView =new ModelAndView();modelAndView.addObject("hello","hello");modelAndView.setViewName("helloView");return modelAndView;}
}

二、基于注解的配置(目前最常用)

1.编写web.xml同上

2.配置springmvc-config.xml

<!--springmvc-config.xml-->
<beans xmlns="http://www.springframework.org/schema/beans"  xmlns:context="http://www.springframework.org/schema/context"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  xsi:schemaLocation="    http://www.springframework.org/schema/mvc   http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    http://www.springframework.org/schema/context     http://www.springframework.org/schema/context/spring-context-3.0.xsd">  <!-- 把标记了@Controller注解的类转换为bean -->  <context:component-scan base-package="com.controller" />  <!-- 启动Spring MVC的注解功能,配置annotation类型的处理器映射器-->  <bean class="org.springframework.web.servlet.mvc.annotation.RequestMappingHandlerMapping" /> <!-- 启动Spring MVC的注解功能,配置annotation类型的处理器适配器-->  <bean class="org.springframework.web.servlet.mvc.annotation.RequestMappingHandlerAdapter" />  <!-- 配置视图解析器 -->  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>

3.编写controller类

package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;@Controller
public class HelloController {@RequestMapping("/hello")public ModelAndView hello(){ModelAndView modelAndView =new ModelAndView();modelAndView.addObject("hello","hello");modelAndView.setViewName("helloView");return modelAndView;}
}

最后

我这边整理了一份:Spring全家桶系列,Java的系统化资料,(包括Java核心知识点、面试专题和20年最新的互联网真题、电子书等)有需要的朋友可以 点击这里获取资料。

通俗易懂的SpringMVC,新手一看就懂!相关推荐

  1. 苹果手机如何投屏到电视机?新手一看就懂教程

    朋友小d在用一部苹果手机,但他觉得屏幕太小了,在这里看视频不太方便,所以他想着要不要换一部屏幕大点的手机.因为预算的问题,他在纠结入手哪一部,我就问他: "其实手机屏幕的大小都差不多,不会有 ...

  2. python小说爬虫实训报告_python之新手一看就懂的小说爬虫

    晚上回来学学爬虫,记住,很多网站一般新手是爬不出来的,来个简单的,往下看: import urllib.request from bs4 import BeautifulSoup #我用的pychar ...

  3. 新手一看就懂的线程池

    那相信大家也能感受到,其实用多线程是很麻烦的,包括线程的创建.销毁和调度等等,而且我们平时工作时好像也并没有这样来 new 一个线程,其实是因为很多框架的底层都用到了线程池. 线程池是帮助我们管理线程 ...

  4. 为什么线程池里的方法会执行两次_新手一看就懂的线程池

    作者:码农田小齐 来源:https://www.cnblogs.com/nycsde/p/14003888.html 那相信大家也能感受到,其实用多线程是很麻烦的,包括线程的创建.销毁和调度等等,而且 ...

  5. 数据挖掘的10大算法我用大白话讲清楚了,新手一看就懂

    一个优秀的数据分析师,除了要掌握基本的统计学.数据库.数据分析方法.思维.数据分析工具技能之外,还需要掌握一些数据挖掘的思想,帮助我们挖掘出有价值的数据,这也是数据分析专家和一般数据分析师的差距之一. ...

  6. 新手一看就懂的Spring Bean生命周期

    Bean的作用域 在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean.简单地讲,bean就是由IoC容器初始化.装配及管理的对象 几种作用域中,requ ...

  7. ref与out一看就懂

    讲解一下ref与out的小知识,形象总结的例子让您运用起来的心应手,新手一看就懂,共同进步. class Program { static void Main(string[] args) { //两 ...

  8. 算法精解 c语言描述 豆瓣,斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂!...

    原标题:斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂! "算法会扩展并提高大家的编程技巧,而学习基本的算法设计范式,可以和许多不同领域的不同问题密切相关,还能作为预测算法 ...

  9. (新手版)GitHub 使用思想,上传,首次上传及日常使用教程(肯定看得懂)

    此这篇面向还不熟悉Git的新手同学 1:关于下载配置等问题 2:GitHub使用思想 3:首次上传的准备工作 4:上传 1:关于下载配置等问题 若Github还未成功安装和配置 可以移步至 (新手版) ...

最新文章

  1. linux下命令行打开文件管理器
  2. 4.弹性网络( Elastic Net)
  3. 8 分钟了解 Kubernetes
  4. python含金量最高的考试_中国最难的五大考试,第二个含金量最高,考过年薪30万起!...
  5. sqlite 数据类型 全面
  6. http 直接显示目录下文件_Linux文件管理(下)
  7. Spring Boot+JPA 查询数据方式与代码演示
  8. 值得收藏——在线小视频解析下载教程合集
  9. 信捷XC系列PLC编程软件安装方法
  10. 服务器系统打不上网卡驱动,服务器网卡驱动程序不能正确加载
  11. node+redis+阿里云短信验证码,注册手机验证码完整功能代码
  12. FineReport 创建报表模板
  13. 卡通头像生成器Avataaars generator
  14. 万字长文总结Android多进程,大厂直通车!
  15. 计算机基础长文档的排版,“WORD长文档排版技术
  16. 【0034】 PostgreSQL报错信息:The server must be started by the user that owns the data directory.
  17. CentOS7 安装cellranger-4.0.0
  18. ElasticSearch 从零到入门
  19. IEEE802.11规定了多种WLAN通信标准,其中(61)与其他标准采用的频段不同,因而不能兼容。【答案】A
  20. Word文档在线翻译使用的软件

热门文章

  1. 关于对电容充放电时间的详细讲解
  2. Python学习笔记(6):JSON的编码和解码
  3. php工程师做的tp架构,PHP开发晋升课程 BAT资深工程师解析Tp5+Tp6底层源码
  4. Android异常之#8002 java.lang.IllegalArgumentException
  5. 学习Linux命令(44)
  6. MBR60200PT-ASEMI肖特基二极管常见型号MBR60200PT
  7. 就读在职研究生选一月还是五月好呢?
  8. 2022-2-1 牛客C++项目 —— 线程终止cancel
  9. 笔记本电脑开机密码忘记解决方法
  10. 设计制作计算机组装评论,计算机组装与维护课程设计_new解析.doc