Spring MVC 是一种基于 Java 的实现了 Web MVC 设计模式的请求驱动类型的轻量级 Web 框架, 即便用了MVC 架构模式的思想,将 web 层进行职责解耦, 基于请求驱动指的就是使用请求-响应模型, 框架的目的就是帮助咱们简化开发, Spring Web MVC 也是要简化咱们平常 Web 开发的。前端
▶ 进行更简洁的 Web 层的开发;java
▶ 天生与 Spring 框架集成(如 IoC 容器、 AOP 等);web
▶ 提供强大的约定大于配置的契约式编程支持;spring
▶ 能简单的进行 Web 层的单元测试;提供强大的约定大于配置的契约式编程支持;编程
▶ 能简单的进行 Web 层的单元测试;设计模式
▶ 支持灵活的 URL 到页面控制器的映射;数据结构
▶ 很是容易与其余视图技术集成,如 Velocity、FreeMarker 等等, 由于模型数据不放在特定的 API 里,而是放在一个Model 里(Map 数据结构实现, 所以很容易被其余框架使用);架构
▶ 很是灵活的数据验证、 格式化和数据绑定机制, 能使用任何对象进行数据绑定, 没必要实现特定框架的 API;提供一套强大的 JSP 标签库, 简化 JSP 开发;
▶ 支持灵活的本地化、 主题等解析;
▶ 更加简单的异常处理;
▶ 对静态资源的支持;
▶ 支持 Restful 风格。mvc
▶ DispatcherServlet: 前端控制器
▶ HandlerMapping: 将请求映射处处理器
▶ HandlerAdapter: 把处理器包装为适配器, 用来支持多种类型的处理器
▶ View Resolver: 视图解析器
▶ Controller接口: 页面控制器/动做/处理器
▶ LocalResolver: 本地化解析, 由于Spring支持国际化,所以LocalResolver解析客户端的Locale信息从而方便
进行国际化
▶ ThemeResovler: 主题解析, 经过它来实现一个页面多套风格, 即常见的相似于软件皮肤效果app
▶ MultipartResolver:文件上传解析, 用于支持文件上传
▶ HandlerExceptionResolver: 解析并处理异
▶ RequestToViewNameTranslator: 当处理器没有返回逻辑视图名等相关信息时,自动将请求URL映射为逻辑
视图名
▶ FlashMapManager: 用于管理FlashMap的策略接口,FlashMap用于存储一个请求的输出, 当进入另外一个请求时做为该请求的输入, 一般用于重定向场景
spring mvc 处理流程
spring mvc 开发步骤
▶ DispatcherServlet 在 web.xml 中的部署描述, 从而拦截请求到 Spring MVC
▶ 配置HandlerMapping, 从而将请求映射处处理器
▶ 配置HandlerAdapter, 从而支持多种类型的处理器
▶ 配置ViewResolver, 从而将逻辑视图名解析为具体视图技术
▶ 配置处理器(页面控制器), 从而进行功能处理
一、清晰的角色划分: 前端控制(DispatcherServlet)、请求处处理器映射(HandlerMapping)、 处理器适配器(HandlerAdapter)、 视图解析器(ViewResolver)、处理器或页面控制器(Controller)、 验证器(Validator)、 命令对象(Command 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展现和提交到的对象就叫表单对象)。
二、 分工明确, 并且扩展点至关灵活, 能够很容易扩展,虽然几乎不须要;
三、 因为命令对象就是一个 POJO, 无需继承框架特定API, 可使用命令对象直接做为业务对象;
四、 和 Spring 其余框架无缝集成,是其它 Web 框架所不具有的;
五、 可适配, 经过 HandlerAdapter 能够支持任意的类做为处理器;
六、 可定制性, HandlerMapping、 ViewResolver 等可以很是简单的定制;
七、 功能强大的数据验证、 格式化、 绑定机制;
八、 利用 Spring 提供的 Mock 对象可以很是简单的进行Web 层单元测试;
九、 本地化、 主题的解析的支持, 使咱们更容易进行国际化和主题的切换。
十、 强大的 JSP 标签库, 使 JSP 编写更容易。
1.在web.xml下面配置DispatcherServlet
<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请求都会被 DispatcherServlet 拦截--> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 针对Post方式的请求进行编码的设置 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2.在/WEB-INF/springmvc-servlet.xml中配置 HandlerMapping 和 HandlerAdapter 和 ViewResolver
<!-- 配置HandlerMapping 默认配置,可省略 --> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <!-- 配置HandlerAdapter 默认配置,可省略 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <!-- 配置ViewResolver--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <!-- 第一个斜杠/不能省略 --> <property name="prefix" value="/pages/"></property> <property name="suffix" value=".jsp"></property> </bean> <bean class="com.hejie.controller.HelloWorldController"></bean>
3.最后编写controller便可
@Controller public class HelloWorldController { @RequestMapping (value="/hello") public Model helloWorld (HttpServletRequest request, HttpServletResponse response,Model model) { //获取前端传递的值 String name = request.getParameter("name"); System.out.println("name==============="+name); model.addAttribute("name", name); return model; } }