1.SpringMVC是什么?

SpringMVC是Spring提供给Web应用的框架设计。

在我的理解中,他其实就是一个封装好的Servlet,通过看他配置。

//web.xml中<servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>

通过在web,xml的配置中可以看出,SpringMVC是一个由SpringMVC封装好的servlet,所有的请求都映射到了这个servlet中(不过这种配置不唯一,可以自行配置映射关系)。

2.SpringMVC执行流程

既然我们要用人家的轮子,那我们就得按照人家的规矩办事。

看看人家设定的流程:

用户发起请求,把请求全部分给Springmvc中的DispatcherServlet,然后 DispatcherServlet把用户请求地址转给iHandlerMapper也就是第二步,那么我们从哪里去找这个HandlerMapper呢?

这时候我们需要告诉SpringMVC他在哪?除了这个Handler以后我们还要告诉SpringMVC用到的其他组件在哪?

这时候SpringMVC提供了他自己的配置(xml)方式,那首先需要告诉SpringMVC你的这个xml配置文件在哪?所以我们在初始化的时候需要告诉他:

        <servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param></servlet>

通过在初始化的时候指定配置文件的路径,让SpringMVC成功找到他的配置文件。

然后要在SpringMVC中配置你需要用到的组件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsd"><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" /><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/></beans>

这样在初始化SpringMVC的时候就加载了要使用的SpringMVC的组件了。

HanderMapper根据用户请求的地址去寻找程序员设置的Mappering映射。那这个映射是怎么配置的呢?

SpringMVC也提供了很方便的映射处理,常用有两种方式:

1:xml配置(使用不太多)

2:注解配置(使用较多)

如果我们使用XML的方式需要单独去加载去配置一个XML文件,这比较麻烦,所以一般使用注解方式开发。

使用注解方式只需要在类上加一个@Controller的注释,那么SpringMVC就能识别出这个Controller的。

当然我们首先要告诉SpringMVC我用的注解方式,然后你去哪扫描。

需要在SpringMVC的配置文件(也就是上边那个配置文件)中加上下面内容:

 <!-- 开启注解 --><mvc:annotation-driven/><!-- 自动扫描controller --><context:component-scan base-package="com.questiontest.controller"/>  

当然base-package也就是你的Controller所在的包。

现在已经成功拿到Controller了,但是为什么用户请求我就调用这个方法来执行呢?MapperingHandler凭什么让我去执行这个用户的请求呢?

所以我们在创建每一个Controller的时候都要去告诉SpringMVC,我是处理哪个请求的。

这一步我们通常通过@RequestMapping(value=“请求路径”,method="请求方法")这个注解进行配置。

如下面:

@RequestMapping(value = "addAnswer.action", method = RequestMethod.POST)public void addAnswer(Answer answer) {}

这样用户在请求addAnswer.action的时候,就会由他下边这个方法去执行了。

但是我们看上面的执行流程的时候,执行的是一个chain,这是怎么回事呢?

因为开发的时候我并不能让所用人都能访问我的Controller,我需要对访问的人加以限制,满足我条件的人才能访问也就是拦截器,我需要拦截一部分非法请求。

那我肯定要先配置拦截器。

这时候就需要在SpringMVC进行配置了。

首先需要定义拦截器,实现SpringMVC提供给我们的HandlerInterceptor接口

public class Encoding implements HandlerInterceptor{@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {}}

可以看到SpringMVC提供给我们了前置方法,处理器,后置拦截。这提供的是非常舒服的,在使用起来就非常方便。

下面就是看是在SpringMVC的配置文件中进行配置了。

 <mvc:interceptors><!-- 编码拦截器 --><mvc:interceptor><mvc:mapping path="*.action"/><bean class="com.questiontest.interceptor.Encoding"/></mvc:interceptor></mvc:interceptors>

到这里终于可以进行处理请求了吧,嘿嘿,其实还没完,首先我要对你的参数进行校验,也就是常说的表单验证。表单校验也有两种方式:

1.JSR303注解验证输入内容

2.使用Validator验证器进行校验

第二种方式也是使用SpringMVC提供的Validator这个核心接口实现的。

在这里就不具体举例了。

请求完了以后需要响应用户了,通常由两种响应,一是跳转页面,二是返回数据。

这里SpringMVC推崇了一种ModelAndView的方式来响应用户,不得不说这种方式确实也挺好用的,但是小编不喜欢用,嘻嘻。

我更推崇使用直接返回的方式。通过使用@ResponseBody来直接进行JSON交互。

如下:

@RequestMapping(value = "addAnswer.action", method = RequestMethod.POST)public @ResponseBody ResponseMessage addAnswer(Answer answer) {boolean flag = service.addAnswer(answer);ResponseMessage message = new ResponseMessage();message.setFlag(flag);if (flag) {message.setMessage("添加成功");} else {message.setMessage("添加失败");}return message;}

