SpringMVC
SpringMVC框架第一天
第一章:三层架构和MVC 1. 三层架构
1. 咱们开发服务器端程序,一般都基于两种形式,一种C/S架构程序,一种B/S架构程序 2. 使用Java语言基本上都是开发B/S架构的程序,B/S架构又分成了三层架构 3. 三层架构
2. MVC模型
1. MVC全名是Model View Controller 模型视图控制器,每个部分各司其职。 2. Model:数据模型,JavaBean的类,用来进行数据封装。 3. View:指JSP、HTML用来展示数据给用户 4. Controller:用来接收用户的请求,整个流程的控制器。用来进行数据校验等。
第二章:SpringMVC的入门案例 1.SpringMVC的概述(查看大纲文档)
三层架构中,每一层各司其职,接下来我们就说说每层都负责哪些方面: 表现层: 也就是我们常说的web层。它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web 层,web 需要接收 http 请求,完成 http 响应。表现层包括展示层和控制层:控制层负责接收请求,展示层 负责结果的展示。表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客 户端。表现层的设计一般都使用 MVC 模型。(MVC 是表现层的设计模型,和其他层没有关系) 业务层: 也就是我们常说的 service 层。它负责业务逻辑处理,和我们开发项目的需求息息相关。web 层依赖业务 层,但是业务层不依赖 web 层。业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致 性。(也就是我们说的,事务应该放到业务层来控制) 持久层: 也就是我们是常说的 dao 层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行 持久化的载体,数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。 通俗的讲,持久层就是和数据库交互,对数据库表进行曾删改查的。
1 2 3
4 5
6 7
MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是 一种用于设计创建 Web 应用程序表现层的模式。MVC 中每个部分各司其职: Model(模型): 通常指的就是我们的数据模型。作用一般情况下用于封装数据。 View(视图): 通常指的就是我们的 jsp 或者 html。作用一般就是展示数据的。通常视图是依据模型数据创建的。 Controller(控制器): 是应用程序中处理用户交互的部分。作用一般就是处理程序逻辑的.
第一章:响应数据和结果视图
1.Map,Model,ModelMap 隐形参数的作用和关系(重点)
-
使用Map传递页面数据
-
使用Model传递页面数据
-
使用ModelMap传递页面数据
总结:以上三个隐形参数传过来的是同一个实现类对象:BindingAwareModelMap,底层都会把键值对数据放到request作用域中.
2. 返回值分类
-
返回字符串
-
Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析为物理视图的地址。(返回字符串都会交给视图解析器来进行解析)
public String saveStudent(Student stu) {
System.out.println(stu);
// 编写控制逻辑
return "success";
}
-
-
返回值为void,也会经过视图解析器,只能逻辑视图名时url的名字
-
使用request转向页面
-
总结:使用request进行页面的转发是不会经过视图解析器的
-
-
使用response重定向页面
总结:使用重定向进行页面的跳转是不会经过视图解析器的
-
使用response获得输出流输出页面内容
总结:通过输出流进行页面内容输出是不会经过视图解析器的
-
返回值ModelAndView(重点)--即绑定数据模型,又绑定逻辑视图名
3.重定向和转发
-
转发
-
重定向
4.ResponseBody响应json数据
-
DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而 不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置
-
mvc:resources标签配置不过滤
-
location元素表示webapp目录下的包下的所有文件
-
mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b
<!-- 设置静态资源不过滤 -->
<mvc:resources location="/css/" mapping="/css/**"/> <!-- 样式 -->
<mvc:resources location="/images/" mapping="/images/**"/> <!-- 图片 -->
<mvc:resources location="/js/" mapping="/js/**"/> <!-- javascript -->
-
-
-
使用@RequestBody获取请求体数据
$(function(){
$("#btn_send").click(function(){
$.ajax({
"url":"student/show",
"contentType":"application/json;charset=UTF-8",
"data":JSON.stringify({"id":$("#id").val(),"name":$("#name").val(),"age":$("#age").val(),"address":$("#address").val()}),
"dataType":"json",
"type":"post",
"success":function(data){
alert(data);
}
});
})
})
注意点: ajax发送过去的是json格式的字符串,不能直接json对象传递,可以使用JSON.stringify(json对象)来进行转换成字符串
-
使用@RequestBody注解把json的字符串转换成JavaBean的对象
-
使用@ResponseBody注解把JavaBean对象转换成json字符串,直接响应
5.json字符串和JavaBean对象互相转换的过程中,需要使用jackson的jar包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
6.SpringMVC实现文件上传
-
导入jar包
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency> -
编写页面
<form action="user/upload" method="post" enctype="multipart/form-data">
<input type="file" name="upload">
<button type="submit" id="btn_send">上传</button>
</form> -
控制器方法的实现
package com.hwua.controller;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;