一. springMVC简介
springmvc:与 struts2类似,它web(表现)层框架,该框架是spring的子项目之一(spring模块之一)。与spring之间无需整合(不需要提供整合包)。
二. springMVC原理
自己拼接的一张小图:
其中有4大组件:
- 前端控制器(servlet)
- 处理器映射器(HandlerMapping)
- 处理器适配器(HandlerAdapter)
- 视图解析器(ViewResolver)
三. 快速入门
1. 配置web.xml
<servlet>
<servlet-name>springDispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring-mvc.xml</param-value>
</init-param>
<!-- 服务器启动初始化 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcher</servlet-name>
<!-- 拦截所有 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
2. 配置springMVC.xml
配置内容:
- 配置扫描器
- 配置处理器映射器
- 配置处理器适配器
- 配置视图解析器
注意:
2-3步可以使用配置注解驱动而代替:
<?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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<!-- 1.配置扫描器,扫描@Controller -->
<context:component-scan base-package="online.bendou.springmvc.controller" />
<!-- 2.配置处理器映射器
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
3.配置处理器适配器
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>-->
<!-- 配置注解驱动,取代2,3步骤 -->
<mvc:annotation-driven />
<!-- 4.配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 设置返回视图的前后缀 -->
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 放行静态资源 -->
<mvc:resource location="/js" mapping="/*" />
</beans>
3.编写controller
@Controller
@RequestMapping("/user") // 窄化请求
public class UserController{
@RequestMapping("/toIndex") // 窄化请求
// 返回的是字符串
public String toIndex(){
// 返回的页面需要和springMVC中配置的前后缀拼接
// 例如: 需返回视图${baseurl}/jsp/index.jsp
return "index";
}
@RequestMapping("/getNames")
public String getNames(Model model){
List<String> names = new ArrayList<>();
names.add("张三");
names.add("李四");
model.addAttribute("names", names);
return "getNames";
}
@RequestMapping("/getAges")
public ModelAndView getAges(){
List<Integer> userList = new ArrayList<Integer>();
userList.add(19);
userList.add(25);
// 创建ModelAndView对象,构造方法中传入返回的视图名称
ModelAndView modelAndView = new ModelAndView("getAges");
modelAndView.addObject("userList",userList);
return modelAndView;
}
}
四. springMVC方法参数中的Model和ModelAndView对象区别
Model:
Model是一个接口, modelMap是其实现类. 如果直接使用Model, springMVC会实例化Model. 方法返回的是字符串(视图名)
使用Model和ModeMap效果是一样的, 都是向页面发送数据.如:
Items item = itemService.findItemById(id);
model.addAttribute("item", item);
页面可以通过${item.xxx}取值.
ModelAndView:
不仅可以向页面发送数据, 也可以设置返回的视图名称. 方法返回ModelAndView对象.
五. springMVC的返回值
- 返回ModelAndView
- 设置返回数据
- 设置返回视图名
返回void
- ajax异步请求, 返回void
返回String
- 返回视图名
- 可以通过model设置返回数据
- 返回redirect
- 重定向
return "redirect:queryUser;"
- 数据不共享, 两次request
- 重定向
- 返回forward
- 请求转发
return "forward:queryUser";
- 数据共享
- 请求转发
六. springMVC和Struts2的区别
- springMVC是一个servlet; struts2是一个filter.
- springMVC是基于方法的开发; struts2基于类
- springMVC将数据绑定到方法的参数上; struts2则绑定到全局变量中.
- springMVC可以单例开发, 因为它是通过controller的形参接收参数,方法完成,形参数据销毁; 但是struts2是通过模型驱动将数据绑定到全局变量上, 因此struts2必须是多例开发;
- springMVC将需要返回的数据存放在model中; struts则存放在值栈valuestack中