目录
一、Spring Boot 的Web开发
1. 静态资源映射规则
2. enjoy模板引擎
二、springMVC
1. springMVC-请求处理
测试:
以post方式请求
限制请求携带的参数
@GetMapping 查询
@PostMapping 新增
@DeleteMapping删除
@PutMapping 修改
2. springMVC-参数绑定
2.1 基本类型和 String 类型作为参数
单个参数
多个参数
2.2 POJO 类型作为参数
单一对象
对象嵌套
@RequestParam
2.3 POJO 类中包含集合类型参数
2.4 使用 ServletAPI 对象作为方法参数
3. springMVC-常用注解
3.1 @RequestParam
name属性
多个参数
defaultValue属性:设置默认值
不传参数
3.2 @RequestBody
3.3 @PathVariable
restFul
3.4 @RequestHeader
3.5 @CookieValue
4.springMVC-数据传递
4.1 字符串
充当试图的逻辑名称,默认页面跳转为请求转发方式
作充当一次请求重定向
作充当一次请求转发
通过session传入数据
4.2 json
一、Spring Boot 的Web开发
1. 静态资源映射规则
帮助文档
总结:只要静态资源放在类路径下:
called /static (or /public or /resources or //METAINF/resources
即 放在 static 下就行
访问 : 当前项目根路径/ + 静态资源名
springboot只需要将图片放在 static 下 就可以了
2. enjoy模板引擎
- 1.将页面保存在templates目录下
- 2.添加坐标
<dependency> <groupId>com.jfinal</groupId> <artifactId>enjoy</artifactId> <version>5.0.3</version> </dependency>
- 3.开启配置
在configure包下 新建配置类 官网可以复制
@Configuration public class SpringBootConfig { @Bean(name = "jfinalViewResolver") public JFinalViewResolver getJFinalViewResolver() { // 创建用于整合 spring boot 的 ViewResolver 扩展对象 JFinalViewResolver jfr = new JFinalViewResolver(); // 对 spring boot 进行配置 jfr.setSuffix(".html"); jfr.setContentType("text/html;charset=UTF-8"); jfr.setOrder(0); // 设置在模板中可通过 #(session.value) 访问 session 中的数据 jfr.setSessionInView(true); // 获取 engine 对象,对 enjoy 模板引擎进行配置,配置方式与前面章节完全一样 Engine engine = JFinalViewResolver.engine; // 热加载配置能对后续配置产生影响,需要放在最前面 engine.setDevMode(true); // 使用 ClassPathSourceFactory 从 class path 与 jar 包中加载模板文件 engine.setToClassPathSourceFactory(); // 在使用 ClassPathSourceFactory 时要使用 setBaseTemplatePath // 代替 jfr.setPrefix("/view/") engine.setBaseTemplatePath("/templates/"); // 更多配置与前面章节完全一样 // engine.addDirective(...) // engine.addSharedMethod(...); return jfr; } }
- 4.编写代码
@Controller @RequestMapping("user") public class UserController { /** * *@RequestMapping * 意义:处理用户的请求,相似于doget与dopost * 位置: * 类上:一级目录 * 方法:二级目录 * 例如:user/save * user/delete * student/save * student/delete * 属性: * value = "",path = "" * 表示请求路径 * ========================= * method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式 * ========================= * params = "" * 限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数 * * 注意:1.超链接默认发送的是get请求 * 2.所有请求所携带的参数格式均为:key = value * * @DeleteMapping删除 * @PutMapping 修改 * @GetMapping 查询 * @PostMapping 新增 * * @RequestMapping可以点击查看源码 * @Target({ElementType.METHOD, ElementType.TYPE}) * METHOD==代表修饰方法,TYPE==代表修饰类 * */ @RequestMapping(value = "/init")//二级目录 public String userInit(){ System.out.println("==========进入了springMVC的控制器========="); System.out.println("调用业务层,调用持久层"); return "success";//返回方法执行完要跳转的页面名称 } }
加坐标 写配置类
在templates 下有success.html
不加 responseboding
二、springMVC
- 1.请求处理
- 2.参数绑定
- 3.常用注解
- 4.数据传递
- 5.文件上传
1. springMVC-请求处理
@RequestMapping
- 意义:处理用户的请求,相似于doget与dopost
- 位置:
- 类上:一级目录
- 方法:二级目录
例如:
- user/save
- user/delete
- student/save
- student/delete
属性:
- value = "",path = "" 表示请求路径
- method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式
- params = ""限制请求参数, 例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数
注意:
- 1.超链接默认发送的是get请求
- 2.所有请求所携带的参数格式均为:key = value
还有这些请求
@GetMapping 查询
@PostMapping 新增
@PutMapping 修改
@DeleteMapping删除
@RequestMapping可以点击查看源码
@Target({ElementType.METHOD, ElementType.TYPE})
METHOD==代表修饰方法,TYPE==代表修饰类、浏览器默认 get
post 跳转不了
测试:
准备工作
1.下载postman
使用postman测试
故 新建一个文件夹 然后新建一个测试
2. 使用上面的success.html作为返回页面
以post方式请求
@Controller @RequestMapping("user") public class UserController { /** * *@RequestMapping * 意义:处理用户的请求,相似于doget与dopost * 位置: * 类上:一级目录 * 方法:二级目录 * 例如:user/save * user/delete * student/save * student/delete * 属性: * value = "",path = "" * 表示请求路径 * ========================= * method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式 * ========================= * params = "" * 限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数 * * 注意:1.超链接默认发送的是get请求 * 2.所有请求所携带的参数格式均为:key = value * * @DeleteMapping删除 * @PutMapping 修改 * @GetMapping 查询 * @PostMapping 新增 * * @RequestMapping可以点击查看源码 * @Target({ElementType.METHOD, ElementType.TYPE}) * METHOD==代表修饰方法,TYPE==代表修饰类 * */ @RequestMapping(value="/init")//二级目录 public String userInit(){ System.out.println("==========进入了springMVC的控制器========="); System.out.println("调用业务层,调用持久层"); return "success";//返回方法执行完要跳转的页面名称 } @RequestMapping(value="/show1",method ={RequestMethod.POST}) public String show1(){ System.out.println("==========进入了springMVC的控制器========="); System.out.println("使用post方式发送请求进入"); return "success";//返回方法执行完要跳转的页面名称 } }
输入url
限制请求携带的参数
@RequestMapping(value = "/show2",params = {"msg1=aa","msg2=bb"}) public String show2(){ System.out.println("==========进入了springMVC的控制器========="); System.out.println("限制请求携带的参数"); return "success";//返回方法执行完要跳转的页面名称 }
设置参数
@GetMapping 查询
//使用postman测试 @GetMapping("/show3") public String show3(){ System.out.println("==========进入了springMVC的控制器========="); System.out.println("必须使用get方式请求"); return "success";//返回方法执行完要跳转的页面名称 }
@PostMapping 新增
@PostMapping("/show4") public String show4(){ System.out.println("==========进入了springMVC的控制器========="); System.out.println("必须使用post方式请求"); return "success";//返回方法执行完要跳转的页面名称 }
@DeleteMapping删除
@DeleteMapping("/show5") public String show5(){ System.out.println("==========进入了springMVC的控制器========="); System.out.println("必须使用delete方式请求"); return "success";//返回方法执行完要跳转的页面名称 }
@PutMapping 修改
@PutMapping("/show6") public String show6(){ System.out.println("==========进入了springMVC的控制器========="); System.out.println("必须使用put方式请求"); return "success";//返回方法执行完要跳转的页面名称 }
2. springMVC-参数绑定
springMVC请求参数的绑定
绑定的机制:SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的
支持数据类型:
1.基本类型参数:
包括基本类型和 String 类型
2.POJO类型参数:
包括实体类,以及关联的实体类
3.数组和集合类型参数:
包括 List 结构和 Map 结构的集合(包括数组)
4.使用 ServletAPI 对象作为方法参数
HttpServletRequest
HttpServletResponse
HttpSession
java.security.Principal
Locale
InputStream
OutputStream
Reader
Writer
使用要求
- 1.发送请求中携带数据的key与方法参数的name必须一致
- 2.数据类型合法
测试 准备工作
在pojo 下创建俩实体类
public class Dep implements Serializable { private int did; private String dname; //依赖员工集合 private List<Emp> mylist; private Map<String, Emp> myMap; set get tostring.. }
public class Emp { private int eid; private String ename; private String esex; //emp依赖的dep对象 private Dep dept; set get tostring.. }
templates 下创建页面
one.html
<!DOCTYPE html> <html lang="cn" xmlns:th="http://www.thymeleaf.org"> <head> <title>Title</title> </head> <body> <h1>springMVC控制器方法参数作用:接受用户请求中的数据</h1> <hr/> <h3>基本类型和 String 类型作为参数</h3> <a href="/one/show1?msg1=9527">发送请求1</a> <a href="/one/show2?msg1=jdk&msg2=9527">发送请求2</a> <h3>POJO 类型作为参数</h3> <a href="/one/show3?eid=1&ename=郭凡&esex=小奶狗">发送请求3</a> <form action="/one/show4" method="post"> 员工编号:<input type="text" name="eid" ><br/> 员工姓名:<input type="text" name="ename" ><br/> 员工性别:<input type="text" name="esex" ><br/> 部门编号:<input type="text" name="dept.did" ><br/> 部门名称:<input type="text" name="dept.dname" ><br/> <input type="submit" value="发送请求4"/> </form> <form action="/one/map" method="post"> 员工编号:<input type="text" name="eids"><br/> 员工姓名:<input type="text" name="enames"><br/> 员工性别:<input type="text" name="esexs"><br/> <input type="submit" value="发送请求4(map)"/> </form> <h3>POJO 类中包含集合类型参数</h3> <form action="/one/show5" method="post"> 部门编号:<input type="text" name="did" ><br/> 部门名称:<input type="text" name="dname" ><br/> 员工编号1:<input type="text" name="mylist[0].eid" ><br/> 员工姓名1:<input type="text" name="mylist[0].ename" ><br/> 员工性别1:<input type="text" name="mylist[0].esex" ><br/> 员工编号2:<input type="text" name="mylist[1].eid" ><br/> 员工姓名2:<input type="text" name="mylist[1].ename" ><br/> 员工性别2:<input type="text" name="mylist[1].esex" ><br/> 员工编号3:<input type="text" name="myMap['one'].eid" ><br/> 员工姓名3:<input type="text" name="myMap['one'].ename" ><br/> 员工性别3:<input type="text" name="myMap['one'].esex" ><br/> 员工编号4:<input type="text" name="myMap['two'].eid" ><br/> 员工姓名4:<input type="text" name="myMap['two'].ename" ><br/> 员工性别4:<input type="text" name="myMap['two'].esex" ><br/> <input type="submit" value="发送请求5"/> </form> <a href="/one/show6?nums=123&nums=456&nums=789">发送请求6</a> <h3>使用 ServletAPI 对象作为方法参数</h3> <a href="/one/show7">发送请求7</a> </body> </html>
success.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>success zkt</h1> </body> </html>
配置类同上
2.1 基本类型和 String 类型作为参数
controller
单个参数
/** * springMVC请求参数的绑定 * 绑定的机制:SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的 * * 一.支持数据类型: * 1.基本类型参数: * 包括基本类型和 String 类型 * 2.POJO类型参数: * 包括实体类,以及关联的实体类 * 3.数组和集合类型参数: * 包括 List 结构和 Map 结构的集合(包括数组) * 4.使用 ServletAPI 对象作为方法参数 * HttpServletRequest * HttpServletResponse * HttpSession * java.security.Principal * Locale * InputStream * OutputStream * Reader * Writer * * 二.使用要求 * 1.发送请求中携带数据的key与方法参数的name必须一致 * 2.数据类型合法 * * */ @Controller @RequestMapping("/one") public class OneController { /** * 进入one.html页面 * */ @RequestMapping("/show") public String show(){ return "one"; } /***********************基本类型和 String 类型作为参数*********************************/ @RequestMapping("/show1") public String show1(String msg1){ System.out.println("=====接受到用户发送数据为:"+msg1+"======="); return "success"; } }
输入http://localhost:8080/one/show
进入主页面
点击发送请求一
测试结果:
多个参数
@RequestMapping("/show2") public String show2(String msg1,int msg2){ System.out.println("=====接受到用户发送数据为:"+msg1+"======="); System.out.println("=====接受到用户发送数据为:"+msg2+"======="); return "success"; }
点击发送请求二
测试结果
2.2 POJO 类型作为参数
单一对象
/***********************POJO 类型作为参数*********************************/ //单一对象 @RequestMapping("/show3") public String show3(Emp emp){ System.out.println("=====接受到用户发送数据为:"+emp+"======="); return "success"; }
点击发送请求3
测试结果
对象嵌套
//对象嵌套 @RequestMapping("/show4") public String show4(Emp emp){ System.out.println("=====接受到用户发送数据为:"+emp+"======="); return "success"; }
点击发送请求4
测试结果
@RequestParam
//@RequestParam @RequestMapping("/map") public String map(@RequestParam Map map){ System.out.println(map); return "success"; }
点击发送请求4(map)
测试结果:
2.3 POJO 类中包含集合类型参数
/*********************POJO 类中包含集合类型参数*********************************/ @RequestMapping("/show5") public String show5(Dep dep){ System.out.println("=====接受到用户发送数据为:"+dep+"======="); return "success"; }
点击发送请求5
测试结果:
@RequestMapping("/show6") public String show6(int[] nums){ System.out.println("=====接受到用户发送数据为:"+ Arrays.toString(nums) +"======="); return "success"; }
点击发送请求6
测试结果:
2.4 使用 ServletAPI 对象作为方法参数
/*********************使用 ServletAPI 对象作为方法参数*********************************/ @RequestMapping("/show7") public String show7(HttpServletRequest request, HttpServletResponse response){ System.out.println(request); System.out.println(response); request.getParameter("msg1"); HttpSession session = request.getSession(); System.out.println(session); // session.setAttribute("",""); // try { // response.sendRedirect("重定向"); // } catch (IOException e) { // e.printStackTrace(); // } ServletContext application = session.getServletContext(); return "success"; }
点击发送请求7
测试结果:
3. springMVC-常用注解
3.1 @RequestParam
作用:
- 把请求中指定名称的参数给控制器中的形参赋值。
- 如果页面标签名称和方法参数名称不一致,可以使用此注解实现
属性:
- name属性:设置参数名称
- defaultValue属性:设置默认值
- required属性:设置是否为必传
测试:
name属性
/** * springMVC常用注解 * * 一.@RequestParam * 作用: * 把请求中指定名称的参数给控制器中的形参赋值。 * 如果页面标签名称和方法参数名称不一致,可以使用此注解实现 * 属性: * name属性:设置参数名称 * defaultValue属性:设置默认值 * required属性:设置是否为必传 * * 二.@RequestBody * 作用: * 用于获取"请求体"内容。直接使用得到是 key=value&key=value... * 结构的数据,并可以转换为对象 * 属性: * required:是否必须有请求体。默认值是:true。 * * * * 三.@PathVaribale * 作用: * 用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id}, * 这个{id}就是 url 占位符。url 支持占位符是 spring3.0 之 * 后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志 * 属性: * value:用于指定 url 中占位符名称。 * required:是否必须提供占位符。 * * Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。 * 主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次, * 更易于实现缓存机制等。 * * Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下: * GET:用于获取资源 * POST:用于新建资源 * PUT:用于更新资源 * DELETE:用于删除资源 * 例如: * /users/1 GET : 得到 id = 1 的 user * /users/1 DELETE: 删除 id = 1 的 user * /users/1/新名/新性 PUT: 更新 id = 1 的 user * /users/新名/新性 POST: 新增 user * * */ @Controller @RequestMapping("/one") public class OneController { /** * @RequestParam("名称必须与页面标签或者url地址key名称一致") * */ @RequestMapping("/show1") public String show1(@RequestParam(name="msg1") String msg){ System.out.println("=====接受到用户发送数据为:"+msg+"======="); return "success"; } }
使用postman测试
多个参数
@RequestMapping("/show2") public String show2(@RequestParam("msg1") String msg, @RequestParam("msg2") int num){ System.out.println("=====接受到用户发送数据为:"+msg+"======="); System.out.println("=====接受到用户发送数据为:"+num+"======="); return "success"; }
defaultValue属性:设置默认值
@RequestMapping("/show3") public String show4(@RequestParam(name = "uname",defaultValue = "暂无用户") String name){ System.out.println("账号:"+name); return "success"; }
不传参数
@RequestMapping("/test") public String test(@RequestParam String name){ System.out.println("账号:"+name); return "success"; }
3.2 @RequestBody
作用:
- 用于获取"请求体"内容。直接使用得到是 key=value&key=value...
- 结构的数据,并可以转换为对象
属性:
required:是否必须有请求体。默认值是:true。测试:
/** * 前后端分离 * @RequestBody可以将json ===》 javaBean * 注意: * 1.前端不能使用GET方式提交数据,GET方式无请求体 * { * "eid":007, * "ename":"詹姆斯邦德", * "esex":"绅士" * } * * * */ @RequestMapping("/show4") public String show4(@RequestBody Emp emp){ System.out.println("=========="+emp+"=========="); return "success"; }
3.3 @PathVariable
作用:
- 用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},
- 这个{id}就是 url 占位符。url 支持占位符是 spring3.0 之后加入的,是 springmvc 支持 rest 风格 URL 的一个重要标志
属性:
- value:用于指定 url 中占位符名称。
- required:是否必须提供占位符。
@PostMapping("/show5/{uname}/{pwd}") public String show5(@PathVariable("uname") String msg1, @PathVariable("pwd") String msg2){ System.out.println(msg1); System.out.println(msg2); return "success"; }
简写
@PostMapping("/show6/{uname}/{pwd}") public String show6(@PathVariable String uname, @PathVariable String pwd){ System.out.println(uname); System.out.println(pwd); return "success"; }
restFul
Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,
更易于实现缓存机制等。
Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:
- GET:用于获取资源
- POST:用于新建资源
- PUT:用于更新资源
- DELETE:用于删除资源
例如:
- /users/1 GET : 得到 id = 1 的 user
- /users/1 DELETE: 删除 id = 1 的 user
- /users/1/新名/新性 PUT: 更新 id = 1 的 user
- /users/新名/新性 POST: 新增 user
3.4 @RequestHeader
作用:用于获取请求消息头。
属性:
- value:提供消息头名称
- required:是否必须有此消息头
测试:
/** * 获取头信息 * 只获取头信息中的Accept-Language对应的数据(记得使用浏览器测试) */ @RequestMapping("/show7") public String show7(@RequestHeader(value = "msg1") String msg) { System.out.println(msg); return "success"; }
3.5 @CookieValue
作用:用于把指定 cookie 名称的值传入控制器方法参数。
属性:
- value:指定 cookie 的名称。
- required:是否必须有此 cookie
测试:
/** * 获取cookie */ @RequestMapping("/show8") public String show8(@CookieValue(value = "JSESSIONID", required = false) String jsessionid) { System.out.println(jsessionid); return "success"; }
4.springMVC-数据传递
4.1 字符串
准备工作
index.html
<!DOCTYPE html> <html lang="cn"> <head> <title>Title</title> </head> <body> <h3>springMVC控制器返回字符串</h3> <a href="/string/show1">发送请求1</a><br/> <a href="/string/show2">发送请求2</a><br/> <a href="/string/show3">发送请求3</a><br/> <a href="/string/show4">发送请求4</a><br/> <hr/> <h3>springMVC控制器返回json字符串</h3> <a href="/json/show1">发送请求1</a><br/> <a href="/json/show2">发送请求2</a><br/> </body> </html>
success_String.html
注意 测试123的适合将span标签删掉 要不然会报错
<html lang="cn"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>返回值String成功页面</h1> <!-- <span>#(session.emp.eid)</span>--> <!-- <span>#(session.emp.ename)</span>--> <!-- <span>#(session.emp.esex)</span><br/>--> </body> </html>
主页面
充当试图的逻辑名称,默认页面跳转为请求转发方式
/** * 返回值为:字符串 * */ @Controller @RequestMapping("/string") public class StringController_01 { /** * 进入首页 * */ @RequestMapping("/show") public String show(){ return "index"; } /* * 充当试图的逻辑名称,默认页面跳转为请求转发方式 * */ @RequestMapping("/show1") public String show1(){ System.out.println("=========show1========="); return "success_String"; } }
作充当一次请求重定向
/* * 作充当一次请求转发或重定向 * */ @RequestMapping("/show2") public String show2(){ System.out.println("=========show2========="); return "redirect:show1"; }
作充当一次请求转发
@RequestMapping("/show3") public String show3(){ System.out.println("=========show3========="); return "forward:show1"; }
通过session传入数据
@RequestMapping("/show4") public String show4(HttpServletRequest request){ System.out.println("=========show4========="); //1.查询数据库(模拟) Emp emp = new Emp(1,"张毅老师","男"); //2.获取session request.getSession().setAttribute("emp",emp); return "success_String"; }
恢复span标签
4.2 json
@Controller @RequestMapping("/json") public class JsonController_02 { /** * * @ResponseBody 对象====>json * 位置:1.类 * 2.方法 * * * @RequestBody json====>对象 * 位置:方法参数 * * @RestController = @Controller + @ResponseBody * * */ @RequestMapping("/show1") @ResponseBody public List<Emp> show1(){ //1模拟数据库 Emp emp1 = new Emp(1,"张毅老师","男"); Emp emp2 = new Emp(2,"张毅老师","男"); Emp emp3 = new Emp(3,"张毅老师","男"); List<Emp> list = new ArrayList<>(); list.add(emp1); list.add(emp2); list.add(emp3); return list; } }
打印hello world
@RequestMapping("/show2") @ResponseBody public String show2(){ return "helloWorld"; }