1.SpringMVC 是什么
SpringMVC和Struts2类似,都属于表现层的框架,它是Spring框架的一部分。相比于Struts2,SpringMVC运行速度较快,配置的内容较少(Struts2需要配置Struts2.xml文件),比较轻量级,而且是比较流行的框架之一
2.SpringMVC快速入门
导入相关的jar包
org.springframework.context-3.0.5.RELEASE.jar
org.springframework.expression-3.0.5.RELEASE.jar
org.springframework.core-3.0.5.RELEASE.jar
org.springframework.beans-3.0.5.RELEASE.jar
org.springframework.asm-3.0.5.RELEASE.jar
commons-logging.jar
org.springframework.web-3.0.5.RELEASE.jar
org.springframework.web.servlet-3.0.5.RELEASE.jar
配置web.xml分发器
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!-- spring mvc的配置
配置DispatcherServlet 这个类接管所有请求。
-->
<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:mvc-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
添加SpringMVC配置文件
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean>
<bean class="cn.springmvc.controller.HelloController"/>
<!-- 配置handerAdapter 适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 配置视图渲染器 -->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 将视图名 渲染后视图的前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 渲染后视图的后缀 -->
<property name="suffix" value=".jsp"/>
<!-- 例:视图名为:hello 渲染后:/WEB-INF/jsp/hello.jsp 该页面-->
</bean>
</beans>
编写Controller(控制器)
package cn.springmvc.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloController implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//调用类来处理
System.out.println("----- Hello Controller-----");
//创建一个ModelAndView对象 该对象最后被视图渲染器渲染为指定视图
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("hello");
return modelAndView;
}
}
结果
3使用注解开发
上文我们看到是用bean来管理Controller,当我们项目到达一定复杂度的时候不利于我们管理和维护,所以平时开发我们建议用注解的方式开发
在web.xml中添加这句
<!-- spring容器扫描指定包下的所有类,如果类上有注解 那么根据注解产生相应bean对象已经映射信息 -->
<context:component-scan base-package="cn.springmvc.controller"/>
Controller
@Controller
public class HelloController {
@RequestMapping(value = "/hello")
public ModelAndView hello() {
ModelAndView mv = new ModelAndView();
mv.setViewName("hello");
mv.addObject("msg", "annotation ------");
return mv;
}
}
结果
4.SpringMVC的处理流程
- 用户发送请求
- 请求交给核心控制管理器处理
- 处理器找到一个或者多个HandlerMapping,找到处理请求的Controller,然后将请求提交到对应的Controller处理
- Controller调用完业务处理逻辑后,返回ModelAndView
- ModelAndView通过试图渲染器的解析后,将结果返回到对应的JSP/Html页面