章节目标:
1.SpringMVC的好处
2.SpringMVC的工作流程
3.Spring的注解开发,核心类
1.SpringMVC是什么?好处是什么?
答:此框架是spring提供一个实现WebMVC设计模式的轻量级web框架.
好处:1.灵活性强易于其他框架集成.2.提供前端控制器DispatchServlet3.自动绑定用户输入.4.内置常见校验器.5.基于XML配置文件,不需要重写编译应用程序等等
2.Spring的工作流程
废话不多先上例子
项目例子
1.创建项目,引入jar包,搭建环境
在这里要注意spring和Tomcat的版本配对问题,spring版本过高必报错,所以我的版本和之前不同
2.在web.xml下写写前端控制器
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <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-config.xml</param-value> </init-param> <!-- 表示容器在启动时立即加载Servlet --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
3.创建Controller类
public class FirstController implements Controller{ public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { //创建ModelAndView对象 ModelAndView mav = new ModelAndView(); //向模型对象中添加数据 mav.addObject("msg", "大家好,mynameis springmvc"); //设置逻辑视图名 mav.setViewName("/WEB-INF/jsp/first.jsp"); //返回ModelAndView对象 return mav; } }
4.编写配置文件springmvc-config.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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <!-- 配置处理器Handle,映射/firstController 请求 --> <bean name="/firstController" class="com.itheima.controller.FirstController"/> <!-- 处理器映射器,将处理器Handle的name作为url进行查找 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- 处理器适配器,配置对处理器中handleRequest()方法的调用 --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourseViewResolver"/> </beans>
5.在创建first.jsp 文件WEB-INF的jsp文件夹下
<body>${msg}<body>
6.完成项目然后发布到Tomcat中启动服务器输入这个网址:http://localhost:8080/SpringMVCdemo/firstController
SpringMVC的工作流程
先看图
此图就是SpringMVC工作流程,其中HandlerAdapter,HandlerMapping,viewResolver分别表示处理器适配器,处理器映射器,视图解析器,
在上述springmvc-config.xml中对应的xml语句写了对应的功能(其中xml文件的这些内容可以省略,spring自动为我们实现了这些功能,为了理解我们写上)
Handler相当于之前的Controller类,称为后端控制器
工作流程按数字顺序:
1.客户通过客户端向服务器发起请求,2.被DispatcherServlet拦截,拦截请求后调用HandlerMapping,
3.HandlerMapping功能是根据请求的url找到具体处理器,生成此对象返回给DispatcherServlet
4.DispatcherServlet通过返回的信息选择合适的HandlerAdapter
5.HandlerAdapter调用执行Handler,也就是执行对应的Controller类
6.Controller类执行完返回一个ModelAndView对象,里面包含模型和视图名.
7.HandlerAdapter将此对象返回给DispatcherServlet
8.DispatcherServlet通过MAV对象选择合适的viewResolver
9.viewResolver解析后,返回具体的view给DispatcherServlet
10.DispatcherServlet得到数据给view进行渲染
11.视图渲染后返回客户端的浏览器得到显示
SpringMVC核心类和注解
说实话,上面的东西只是帮助我们理解springmvc是如何工作的,在实际开发中我们一定要用注解开发,因为十分方便.
注解在spring2.5后使用
先上代码,看看和之前有什么区别
前端控制器
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <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-config.xml</param-value> </init-param> <!-- 表示容器在启动时立即加载Servlet --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
Controller注解类型
package com.itheima.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping(value="/hello") public class FirstController{ @RequestMapping(value="/firstController") public String handleRequest(HttpServletRequest request, HttpServletResponse response,Model model){ model.addAttribute("msg", "这是我的第一个springmvc程序"); return "first"; } }
springmvc-config.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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <!-- 指定需要扫描的包 --> <context:component-scan base-package="com.itheima.controller"/> <!-- 定义视图解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 设置前缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <!-- 设置后缀 --> <property name="suffix" value=".jsp" /> </bean> </beans>
然后输入http://localhost:8080/SpringMVCdemo/hello/firstController即可查看结果,与上面相同