springMVC:表现层框架;从请求中获取参数,将结果返回给前台。
请求过程:
- 用户发送请求至前端控制器DispatcherServlet
- DispatcherServlet收到请求调用HandlerMapping处理器映射器。
- 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
- DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
- 执行处理器(Controller,也叫后端控制器)。
- Controller执行完成返回ModelAndView
- HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器
- ViewReslover解析后返回具体View
- DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
- DispatcherServlet响应用户
组件说明:
DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其他组件处理用户的请求,
DispatcherServlet的存在降低了组件之间的耦合性。
HandlerMapping:处理器映射器
HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式、
实现接口方式、注解方式等。
Handler:处理器
Handler是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。(由于
Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler)。
HandlerAdapter:处理器适配器
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
View Resolver:视图解析器
View Resolver负责将处理结果生成view视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View
视图对象名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
View:视图
springmvc框架提供了很多的View视图类型的支持,包括jstlView、freemarkerView\pdfView等。最常用的视图就是jsp。
一般情况下需要通过页面标签或页面模板技术奖模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件。需要用户开放
的组件有Handler、view。
构建过程:
1.Eclipse创建动态web项目Dynamic Web Project
输入项目名springmvc,version选择2.5
一直Next,然后Finish,完成后项目目录如下:
在WebContent\WEB-INF\lib目录,放入springmvc所需要的的jar包(不需要build path)
创建com.springmvc.controller层和com.springmvc.pojo层,在controller层创建StudentController .java,在pojo层创建student.java
StudentController .java:
@Controller
public class StudentController {
@RequestMapping("/list")
public ModelAndView itemsList() throws Exception{
List<Student> stuList = new ArrayList<>();
//学生列表
Student stu1 = new Student();
stu1.setName("蔡徐坤");
stu1.setAge(21);
stu1.setHobby("打篮球");
stu1.setStrength("唱、跳、Rap");
Student stu2 = new Student();
stu2.setName("杨超越");
stu2.setAge(20);
stu2.setHobby("唱歌、跳舞");
stu2.setStrength("软萌、可爱");
stuList.add(stu1);
stuList.add(stu2);
//模型和视图
//model模型: 模型对象中存放了返回给页面的数据
//view视图: 视图对象中指定了返回的页面的位置
ModelAndView modelAndView = new ModelAndView();
//将返回给页面的数据放入模型和视图对象中
modelAndView.addObject("stuList", stuList);
//指定返回的页面位置
modelAndView.setViewName("stuList");
return modelAndView;
}
}
student.java:
public class Student {
private Integer id;
private String name;
private int age;
private String hobby;
private String strength;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getStrength() {
return strength;
}
public void setStrength(String strength) {
this.strength = strength;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
在WEB-INF目录下新建jsp文件夹,并创建stuList.jsp
stuList.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学生列表</title>
</head>
<body>
学生列表:
<table width="100%" border=1>
<tr>
<td>姓名</td>
<td>年龄</td>
<td>爱好</td>
<td>特长</td>
</tr>
<c:forEach items="${stuList}" var="stu">
<tr>
<td>${stu.name }</td>
<td>${stu.age }</td>
<td>${stu.hobby}</td>
<td>${stu.strength }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
新建config资源包,并在该目录下创建sprigmvc.xml
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.springmvc.controller"></context:component-scan>
<!-- 注解驱动:替我们自动配置最新版的注解的处理器映射器和处理器适配器 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置视图解析器 :在controller中指定页面路径的时候就不用写页面的完整路径名称了,可以直接写页面去掉扩展名的名称-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 真正的页面路径 = 前缀 + 去掉后缀名的页面名称 + 后缀 -->
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!-- 后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
将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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>springmvc</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- springmvc前端控制器 -->
<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>
<!-- tomcat启动的时候servlet加载顺序 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
eclipse新建Servers,引入tomcat,将Deploy path设置为tomcat的webapps目录下,启动tomcat,在浏览器输入:
http://localhost:8080/springmvc/list
结果如下:
OVER!