1、SpringMVC 是什么
springmvc 是spring框架的一部分,是基于mvc 的表现层框架,用于web项目的开发
2、 MVC介绍(B/S)
mvc 是表现层的一个模型。Model(模型)-View(视图)-Conroller(控制器),三层架构的设计模型。主要用于实现前端页面的展现与后端业务数据处理逻辑的分离
优点:分层架构的设计,实现了业务系统各个组件之间的解耦,有利于实现业务系统的可拓展性,可维护性。有利于实现系统的并发开发,提升开发效率。
3、入门
- 加入依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
2. springmvc框架的主配置文件 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: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://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 配置扫描controller -->
<context:component-scan base-package="cn.leiyuee.controller"/>
<!-- 注解驱动方式配置处理器映射器和处理器适配器,说明:
1.它等于同时配置了RequestMappingHandlerMapping/RequestMappingHandlerAdapter
2.在企业项目中,推荐使用的方式
-->
<mvc:annotation-driven/>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置视图的公共目录名称 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 配置视图的扩展名称 -->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
3. 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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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-first</display-name>
<!-- 配置前端控制器:DispatcherServlet -->
<servlet>
<servlet-name>springmvc-first</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载springmvc主配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 配置什么时候加载前端控制器,说明:
1.配置大于等于0的整数,表示web容器启动的时候加载
2.配置小于0的整数,表示在第一次请求到达的时候加载
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc-first</servlet-name>
<!-- 配置拦截的请求url规则,说明:
1.*.do,表示以.do结尾的请求进入前端控制器
2./,表示所有请求都进入前端控制器
-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 默认的欢迎页面 -->
<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>
</web-app>
4`. jsp 页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>springmvc入门程序案例</title>
</head>
<body>
你好,世界!${hello}
</body>
</html>
5. 处理器controller
@Controller
public class HelloController {
/**
* 问好
* ModelAndView:模型和视图。用于设置响应的视图;用于设置响应的模型数据
* @RequestMapping:配置请求的url
*/
@RequestMapping("/hello.do")
public ModelAndView hello(){
// 1.创建ModelAndView对象
ModelAndView mav = new ModelAndView();
// 2.设置响应模型数据
/**
* addObject:设置模型数据
2.7. * 参数:
* attributeName:模型名称
* attributeValue:模型数据
*/
mav.addObject("hello", "210大家");
// 3.设置响应的页面
/**
* setViewName:设置响应的视图
* 参数:
* viewName:视图名称(是视图的物理路径)
*/
mav.setViewName("/WEB-INF/jsp/hello.jsp");
return mav;
}
}
4、 框架原理
5、拦截器
在拦截器处可以对处理方法进行预处理和后处理
1、自定义拦截器
spring框架提供了拦截器的接口(HandlerInterceptor)
public class FirstInterceptor implements HandlerInterceptor {
/**
* preHandle
*/
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("FirstInterceptor-preHandle方法执行中......");
return true;
}
/**
* postHandle
*/
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("FirstInterceptor-postHandle方法执行中......");
modelAndView.addObject("message", "拦截器方法postHandle");
}
/**
* afterCompletion
*/
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("FirstInterceptor-afterCompletion方法执行中......");
}
2、配置拦截器
<!-- 配置拦截器 -->
<mvc:interceptors>
<!-- 配置拦截器一 -->
<mvc:interceptor>
<!-- 配置拦截器的url规则,说明:
1.拦截单个url:/interceptor.do,表示拦截interceptor.do的请求
2.拦截多个url:/inter/**,表示拦截以/inter开始的所有请求
/inter/*=>/inter/hello.do
/inter/**=>/inter/hello.do,/inter/item/queryItem.do
-->
<mvc:mapping path="/interceptor.do"/>
<!-- 指定拦截器 -->
<bean class="cn.leiyuee.ssm.interceptor.FirstInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
3、拦截器方法作业
preHandle方法:在处理器方法执行前执行,在响应jsp页面前执行。执行的预处理。返回布尔类型的值。返回true,继续执行;返回false,终止执行。在企业项目中,在该方法实现判断用户是否登录,是否有权限操作资源的业务需求。
postHandle方法:在处理器方法执行后执行,在响应jsp页面前执行,执行后处理。在企业项目中,在该方法实现给页面设置公共的模型数据,比如:页面的公共头部信息和尾部信息。
afterCompletion方法:在处理器方法执行后执行,在jsp页面响应后执行,执行后处理。在企业项目中,在该方法实现记录用户操作日志业务需求。