SpringMVC
概述
SpringMVC是Spring 为表现层提供的基于 MVC 设计理念的优秀的 Web 框架,是目前最主流的 MVC 框架之一 。
Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架。 Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口。
支持 REST 风格的 URL 请求采用了松散耦合可插拔组件结构(侵入性比较低),比其他 MVC 框架更具• 扩展性和灵活性。
MVC 与 REST简介
记录SpringMVC之前,先来记录一下MVC和REST有关知识,了解了这个之后,再学习SpringMVC会更加的得心应手。
MVC
Model-View-Controller(模型-视图-控制器),一种软件设计模式,是一种业务逻辑和数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
- Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。 - View(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。 - Controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
三层架构
因为在学习MVC的时候经常听老师提到三层架构,以前学习JSP和Servlet的时候,是从三层架构出发编写程序的,所以我就有些迷惑,就去搜索了一下,在此记录一下它们之间的区别。
通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了高内聚低耦合的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。
开头就提到了MVC是表现层的框架,严格来说这三个加起来才是三层架构中的UI层,也就是说,MVC再次对UI层进行分化,控制器通过实体(数据模型)和数据访问层通信,通过视图与业务逻辑层通信,也可以通过视图直接与数据访问层进行通信。
REST
REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
rest设计原则
- 客户端-服务器:通过将用户UI与数据存储分开,我们可以简化服务器组件来提高跨多个平台的用户界面的可移植性并提高可伸缩性。 它可以比表现成前后端分离的思想。
- 无状态:从客户端到服务器的每个请求都必须包含理解请求所需的所有信息,并且不能利用服务器上任何存储的上下文。 这表示你应该尽可能的避免使用session,由客户端自己标识会话状态(最常见的做法则是使用token)。
- 规范接口:REST接口约束定义:资源识别; 请求动作; 响应信息; 它表示通过uri标出你要操作的资源,通过请求动作(http method)标识要执行的操作,通过返回的状态码来表示这次请求的执行结果。
- 可缓存: 缓存约束要求将对请求的响应中的数据隐式或显式标记为可缓存或不可缓存。如果响应是可缓存的,则客户端缓存有权重用该响应数据以用于以后的等效请求。 它表示get请求响应头中应该表示有是否可缓存的头(Cache-Control)
uri规范
资源的描述构成了uri,它一般有以下约束:
-
使用名词
-
http method对应不同的请求动作(数据库或者业务逻辑)
GET:查询操作
POST:新增操作
PUT: 更新操作(代表更新一个实体的所有属性)
PATCH :部分更新(代表更新一个尸体的部分属性)由于有的浏览器兼容性问题,一般推荐使用put
DELETE 删除操作 -
使用连字符( - )而不是(_)来提高URI的可读性
-
在URI中使用小写字母
-
不要使用文件扩展名 文件扩展名看起来很糟糕,不会增加任何优势。删除它们也会减少URI的长度。没理由保留它们。
-
使用查询组件过滤URI集合
很多时候,我们会遇到需要根据某些特定资源属性对需要排序,过滤或限制的资源集合的要求。为此,请不要创建新的API - 而是在资源集合API中启用排序,过滤和分页功能,并将输入参数作为查询参数传递. -
不要在末尾使用/
作为URI路径中的最后一个字符,正斜杠(/)不会添加语义值,并可能导致混淆。最好完全放弃它们。 -
使用http状态码定义api执行结果
1xx:信息
通信传输协议级信息。
2xx:成功
表示客户端的请求已成功接受。
3xx:重定向
表示客户端必须执行一些其他操作才能完成其请求。
4xx:客户端错误
此类错误状态代码指向客户端。
5xx:服务器错误
服务器负责这些错误状态代码。
其实restful就是用来规范我们的api的一种约束。
初识SpringMVC:HelloWorld
SpringMVC的使用其实非常简单。
-
加入jar包
使用 maven 的话就不用这么麻烦了,要用到什么,去依赖库里搜索一下要配置的依赖,选择想要的版本,将依赖复制粘贴即可。附maven依赖的网站:https://mvnrepository.com/
-
在 web.xml 中配置 DispatcherServlet:启动 WEB 层 的 Spring 容器。
<!-- 配置 DispatcherServlet -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置 DispathcerServlet 的一个初始化参数:配置 SpringMVC 的配置文件的位置和名称 -->
<!-- 实际上也可以不通过 contextConfigLocation 来配置 SpringMVC 配置文件,而使用默认的。
默认的配置文件为:/WEB-INF/<servlet-name>-servlet.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- DispatcherServlet是前端控制器,提供Spring Web MVC的集中访问点,负责职责的分派,将拦截到的请求根据相应的规则发给对应的 Controller 处理-->
<servlet-mapping>
<!-- 学过servlet的人应该知道,这个servlet-mapping是用来给某个servlet配置映射处理请求规则的-->
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
- 加入Spring MVC 的配置文件
<!-- 配置自动扫描的包 -->
<context:component-scan base-package="com.qlgydx.springmvc"></context:component-scan>
这是要将我们的@Controller注解的类交给IOC容器处理,注意这里启动的是SpringMVC的Web容器。
<!-- 配置视图解析器: 如何把 handler 方法返回值解析为实际的物理视图 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
- 编写处理请求的处理器,并标识为处理器
@Controller
public class HelloWorld {
/**
* 1. 使用 @RequestMapping 注解来映射请求的 URL
* 2. 返回值会通过视图解析器解释为实际的物理视图,对于 InternalResourceViewResolver 视图解析器,会做如下的解析:
* 通过 prefix + returnVal + 后缀 这样的方式得到实际的物理视图,然后做转发操作
*
* /WEB-INF/views/success.jsp
*
* @return
*/
@RequestMapping("/helloworld")
public String hello() {
System.out.println("hello world!");
return "success";
}
}
- 编写视图(这里我用的jsp页面)
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
<h4>Success Page</h4>
</body>
</html>
然后启动服务器,我使用的是Tomcat(写到这里我才想起来,SpringMVC是要用到Tomcat的,以后再把Tomcat的笔记补一下),在浏览器中输入http://localhost:8080/helloworld,就可以看到success页面会成功返回。因为是学习笔记,方便我复习用,不是框架讲解,所以我只记录下来的是知识点,一些细节我没有完全记录,如果要看所有细节的,建议看视频。
转载:https://blog.csdn.net/yue_xx/article/details/105230810