网站制作开发公司,公众号小程序制作流程,中小企业网站开发,wordpress文件扫描目录
SpringMVC 定义
MVC定义
创建SpringMVC项目
SpringMVC掌握功能
一、连接功能
RequestMapping(请求映射)
GetMapping 和 PostMapping
二、获取参数功能
传递单个参数/多个参数
注意点#xff1a;
RequestParam(前后端参数映射)
前后端参数映射
RequestParam特…目录
SpringMVC 定义
MVC定义
创建SpringMVC项目
SpringMVC掌握功能
一、连接功能
RequestMapping(请求映射)
GetMapping 和 PostMapping
二、获取参数功能
传递单个参数/多个参数
注意点
RequestParam(前后端参数映射)
前后端参数映射
RequestParam特性设置参数必传 RequestParam特性设置参数为非必传
传递对象
RequestBody 接收JSON对象
获取URL中参数PathVariable
上传文件RequestPart
获取Cookie/Session/header
CookieValue
RequestHeader
SessionAttribute
三、返回数据功能
返回静态页面
请求重定向和请求转发
请求重定向与请求转发区别
请求转发
请求重定向
前后端交互
使用form表单传递参数
使用ajax传递参数给后端 SpringMVC 定义
SpringMVC是一个Web框架基于Servlet的API构建的。
MVC定义
MVC是Model、View和Controller的缩写分别代表着模型 、视图和控制器。 Controller控制器是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据 控制⽤户输⼊并向模型发送数据。 Model模型是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库存取数据 View视图是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的 创建SpringMVC项目
SpringMVC 项目是基于SpringBoot项目创建的基础创建的
创建SpringBoot项目时候勾选SpringWeb即可创建SpringMVC项目。 SpringMVC掌握功能
1、连接功能用户浏览器端与项目程序建立连接即输入一个URL能够访问到我们的程序代码结果
2、获取参数功能后台程序能够获取到用户输入的参数前端传递
3、输出数据功能后台程序接收到用户访问所输入的数据经过业务逻辑的处理后需要将处理的数据结果传递给前端返回给用户。 一、连接功能 连接功能需要建立路由映射实现用户与程序之间的连接这里就需要使用到注解有RequestMapping(请求映射) RequestMapping(请求映射)
此注解可以实现路由映射通过输入一个URL来访问我们的项目程序。 RequestMapping 的最小请求单元是方法 。 因此使用该注解必须要添加在方法上。同时该注解也可以加在类上即一级目录加在方法上为二级目录 也可以直接修饰方法。 通常用户在获取我们程序结果的时候还需要搭配2个注解来配合RequestMapping来使用这两个注解就是: ResponseBody (告诉程序返回的是数据而不是前端页面) Controller (让框架启动的时候加载当前类只有加载的类才能被用户访问到) 这两个注解也可以使用一个组合注解RestController来代替 RestController ResponseBody Controller 示例代码如下
RequestMapping(/hello) // 一级路由目录
Controller // 让框架启动的时候加载当前类
ResponseBody //告诉程序返回的是数据而非页面
public class UrlSpringMVC {RequestMapping(/hi) // 二级路由目录public String func(){return 你好SpringMVC;}
} GetMapping 和 PostMapping RequestMapping注解既可以支持Get请求也支持Post请求 默认情况下仅支持Get请求 如果需要指定只支持Get请求或者只支持Post请求可以修改RequestMapping中的方法进行定义仅支持Get请求或者仅支持Post请求。
修改方法如下 RequestMapping(value /hi ,method RequestMethod.GET)
RequestMapping(value /he,method RequestMethod.POST) 方式二可以直接使用GetMapping 或者PostMapping
注意点GetMapping 和PostMapping 需要直接加载在方法上 GetMapping(/hi) PostMapping(/hi) 二、获取参数功能
传递单个参数/多个参数
用户从前端返回参数给后端后端接收用户输入的数据进行处理
RequestMapping(/hello) // 一级路由目录
Controller // 让框架加载的时候启动当前类
ResponseBody //告诉程序返回的是数据而非页面public class UrlSpringMVC {GetMapping(/hi)public String func(String name,String password){return 名字 name 密码 password;}
} 注意点
1后端接收参数是按照参数名称进行匹配的与参数顺序没有关系
示例如下 2后端在接收前端返回参数时需要用包装类进行接收防止前端没有传参数导致后端没有接收到参数而发生程序异常
(重要的事情说三遍使用包装类传递参数、使用包装类传递参数、使用包装类传递参数)
示例代码如下
RequestMapping(/hello) // 一级路由目录
Controller // 让框架加载的时候启动当前类
ResponseBody //告诉程序返回的是数据而非页面public class UrlSpringMVC {GetMapping(/hi)public String func(int number){return 前端传入参数number;}
}
情况一当前端正常返回参数后端使用基本数据类型接收传递的参数 情况二当前端没有传入参数时后端使用基本数据类型来接收传递参数此时导致后端没有收到参数而发生程序异常 解决方法后端接收参数使用包装类来接收参数防止前端没有传入参数 当前端没有传入参数时后端可以输出结果为null程序就不会发生异常了
修正代码运行
GetMapping(/hi)public String func(Integer number){ //使用包装类来接收传入参数return 前端传入参数number;} RequestParam(前后端参数映射)
前后端参数映射 有时候前段传递的参数key值与后端接收参数的key值不一样 就比如说前端传入两个数字key值使用的是number1、number2而后端接收数字的key值是number3和number4此时就会发生参数无法接收不到的情况了。 此时就需要使用注解RequestParam来进行前后端参数映射 RequestMapping(/m1)//前端传入参数key值是number1、number2后端接收参数key值是number3和number4//使用RequestParam 将number1映射成number3,将number2映射成number4public String test(RequestParam(number1) Integer number3,RequestParam(number2) Integer number4){return 后端接收参数number3为 number3 , number4: number4;}} RequestParam特性设置参数必传 查看源码可知RequestParam默认设置参数为必传如果前端没有传递参数时就会发生程序异常 RequestParam特性设置参数为非必传 在项目中我们传递的参数为非必要传递参数此时就需要对RequestParam 属性进行修改将required修改为false即可设置为参数为非必传 RequestMapping(/m1)public String test(RequestParam(valuenumber1,required false) Integer number3,RequestParam(value number2,required false) Integer number4){return 后端接收参数number3为 number3 , number4: number4;} 传递对象
定义对象代码
import lombok.Data;Data
public class Student {private int id;private String name;private String password;
}
后端返回参数代码 RequestMapping(/n1)public String people(Student student){return id号 student.getId() 姓名 student.getName() 密码 student.getPassword();} RequestBody 接收JSON对象
RequestBody可以用来接收前端传来的JSON对象用法与传递对象类似示例如下
注意RequestBody 必须要求是post映射
Data
public class Student {private int id;private String name;private String password;
}PostMapping(/n11) //RequestBody 必须要求是post映射public String method(RequestBody Student student){return student.toString();} 获取URL中参数PathVariable
使用PathVariable可以更加简洁的从URL获取参数 RequestMapping(/n2/{username}/{password})public String people1(PathVariable String username,PathVariable String password){return username : password ;} 其中{username}{password}为必须传递的参数否则访问出现404 上传文件RequestPart RequestMapping(/upFile)public String myupFile(RequestPart(file)MultipartFile file) throws IOException {//根目录String path F:\\upFile\\;//根目录 [唯一的文件名]path UUID.randomUUID().toString().replace(-,);// 根目录 [唯一的文件名] 【文件的后缀】 ex:.pngpath file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(.));file.transferTo(new File(path));return path;} 获取Cookie/Session/header
CookieValue
获取cookie就需要使用到此注解CookieValue
RequestMapping(/cookie)public String getMyCookie(CookieValue(cookies) String getCookie){return Cookie : getCookie;}
RequestHeader
获取Header信息使用该注解 RequestMapping(header)public String getHead(RequestHeader(User-Agent) String userAgent) {return User-AgentuserAgent;} SessionAttribute
存储Session
RequestMapping(/cunSession)public String setsess(HttpServletRequest request) {// 获取 HttpSession 对象参数设置为 true 表示如果没有 session 对象就创建⼀个 sessionHttpSession session request.getSession(true);if(session!null){session.setAttribute(username,SpringMVC); //SpringMVC为创建的Session}return session 存储成功;} 获取session 简洁方式直接使用SessionAttribute RequestMapping(/Session)public String getSession(SessionAttribute(value username ,required false) String userSession){return 获取Session: userSession;} 三、返回数据功能 返回静态页面 在第一个功能连接功能已经关于ResponseBody说明该注解的功能告诉程序返回的是数据而不是前端页面 使用ResponseBody返回的是一个数据而非前端页面如果不使用该注解则返回的是一个前端页面
创建test.html前端文件
!DOCTYPE html
html langen
headmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0titleDocument/title
/head
body这是前端页面HTML !!!
/body
/html
使用ResponseBody效果
RequestMapping(/yemian)ResponseBody //告诉程序返回的是数据而非页面public String func(){return test.html;} 不使用ResponseBody效果
RequestMapping(/yemian)public String func(){return test.html;} 请求重定向和请求转发
请求重定向forward
请求转发redirect “转发”和“重定向”理解在中国官方发布的内容越少事也越大 “转发”和“重定向”也是⼀样字越少责任越大 。转发是服务器帮转的而重定向是让浏览器重新请求另⼀个地址。 请求重定向与请求转发区别
1、请求转发请求转发是客户端向服务器发送请求服务器来转发这个请求执行对象是服务器
2、请求重定向请求重定向是客户端向服务器发送请求服务器告诉客户端一个新的资源地址客户端再去完成执行对象是客户端 3、请求重定向与直接访问新地址效果⼀样不存在原来的外部资源不能访问请求转发服务器端转发有可能造成原外部资源不能访问。 请求转发 RequestMapping(/re)public String func1(){return redirect:test.html;}
请求转发是客户端让服务器转发地址地址不发生变化
请求重定向 RequestMapping(/fo)public String func2(){return forward:test.html;}
请求重定向是客户端重新发送新的地址地址发生了变化 前后端交互
使用form表单传递参数
示例实现计算器功能
前端代码
!DOCTYPE html
html langen
headmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0title计算器/title
/head
bodyform actionhttp://localhost:8080/hello/jishuangh1计算器/h1数字1nbsp;nbsp;input namenum1 typetextbr数字2nbsp;nbsp;input namenum2 typetextbrinput typesubmit value 点击相加 /form/body
/html
后端代码 RequestMapping(/jishuang)RestControllerpublic String func(Integer num1,Integer num2){if(num1 null || num2 null){return 数据不可为空请重新输入a hrefjavascript:history.go(-1);返回/a;}else{return h2计算结果为(num1num2)/h2a hrefjavascript:history.go(-1);返回/a;}}