前言
过了下SpringMVC,简单总结一下。
参考
B站学习视频:https://www.bilibili.com/video/BV1mE411X7yp
Spring整合MyBatis:https://www.cnblogs.com/best/p/5648740.html#_label5
知识点
一. 基本概念
1.1 三层架构
- 表现层:即web层,负责接收客户端请求,向客户端返回响应结果。通常客户端通过http协议请求web层,web需要接受http请求并完成http响应。表现层包括展示层和控制层,展示层负责结果的展示(前端),控制层负责接收请求(servlet)。
MVC是表现层的常用设计模型,SpringMVC是MVC模型的一个具体的实现框架
- 业务层:即service层,负责业务逻辑处理,与开发需求息息相关,web层依赖业务层,但业务层不依赖web层。(业务层在业务处理的时候可能会依赖持久层,如果要对数据持久化需要保证事务一致性,即事务应该放到业务层进行控制)
- 持久层:即dao层,负责数据持久化,包括数据层即数据库和数据访问层。数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中(即持久层就是与数据库交互,对数据库进行CURD操作的)
1.2 MVC
MVC:Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种用于设计创建web应用程序表现层的模式。
- 模型Model:通常指数据模型,作用是封装数据(JavaBean实体类)
- 视图View:通常指jsp/html,作用是展示数据,视图一般是依据模型数据创建的(前端)
- 控制器Controller:应用程序中处理用户交互的部分,作用是处理程序逻辑。(controller层)
1.3 SpringMVC
SpringMVC是MVC模式中的一种框架(模式底下有各种框架适用于不同应用场景),适用于Spring框架,支持RESTful编程风格,运行效率快适用于现在大型的电商项目等对业务处理速度要求较高的场景。
SpringMVC是三层架构中的表现层的一个常用框架,负责接受浏览器传过来的请求参数,返回从业务层接收的响应结果给浏览器。包括数据封装对象(domain/entity及vo),视图(前端)和控制层(controller)。与业务层通过service交互,业务层通过dao和持久层交互。
1.4 SpringMVC的优势
1.5 SpringMVC与Struts2的区别
ONGL:Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言,让你通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方法,遍历整个对象的结构图,实现字段类型转换等功能。
JSTL:Java server pages standarded tag library,即JSP标准标签库。是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。
二. 简单入门
简单的给一个场景,完成SpringMVC框架的作用:将浏览器通过前端传来的请求发送给后台,并将后台传来的响应通过前端传到浏览器上。
2.1 使用IDEA创建一个maven项目,选择原型webapp
2.2 配置pom.xml
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<!-- 版本锁定 -->
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<!-- spring依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<!-- 使用既定的版本 -->
<version>${spring.version}</version>
</dependency>
<!-- spring web依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring mvc依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- servlet依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!-- servlet-jsp依赖 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
2.3 在web.xml中配置前端控制器dispatcherServlet
2.4 在resources目录下配置springmvc.xml
2.5 部署tomcat服务器
2.6 编写起始页面index.jsp
2.7 编写controller层
2.8 配置springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引用的名称和对象 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 开启注解扫描 -->
<context:component-scan base-package="com.practice"></context:component-scan>
<!-- 视图解析器 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 文件的前缀,一般为路径 -->
<property name="prefix" value="/WEB-INF/pages/"></property>
<!-- 文件名的后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 开启springmvc框架注解的支持,替代处理器映射器和处理器适配器 -->
<mvc:annotation-driven/>
</beans>
2.9 配置web.xml,加载springmvc.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- 前端控制器 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- dispatcherServlet前端控制器加载后,会加载springmvc.xml,然后配置文件中会加载扫描注解创建bean对象
(如果没有这一步的话,就算有springmvc.xml可以开启注解扫描,但是这个xml本身没有被加载,所以不会生效,即项目中所有的注解不生效 -->
<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>/</url-pattern>
</servlet-mapping>
</web-app>
2.10 编写响应页面success.jsp
2.11 测试,在index.jsp页面中点击超链接,进入success.jsp页面。即点击页面将访问success.jsp的请求通过springmvc框架(dispatcherServlet控制中心)传递到controller层,controller根据链接调用方法(视图解析器对象),跳转success.jsp页面(发送响应给浏览器)
2.12 使用到组件介绍
- 前端控制器DispatcherServlet
- 处理器映射器HandlerMapping即Controller的注解配置等
- 处理器Handler即Controller
- 处理器适配器HandlerAdapter(对于不同的请求使用不同的controller)