Spring MVC的基本概念及处理的流程
来源:互联网 发布:javabean 数据库 编辑:程序博客网 时间:2024/06/02 02:17
Spring是视图层提供的基于MVC设计理念的Web框架,是目前最主流的MVC框架之一。
Spring3.0后全面超越Struts2,Spring MVC通过一套MVC注解,让POJO(java bean)成为处理请求的控制器,而无需实现任何接口。
Spring MVC支持REST风格的URL请求,采用了松散耦合可插拔组件结构。
Spring MVC的特点有以下几点:
清晰的角色划分
强大而直接的配置方式
可适配、非入侵的Controller
可重用的业务代码
可定制的绑定(binding)和验证(validation)
可定制的handler mapping 和view resolution
灵活的model转换
可定制的本地化和主题(theme)解析
Spring MVC的处理流程:
1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
6. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
7. ViewResolver 结合Model和View,来渲染视图
8. 将渲染结果返回给客户端。
Spring MVC 的使用流程:
1、添加jar包:
2、在web.xml中配置dispatcherServlet
<servlet> <servlet-name>mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <!-- SpringMVC上下文配置文件 --> <param-name>contextConfigLocation</param-name> <param-value>classpath:servlet-mvc.xml</param-value> </init-param> <!-- 容器加载时就运行 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>3、在servlet-mvc.xml中添加Spring MVC的配置文件
<!-- 配置springmvc自动扫描的包 --> <context:component-scan base-package="com.jredu.controller"> <!-- 可以配置过滤不需要的文件或需要的文件 --> </context:component-scan> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/pages/" p:suffix=".jsp"/>
4、编写请求处理器:
package com.jredu.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping("/hello") //通过这个路径可以定位到控制器public class HelloController {@RequestMapping("/hello1.action")public String hello1(){return "hello"; //hello:/WEB-INF/pages下的jsp页面的名称//访问jsp页面的路径是:http://localhost:8080/SpringMVC/hello/hello1.action}}
5、编写视图
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'hello.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--> </head> <body> <!-- http://localhost:8080/SpringMVC/hello/hello1.action --> hello.jsp页面 </body></html>
ANT风格:URL的匹配可以是模糊匹配
?:代表任意一个字符
/** * ?:匹配任意一个字符 * @return */@RequestMapping("/h?") public String hello5(){return "hello";//访问路径:http://localhost:8080/SpringMVC/hello/h2 //http://localhost:8080/SpringMVC/hello/h! }
*:代表任意多个字符(0,1,)
/** * *:匹配任意多个字符 * @return */@RequestMapping("/a*") public String hello6(){return "hello"; }**:匹配任意多层路径:
/** * **:匹配任意多层路径 * @return */@RequestMapping("/a/**/hello7.action") public String hello7(){return "hello"; //http://localhost:8080/SpringMVC/hello/a/hello7.action//http://localhost:8080/SpringMVC/hello/a/123/456/hello7.action}
在页面中加入静态资源,三种配置方式:
1、在web.xml中配置
<!-- 静态资源配置信息 方式1:根据资源类型来配置--> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping>2、在servlet-mvc.xml中配置
<!-- 静态资源配置方式2:根据路径来配置 --> <mvc:resources location="/img/" mapping="/img/*"></mvc:resources>3、在servlet-mvc.xml中配置
<!-- 静态资源配置方式3:除了控制器一概不管理 --><mvc:default-servlet-handler />这三种方式中,方式3最好,只需要配置1次就可以了
- Spring MVC的基本概念及处理的流程
- Spring-mvc 的处理流程
- spring mvc的处理流程
- Spring MVC的基本概念
- Spring MVC的处理请求流程问题
- Spring Web MVC的请求处理流程
- Spring Web MVC处理请求的流程
- Spring MVC处理流程的理解
- Spring Web MVC处理请求的流程
- Spring Web MVC处理请求的流程
- 2、Spring MVC的基本概念
- Spring MVC请求处理流程及架构
- spring mvc 的流程
- spring学习笔记:spring mvc的处理流程
- Spring MVC中对Annotation配置方式的处理流程
- Spring MVC 对于@ModelAttribute 、@SessionAttributes 的详细处理流程
- Spring MVC处理流程
- spring mvc控制框架的流程及原理
- 关于程序员之间丧心病狂的鄙视链——编程语言篇
- 便捷提取python导入包的属性
- MySQL大表优化方案
- rsync同步yum源
- 获取html中光标位置
- Spring MVC的基本概念及处理的流程
- 最新的chromedriver与chrome的对应关系表
- AppBarLayout 介绍和简单使用
- 阿里云ECS服务器Centos安全漏洞修复
- Mastering the game of Go without human knowledge笔记
- QT学习之QString的arg方法
- 1106---BFS找最短路径
- 动态规划中的单调队列优化_补充
- Win10下python3和python2同时安装并解决pip共存问题 特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似。 使用python开