SpringMvc最重要的两个功能(核心):
- 从请求中接收传过来的参数
- 把处理后的结果集返回给页面
Springmvc是什么?
Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来:
SpringMvc处理流程(简单流程图):
jsp是由tomcat解析。把数据和标签进行组装(渲染),再返回给struts2的前端控制器,再返回给浏览器。
上图,Controller访问service,service访问dao,dao访问数据库,拿到数据库返回的数据,再交给DispatcherServlet。DispatcherServlet得到数据库中返回的数据之后,把数据给jsp。
入门程序
1.创建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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 配置@Controller注解扫描 -->
<context:component-scan base-package="com.ken.controller" />
</beans>
2.配置前端控制器
web.xml
<!-- 前端控制器 -->
<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.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
3.创建pojo
public class Items {
private Integer id;
private String name;
private Float price;
private String pic;
private Date createtime;
private String detail;
//getter and setter
}
4.创建Controller
@Controller
public class ItemsController {
// 指定url到请求方法的映射
@RequestMapping("/list")
public ModelAndView imtesList() {
List<Items> itemList = new ArrayList<>();
// 商品列表
Items items_1 = new Items();
items_1.setName("联想笔记本_3");
items_1.setPrice(6000f);
items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
Items items_2 = new Items();
items_2.setName("苹果手机");
items_2.setPrice(5000f);
items_2.setDetail("iphone6苹果手机!");
itemList.add(items_1);
itemList.add(items_2);
// 模型和视图
// model模型:模型对象中存放了返回给页面的数据
// view视图:视图对象中指定了返回的页面的位置
ModelAndView modelAndView = new ModelAndView();
// 将返回给页面的数据放入模型和视图对象中
modelAndView.addObject("itemList", itemList);// 页面要根据itemList这个变量取出来
// 指定返回页面的位置
modelAndView.setViewName("/WEB-INF/jsp/itemList.jsp");
return modelAndView;
}
}
在Controller中要把数据返回给页面。那么:1.要指定返回到哪个页面;2.返回页面的数据内容;
5.创建jsp页面
具体内容见源码
6.测试
在tomcat启动的时候,会加载web.xml。加载完web.xml,也就把DispatcherServlet加载了,那么,classpath:SpringMvc.xml也就被加载了。SpringMvc.xml中配置了包扫描,就会把包扫描指定的base-package下有注解的类加载到内存,变成对象了。
我们在DispatcherServlet的配置文件中,配置了url-patter为*.action,那么只有以.action结尾的请求会被扫描。扫描到了,就会把请求给Controller。怎么给Controller呢?在DispatcherServlet的配置中,指定了classpath:SpringMvc.xml。请求就会找到对应的Controller对象。然后,再通过RequestMapping去映射到具体的方法。
到了具体的方法,会获得一些数据,需要把这些数据返回给页面。还需要指定数据返回到哪个页面去。