这样这个message对象就直接以JSON的格式返回给前台了。

这里也就是跳过了视图解析器,因为我并没有跳转页面。

如果我进行页面跳转可以这样做:

@RequestMapping(value = "addAnswer.action", method = RequestMethod.POST)public  String addAnswer(Answer answer) {boolean flag = service.addAnswer(answer);ResponseMessage message = new ResponseMessage();message.setFlag(flag);if (flag) {message.setMessage("添加成功");} else {message.setMessage("添加失败");}return "success.html";}

这样就直接跳转到success.html这个界面了。这可都是视图解析器的功劳哦(视图解析器会去寻找对应的文件)。当然我们可以在初始化视图解析的时候加上一些参数,比如前缀后缀,这样我们return的时候就可以少些前缀后缀了。

浅谈SpringMVC相关推荐

  1. 浅谈SpringMVC执行过程

    通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,核心容器模块和模块, 其中,在Spring框架的Web模块中,又 ...

  2. java spring流程_浅谈SpringMVC执行过程

    通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,核心容器模块和模块, 其中,在Spring框架的Web模块中,又 ...

  3. 浅谈SpringMVC之DispatcherServlet

    2019独角兽企业重金招聘Python工程师标准>>> Spring的MVC框架是围绕一个DispatcherServlet其实就是个Servlet(它继承自HttpServlet基 ...

  4. 浅谈Spring5 响应式编程

    目录 为什么是响应式编程 用于响应式编程实现的理想案例 响应流 (Reactive Streams) Spring 5 提供的响应式编程 Spring Web Reactive vs. Spring ...

  5. 浅谈Spring MVC知识

    关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:"MVC框架是什么?你说一说."其实我们都知道这个问题还需要问的, ...

  6. 浅谈作为一名软件开发,应该学什么、怎么学、怎样更好的提高自己?

    作为一名Java软件开发,自己的感觉就是需要学的东西挺多的.工作中,会用到很多的技术,有些技术,可能看几篇技术博客之类的,就可以学会基本使用,有的技术包含的内容比较多,学起来当然就需要更多的时间了,工 ...

  7. ajax感受,有什么缺点,浅谈ajax的优点与缺点

    AJAX (Asynchronous Javascript and XML) 是一种交互式动态web应用开发技术,该技术能提供富用户体验. 完全的AJAX应用给人以桌面应用的感觉.正如其他任何技术,A ...

  8. 浅谈模式 - 责任链模式

    过滤器链,拦截器链 public interface IHandler {boolean doIt(); } public class Handler1 implements IHandler {@O ...

  9. (浅谈SOA架构)------SOA架构演变由来

    SOA架构演变由来 一:了解市场上系统架构 1.1:市面上有那些架构? (1):单体架构 (2):垂直架构 (3):分布式服务架构 (4):SOA架构 (5):微服务架构 1.2:各自架构的优缺点 1 ...

最新文章

  1. PHP基础-自定义函数-变量范围-函数参数传递
  2. 有关绑定没有数据显示的问题
  3. 操作系统中的零拷贝与java中的使用
  4. 教你理解复杂的C/C++声明
  5. 《长安十二时辰》背后的文娱大脑:如何提升爆款的确定性?
  6. 大事件后台管理系统开发实战(中)
  7. python中int函数是什么作用_python中int函数怎么用
  8. 卸载 mysql 2008_卸载sql server 2008
  9. 系统调用ptrace和进程跟踪
  10. edm邮件直投_EDM邮件直投专家下载
  11. Crucible安装与使用(代码审查Code Review)
  12. 解决:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x81 in position 18: illegal multibyte sequence
  13. windows10系统-12-WPS文档编辑排版
  14. 3.6 常用符号在数据输入中的使用 [原创Excel教程]
  15. sphinx在windows下的简单安装与使用
  16. 看看电销外呼系统排行,选择哪家外呼公司靠谱?
  17. python3 字典遍历操作
  18. maven打包二进制文件
  19. 3d打印机打印obj格式_购买3D打印机如何为您省钱
  20. Java------Thread线程

热门文章

  1. 阿里云云安全 ACP(六)云盾的安全管理及安全防护建议
  2. 4星|《小群效应》:移动互联网时代,社群的数据与分析
  3. Ubuntu:u盘作系统启动盘
  4. 水星路由器 Mercury MER1200G刷机教程,Archer C5V4刷回原厂固件,串口(TTL)刷机,需要一个USB转TTL工具
  5. vue动态设置页面title
  6. 【学习笔记】网页出现白屏可能的原因与优化方法
  7. android 相机感光度,安卓党别笑!iPhone也能用专业模式拍照!
  8. EPS三维测图练习模型下载
  9. 【】每日15题,2019.11.01日04点财会类考试习题答案
  10. 手把手教你使用Python网络爬虫获取菜谱信息