1 MVC模式回顾
Spring MVC是一种基于MVC的Web应用框架。
MVC是一种设计模式,MVC在b/s系统下的应用:
执行步骤:
- 发出请求,请求到MVC当中的C,C接收请求后并不能处理请求,需要把请求交给M
- 模型是用来处理请求的,所有用来处理的东西都是模型,pojo,action,service,dao
- 处理完后进行结果返回到C
- C需要一些好看的经过渲染的页面进行响应,这就用到V视图
- 控制器进行视图的渲染,将模型数据填充到request域
- Request准备好了后就可以response了
注意:b/s系统下模型无法将数据填充到视图
与springMVC的联系:控制器、模型、视图这些在spring中怎么实现的?
2 Spring MVC框架
执行步骤:
1 发起请求到前段控制器(dispatcherServlet)
2 前端控制器请求HandlerMapping查找Handler可以根据xml配置、注解进行查找
3 处理器映射器HandlerMapping向前端控制器返回handler
4 前端控制器调用处理器适配器去执行handler
5 处理器适配器去执行handler
6 handler执行完给适配器返回modelAndView
7 处理器适配器向前端控制器返回modelAndView,modelAndView是springMVC框架的一个底层对象,包括model和view
8 前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(jsp)
9 视图解析器向前端控制器返回view
10 前端控制器进行视图渲染,视图渲染将模型数据(在modelAndView对象中)填充到request域
11 前端控制器向用户响应结果
3 springMVC主要组件
1前端控制器DispatcherServlet(不需要程序开发)
作用:接收请求,响应结果,相当于转发器,中央处理器
减少了其他组件之间的耦合度。
2 处理器映射器HandlerMapping(不需要程序开发)
作用:根据请求的url查找handler
3 处理器适配器HandlerAdapter(不需要程序开发)
作用:按照特定规则(HandlerAdapter要求的规则)执行handler
4 处理器Handler(需要程序开发)
注意:编写handler时按照handlerAdapter的要求去做,这样适配器才可以正确执行handler
5 视图解析器view resolver(不需要程序开发)
作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
6 视图view(需要程序员开发jsp)
View是一个接口,实现类支持不同的view类型
4 一个简单的springMVC案例
4.1 配置前端控制器
1 <!-- 配置springmvc前端控制器 --> 2 <servlet> 3 <servlet-name>springmvc</servlet-name> 4 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 5 <init-param> 6 <param-name>contextConfigLocation</param-name> 7 <param-value>classpath:/*-servlet.xml</param-value> 8 </init-param> 9 <load-on-startup>1</load-on-startup> 10 </servlet> 11 12 <servlet-mapping> 13 <servlet-name>springmvc</servlet-name> 14 <url-pattern>/</url-pattern> 15 </servlet-mapping>
4.2 配置处理器:配置器
1 <!-- HandlerAdapter --> 2 <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
4.3 配置处理器:映射器
1 <!-- HandlerMapping --> 2 <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
4.4 配置视图解析器
1 <!-- ViewResolver --> 2 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 3 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> 4 <property name="prefix" value="/WEB-INF/jsp/"/> 5 <property name="suffix" value=".jsp"/> 6 </bean>
4.5 处理器书写
1 <!-- Handler--> 2 <bean name="/hello" class="com.inspur.handler.HelloWorldController"/>
Java代码
1 public class HelloWorldController implements Controller { 2 @Override 3 public ModelAndView handleRequest(HttpServletRequest request, 4 HttpServletResponse response) throws Exception { 5 //返回ModelAndView 6 ModelAndView mv = new ModelAndView(); 7 //相当于request的setAttribute,在jsp页面中通过message取数据 8 mv.addObject("message", "Hello World!"); 9 //设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面 10 mv.setViewName("hello"); 11 return mv; 12 } 13 }
4.6 Jsp书写
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 ${message}
4.7 访问