SpringMvc-初次搭建、介绍和基础案例
一,mvc做的事情,什么是MVC模式?
- 将url映射到java类或者java的方法。
- 封装用户提交的数据
- 处理请求--调用相关的业务处理--封装想相应的数据
- 将相应数据进行渲染,jsp或者html
- MVC模式指的是:Model(模型数据) + View(视图) + Controller(控制层)的缩写。
二,Spring mvc是一个轻量级的,基于请求响应的mvc框架。
三,为什么要学mvc
- 性能比struts2好,开发效率高,性能不高
- 简单,便捷,开发简单
- 天生和spring无缝集成,核心功能(ioc和aop)
- 使用约定优于配置
- 能够进行简单的junit测试
- 支持restful风格
- 异常处理
- 本地化
- 数据验证,类型转换等
- 有拦截器
SpringMVC 工作流程
- 用户发起请求到前端控制器(DispatcherServlet),该控制器会过滤出哪些请求可以访问Servlet、哪些不能访问。就是url-pattern的作用,并且会加载springmvc.xml配置文件。
- 前端控制器会找到处理器映射器(HandlerMapping),通过HandlerMapping完成url到controller映射的组件,简单来说,就是将在springmvc.xml中配置的或者注解的url与对应的处理类找到并进行存储,用map<url,handler>这样的方式来存储。
- HandlerMapping有了映射关系,并且找到url对应的处理器,HandlerMapping就会将其处理器(Handler)返回,在返回前,会加上很多拦截器。
- DispatcherServlet拿到Handler后,找到HandlerAdapter(处理器适配器),通过它来访问处理器,并执行处理器。
- 执行处理器
- 处理器会返回一个ModelAndView对象给HandlerAdapter
- 通过HandlerAdapter将ModelAndView对象返回给前端控制器(DispatcherServlet)
- 前端控制器请求视图解析器(ViewResolver)去进行视图解析,根据逻辑视图名解析成真正的视图(jsp),其实就是将ModelAndView对象中存放视图的名称进行查找,找到对应的页面形成视图对象
- 返回视图对象到前端控制器。
- 视图渲染,就是将ModelAndView对象中的数据放到request域中,用来让页面加载数据的。
- 通过第8步,通过名称找到了对应的页面,通过第10步,request域中有了所需要的数据,那么就能够进行视图渲染了。最后将其返回即可。
1、DispatcherServlet:核心前端控制器
2、HandlerMapping:Controller映射器
3、HandlerAdapter:Controller适配器
4、ViewResolver:视图解析器
-
-
接收用户请求,响应结果,相当于中央处理器,DispatcherServlet是整个流程控制的中心。
-
-
HandlerMapping:处理器映射器
-
理解为一个Map<url,Handler>,HandlerMapping负责根据用户请求的Url找到Handler即处理器。
-
-
HandlerAdapter:处理器适配器
-
适配handler
-
-
ViewResolver:视图解析器
-
ViewResolver进行视图解析,首先根据逻辑视图名解析成物理视图名即具体的页面地址生成View视图对象。
-
-
Handler:处理器
-
在SpringMVC当中有两层意思:Controller或者Controller当中的方法,处理具体业务请求。
-
-
View:视图
-
SpringMVC框架提供了很多的View视图类型的支持,包括:jsp、freemarker、Thymeleaf..等。我们最常用的视图就是jsp
-
初级配置
springmvc.xml
<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!--开启注解扫描--> <context:component-scan base-package="com.spring"/> </beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <!--注意:当前web.xml配置文件的头部约束必须写!!!--> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>DispatcherServlet</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> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
controller
@Controller @RequestMapping("app1") public class HelloController { @RequestMapping("hello") public ModelAndView getHello(ModelAndView modelAndView) {msg。 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String format = simpleDateFormat.format(new Date()); modelAndView.setViewName("/msg.jsp"); modelAndView.addObject("time", format); modelAndView.addObject("msg", "这里是app1/hello.do"); return modelAndView; } }
msg.jsp
<html> <head> <title>入门案例</title> </head> <body> <%--取出ModelAndView中的当前系统时间--%> <p>当前系统时间: ${time}</p> <p>消息: ${msg}</p> </body> </html>
概念:
-
物理视图名称:真实存在的路径地址
-
逻辑视图名称:不存在的路径地址,由视图解析器拼接完成
作用:
-
渲染jsp页面中的内容,渲染结果是HTML
-
提供内部资源(jsp页面)路径名称的拼接,提高代码的可维护性!
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--配置逻辑视图名称的前缀--> <property name="prefix" value="/WEB-INF/pages/"/> <!--配置逻辑视图名称的后缀--> <property name="suffix" value=".jsp"/> </bean>