SpringMVC概述
- SpringMVC是一种基于Java实现MVC设计模型的请求驱动类型的轻量级Web框架
- 它是通过一套注解,让一个简单的pojo类成为处理请求的控制器,基于pojo类中的方法,一个方法就是一个Servlet,无需实现任何接口。同时它还支持RESTful风格编程格式的请求。
- 它的本质就是一个Servlet
MVC : Model View Controller
Model: 主要是用于数据的封装 ---->pojo----->JavaBean
View: 解析jsp生成html页面 ----->JSP
Controller: 控制器 用于服务器和客户端交互 一个Servlet
请求驱动类型:
请求-响应类型
SpringMVC在三层架构中的地位和位置
SpringMVC处理流程
(1) Http请求:客户端请求提交到DispatcherServlet。
(2) 寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。
(3) 调用处理器:DispatcherServlet将请求提交到Controller。
(4)(5)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。
(6)(7)处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。
(8) Http响应:视图负责将结果显示到客户端。
SpringMVC之HelloWorld快速入门
开发步骤
步骤一:编写一个JavaBean(实体类)
/**
* JavaBean Role类
*/
public class Role implements Serializable {
private Integer r_id;
private String r_name;
private String r_desc;
private Date r_rTime;
public Role() {
}
public Role(Integer r_id, String r_name, String r_desc, Date r_rTime) {
this.r_id = r_id;
this.r_name = r_name;
this.r_desc = r_desc;
this.r_rTime = r_rTime;
}
public Integer getR_id() {
return r_id;
}
public void setR_id(Integer r_id) {
this.r_id = r_id;
}
public String getR_name() {
return r_name;
}
public void setR_name(String r_name) {
this.r_name = r_name;
}
public String getR_desc() {
return r_desc;
}
public void setR_desc(String r_desc) {
this.r_desc = r_desc;
}
public Date getR_rTime() {
return r_rTime;
}
public void setR_rTime(Date r_rTime) {
this.r_rTime = r_rTime;
}
@Override
public String toString() {
return "Role{" +
"r_id=" + r_id +
", r_name='" + r_name + '\'' +
", r_desc='" + r_desc + '\'' +
", r_rTime=" + r_rTime +
'}';
}
}
步骤二:配置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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--扫描controller包-->
<context:component-scan base-package="com.zhiyou100.web.controller"/>
<!--配置处理器映射器-->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>-->
<!--配置处理器适配器-->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>-->
<!--配置注解驱动 涵盖了处理器映射器和处理器适配器-->
<mvc:annotation-driven/>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--静态资源放行-->
<!--方式一 采用tomcat默认的处理方式 开启tomcat缺省配置处理方式-->
<!--<mvc:default-servlet-handler/>-->
<!--方式二 手动映射-->
<!-- <mvc:resources mapping="/img/**" location="/img/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/lib/**" location="/lib/"/>-->
</beans>
步骤三:配置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">
<!--配置前端控制器 DispatcherServlet-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<!--springMVC框架提供的一个servlet类-->
<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>
<!--首先加载DispatcherServlet-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<!--url-pattern
完全匹配 /role/listRoles
目录匹配 /role/listRoles
缺省匹配 / 拦截静态资源(拦截不了jsp资源)
匹配所有
扩展名匹配 *.action *.do *.zkl 推荐使用扩展名
-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
步骤五:模拟数据库数据编写ctroller层代码
/**
* @Repsitory @Component @Service @Controller
*/
@Controller
public class RoleController{
//假定请求的路由:localhost:8080/day70_hello/role/listRoles
//假定请求的路由:localhost:8080/day70_hello/role/updateRole
//定义一个方法 获取所有的角色信息
//请求映射注解 url-patterns
/**
*ModelAndView
* Model 模型 用于封装数据 主要用于传输数据
* View 视图 挑战的页面资源
*
*/
@RequestMapping("/role/listRoles")
public ModelAndView getAllRoles(){
//假定已经从数据库中获取到角色信息
ModelAndView mav = new ModelAndView();
ArrayList<Role> listRoles = new ArrayList<>();
listRoles.add(new Role(1, "学生", "学习", new Date()));
listRoles.add(new Role(2, "老师", "学习", new Date()));
listRoles.add(new Role(3, "副教授", "学习", new Date()));
listRoles.add(new Role(4, "教授", "学习", new Date()));
listRoles.add(new Role(5, "院士", "学习", new Date()));
listRoles.add(new Role(6, "国士", "学习", new Date()));
//需要把listRoles数据传输到页面中,并且在页面中展示出来
//把数据listRoles放进ModelAndView对象中
mav.addObject("list", listRoles);
//实现页面跳转 跳转的页面地址
//WEB-INF/view/role/roleList.jsp
//视图解析器添加有前后缀 可以省略 /WEB-INF/view和.jsp
mav.setViewName("/role/roleList");
//借助于SpringMVC
return mav;
}
}
结果如下: