1.SpringMvc框架简介
1.1.Mvc概念
M:Model 模型 (模型层:业务逻辑层+数据库访问层)
V:view 视图( JSP(翻译java--->编译class----->运行)、模板引擎:Themleaf、FreeMarker..)
C: Controller控制 (Servlet控制层)
1.2 SpringMvc简介
SpringMvc其实就是Spring框架其中的一个Web模块!Web相关的模块:封装了传统Servlet操作,让控制层开发起来更高效和简介!
SpringMvc是目前市场上最流行的控制层框架!早起Struts2,因为有安全漏洞现在过时!
SSH:Struts2(安全漏洞)+Spring+Hibernate
SSM: SpringMvc + Spring +MyBatis(MyBatis Plus)
2.SpringMvc框架搭建-HelloWorld
2.1.新建一个Web版本的Maven工程
2.2.导入SpringMvc Web开发依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.2</version>
</dependency>
<!--AOP面向切面编程-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.2</version>
</dependency>
<!--SpringMvc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.2</version>
</dependency>
<!-- servlet依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<!--Druid数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- MyBatis plus 包含了MyBatis-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.1.1</version>
</dependency>
<!--Spring-jdbc 整合MyBatis-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.2</version>
</dependency>
<!-- Spring测试模块和Junit4整合-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--面向切面编程依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.3.2</version>
</dependency>
<!-- 日志工具-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.22</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
</dependencies>
2.3. 配置一个SpringMvc中央控制器(本质是一个Servlet)
在Web-INF下的Web.xml文件下配置一个Servlet,用来接收和响应用户的请求
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--Web初始化参数-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring.xml</param-value>
</context-param>
<!--Springmvc乱码过滤器-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!---ContextLoaderListener:监听Web项目启动的事件:Web项目Spring框架随之启动-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--配置SpringMvc核心控制器-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--DispatcherServlet创建对象的时候,加载这个SpringMvc配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!--
Servlet 第一次发送请求,请求Servlet对象创建,创建一次,以后新的请求过来,公用Servlet对象,也就是说Servlet本质是单例的!
load-on-startup:调整Servlet创建对象的时机,服务器启动的时候就创建对象!
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<!--中央控制器访问地址:*.do,*.action,/ -->
<!-- 拦截所有带有/的路径请求(所有请求)
/index.jsp
公共资源:js/css/images 无需要拦截 在spring-mvc的第四步设置静态资源访问
/js/index.js
/css/index.css
/images/1.png
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
load-on-startup标签的作用
Servlet默认是第一次访问的时候创建对象,那么可以load-on-startup标签设置Servlet创建对象的时机:
如果<load-on-startup>负数</load-on-startup>,那么表示用户第一次请求就实例化对象
如果<load-on-startup>正整数</load-on-startup>,表示提前了Servlet创建对象的时机,是服务器启动的时候就创建!如果有多个Servlet,那么正整数越小优先级越高!
2.4. 创建SpringMvc.xml
<!--扫描控制器-->
<tx:component-scan base-package="com.ssm.controller"/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!--静态资源放行-->
<!-- <mvc:resources location="/images/" mapping="/images/**"/>-->
<!-- <mvc:resources location="/js/" mapping="/js/**"/>-->
<!--静态资源放行 把静态资源交给 tomcat默认的servet处理 SpringMvc不管!-->
<mvc:default-servlet-handler/>
<!--开启注解驱动-->
<mvc:annotation-driven/>
2.5.创建一个控制器
@Controller
public class IndexController {
/**
* 跳转Index
*/
@RequestMapping(value = "/")
public String toIndex(){
//默认转发
return "index";
}
}
2.6.创建一个JSP页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>SSM项目首页</title>
</head>
<body>
<a href="/student/list">学生列表</a></br>
<a href="/classes/list">班级列表</a></br>
<img src="/images/12345.jpg" width="400"/>
</body>
</html>
2.7.启动访问
3.HelloWorld基本流程(面试重点,记住了)
4.SpringMvc整合模板引擎-Thymeleaf模板引擎
简单说,Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎,它有如下三个极吸引人的特点:
n Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
n Thymeleaf 开箱即用的特性。它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能
4.1.导入Thymeleaf模板引擎依赖
<!-- thymeleaf模板 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
<version>3.0.9.RELEASE</version>
</dependency>
4.2. SpringMvc整合Thymeleaf模板
要将Thymeleaf 整合到springMvc中,只需将模板解析器实例和模板引擎实例以bean的方式配置到spring的配置文件中,让spring 容器自动管理模板解析器实例和模板引擎实例,和手动代码创建模板解析器实例和模板引擎实例原理是一样的。
<!--模板引擎解析器-->
<bean id="templateResolver"
class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
<!--视图前缀-->
<property name="prefix" value="/WEB-INF/templates/" />
<!--视图后缀-->
<property name="suffix" value=".html" />
<!--模板语法模式 HTML5-->
<property name="templateMode" value="HTML5" />
<!--模板引擎关闭缓存 开发方便 -->
<property name="cacheable" value="false" />
<!--编码-->
<property name="characterEncoding" value="UTF-8" />
</bean>
<!--模板引擎-->
<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver" />
</bean>
<!--Thymeleaf视图解析器-->
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine" />
<!-- 中文乱码问题 -->
<property name="characterEncoding" value="UTF-8"/>
</bean>