SpringMVC前后端交互
文章目录
- 参数绑定
- Controller层请求
- springMVC参数绑定
- 参数绑定过程
- 具体步骤
- SpringMVC支持的参数类型
- 默认参数类型
- 基本参数类型
- 自定义参数类型
- 返回值
- Controller请求返回值的类型
- ModelAndView
- String
- 返回逻辑视图名
- redirect(重定向)
- forward(页面转发)
- void
- 通过request转向页面
- 通过response页面重定向
- 通过response进行页面响应
参数绑定
Controller层请求
在请求过程中使用@RequestMapping
注解,将URL映射到controller的类或方法上。
@RequestMapping注解特点:
- 窄化请求
添加在类上,对URL请求进行分类管理,在类上添加该注解的URL(称为根路径),URL访问的完整路径变为 -> 根路径 + 子路径。
这时候访问页面就应该在/test前加上/user:http://localhost:8080/user/test
@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/test")public @ResponseBody String test(){return "hello houoyi";}
}
- 限制HTTP请求方法
限制HTTP请求为特定的方法可以起到保护URL的目的(保证服务端的安全访问)。如果指定为get方法请求,则除了get方法请求可以通过外,其他的请求都不能通过。
@RequestMapping(value = "/list" ,method = RequestMethod.POST)
springMVC参数绑定
- 参数绑定即客户端发送请求,而请求中包含一些数据,这些数据传递到 controller 层对应的方法的参数上,这个过程就涉及到参数绑定的问题。
参数绑定过程
- 参数绑定器:将请求的数据转化为需要的数据。
- SpringMVC,在客户端提交数据的过程中,客户端将数据以key-value形式进行提交,在SpringMVC中通过参数绑定器将参数绑定到方法的形参上。
具体步骤
这里还是用school数据库中student表为例进行操作。
- 在用户列表页面(studentlist.jsp)添加修改操作:
- 添加修改页面 jsp文件(editStudent.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>修改页面</title></head><body><form action="${pageContext.request.contextPath }/student/submit" method="post"><table width="60%" border="1"align="center"><h1 align="center">修改学生信息</h1><tr><td>学生ID</td><td> <input type="text" name="SID" value="${student.SID }" readonly ></td> </td></tr><tr><td>用户名</td><td> <input id="Sname" type="text" name="Sname" value="${student.sname }"></td> </td></tr><tr><td>性别</td><td> <input id="Ssex" type="text" name="Ssex" value="${student.ssex }"></td> </td></tr><tr><td>年龄</td><td> <input id="Sage" type="text" name="Sage" value="${student.sage }"></td> </td></tr><tr ><td colspan="2" align="center"><input type="submit" value="提交"/></td></tr></table></form></body></html>
- Handler实现:
dao层添加:
Mapper文件添加:
Service层添加:
主要操作:在Controller层添加修改函数
SpringMVC支持的参数类型
默认参数类型
SpringMVC中支持的默认的参数类型,可以直接在形参上给出默认的参数类型,可直接使用。
- HttpServletRequest request, 通过request对象进行参数获取。
- HttpServletResponse response, 通过response对象处理响应信息。
- HttpSession session, 通过Session对象来获取Session中的对象。
- Model model,Model是一个接口,modelMap是接口实现,将 model数据封装到 request中。
使用示例:
public ModelAndView list(HttpServletRequest request, HttpServletResponse response, HttpSession session, Model model) throws IOException {request.getParameter("id");//前端页面传递的 id属性通过 request.getParameter进行接收response.getWriter().write("");//响应结果session.setAttribute("name","张三");//写缓存信息session.getAttribute("name");//获取缓存model.addAttribute("name","key");//写数据
}
基本参数类型
- 基本的类型, byte\ short\ int\ long\ float\ double\ char\ boolean 都能够进行支持。
- 以int类型为例介绍,以form表单(前端向后端提交数据的一种格式)提交数据给后台。
jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>数据提交</title></head><body><form action="/student/test" method="post"><input name="num" value="7" type="text"/><input type="submit" value="提交"> </input></form></tbody></table></form></body></html>
controller层实现
- 注意:
表单中Input的name值和controller层上方法的形参保持一致,就能完成参数绑定。
如果不一致 -> 通过注解@RequestParam
完成参数的绑定:
自定义参数类型
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>修改页面</title></head><body><form action="${pageContext.request.contextPath }/student/submit" method="post"><table width="60%" border="1"align="center"><h1 align="center">修改学生信息</h1><tr><td>学生ID</td><td> <input type="text" name="SID" value="${student.SID }" readonly ></td> </td></tr><tr><td>用户名</td><td> <input id="Sname" type="text" name="Sname" value="${student.sname }"></td> </td></tr><tr><td>性别</td><td> <input id="Ssex" type="text" name="Ssex" value="${student.ssex }"></td> </td></tr><tr><td>年龄</td><td> <input id="Sage" type="text" name="Sage" value="${student.sage }"></td> </td></tr><tr ><td colspan="2" align="center"><input type="submit" value="提交"/></td></tr></table></form></body></html>
controller层的实现
@RequestMapping("/submit")public void submit(Student211 student){System.out.println("submit:"+student);}
- 注意:在进行自定义参数绑定时,Input中name值需要和自定义类型的类中属性名保持一致,才能完成自定义对象的映射,否则无法完成映射。
字符集编码问题(中文乱码问题)
<!--字符集编码配置--><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
返回值
Controller请求返回值的类型
ModelAndView
modelAndView对象返回包含数据和逻辑视图名,或者仅视图
@RequestMapping(value = "/student")
public ModelAndView list() throws IOException { List<Student211> student211s = studentService.selectAllStudents();ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("students",student211s); modelAndView.setViewName("studentlist"); return modelAndView;
}
String
返回逻辑视图名
逻辑视图名=前缀+视图名称+后缀(注意要将springmvc.xml文件中视图解析器的前后缀设置屏蔽掉)
@RequestMapping(value = "/student1")
public String list1(Model model) throws IOException {List <Student211> student211s = userService.selectAllStudents();model.addAttribute("students",student211s);return "/WEB-INF/jsp/studentlist.jsp";
}
redirect(重定向)
重定向:浏览器上地址会改变,修改后的数据无法传递到重定向页面(request数据不能共享)
@RequestMapping("/submit")public String submit(Student211 student){System.out.println("id"+student.getSID());return "redirect:/student/student";//重定向
}
forward(页面转发)
浏览器地址不会发生改变(request数据可以共享)
@RequestMapping("/submit")public String submit(Student211 student){System.out.println("id:"+student.getSID());return "forward:/student/list";}
void
通过request转向页面
@RequestMapping("/submit")
public void submit(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {//forwardrequest.getRequestDispatcher("/student/student").forward(request,response);
}
通过response页面重定向
@RequestMapping("/submit")
public void submit(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {//redirectresponse.sendRedirect("/student/student");
}
通过response进行页面响应
@RequestMapping("/submit")
public void submit(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {response.setContentType("application/json;charset=utf-8");response.getWriter().write("hello world");
}
SpringMVC前后端交互相关推荐
- vue和Java做数据交互_基于vue和springmvc前后端分离,json类接口调用介绍
基于vue和springmvc前后端分离,json类接口调用介绍 版本要求:spring-3.2.9.RELEASE.vue-2.9.2.axios-0.17.1,其中axios作为http clie ...
- Spring+SpringMVC+MyBatis明日方舟版人员信息管理系统前端页面代码前后端交互+SSM框架 管理员登录 游客登录 普通用户登录 人员的增删改查 信息更新 图片上传 分页查询)
Spring+SpringMVC+MyBatis明日方舟版人员信息管理系统前端页面代码(前后端交互+SSM框架 管理员登录 游客登录 普通用户登录 人员的增删改查 信息更新 图片上传 分页查询 修改密 ...
- springMVC前后端数据交互
springMVC前后端数据及交互部分是最重要的,因为其余部分都被封装好了,我们要做的就是这个部分,我的框架才用SSM,进公司以来在项目组也用到了这些,但是不够全面,系统,脑子里面思路混乱,所以总结下 ...
- [原创]前后端交互的方式整理
前言 本来我只是想整理下前后端如何传输数据这种交互过程,大概流程如下: 前台使用ajax通过get/post等方式提交数据到后端 后端如何获取参数 经过业务处理后,返回前端对应的响应数据 前端接受到响 ...
- html 和jsp 引入jquery_不用jsp怎么实现前后端交互?给萌新后端的ajax教程(1)
众所周知jsp是已经入土的技术,虽然仍有不少老项目在用,但已经不值得花时间学习了,当然了解一下也是可以的.如果你是一位萌新后端,不想了解jsp,或者想做一个前后端分离的项目,想在纯html网页上实现前 ...
- java中常用前后端交互框架,整合Spring-SpringMVC-MyBatis实现简单前后端交互
整合Spring-SpringMVC-MyBatis实现简单前后端交互 (1)环境要求 IDEA MySQL Tomcat Maven (2)数据库环境 id name pwd 1 Hunter 12 ...
- 前后端交互,网络请求
这边文章主要根据我自己的前端开发工作经验,东拼西凑出来的一点理解,希望能够对大家有点帮助,如果有误导或者错误的地方还请帮助指正,感谢!!! 前后端交互我理解主要分为三个主要的部分: 1.客户端 2.服 ...
- echarts前后端交互数据_SpringBoot2.0实战(26)整合SpringSecurity前后端分离JSON交互...
在前端的文章中,我们实现了使用 SpringSecurity 实现登录鉴权,并使用数据库存储用户信息,实现登录鉴权 SpringBoot2.0实战(24)整合SpringSecurity之最简登录方法 ...
- 写给刚入门的前端工程师的前后端交互指南
转自原文 写给刚入门的前端工程师的前后端交互指南 作为刚接触前端的不久的童鞋,大家都会兴奋于CSS和JS所带来漂亮界面,然而,前端工程师除了UI重构外,还有非常重要的职责在正确的区域渲染出服务端的数据 ...
最新文章
- shell中exec解析
- RHEL7切换Firewall为iptables
- Android 第四课 活动的启动模式
- java 封装api_关于java 封装某个功能为api形式供其他用户调用的问题
- 4款深度学习框架简介,初学者该如何选择?
- 马哥Linux--elasticsearch
- php 导出excel 2007,使用PHPExcel导出Excel表
- a标签的href属性
- chrome 截长图功能
- 微信Apk扫描无法下载,显示空白页
- 5 款开源的 Linux 策略模拟游戏 | Linux 中国
- 信用卡一样大小的(小型电脑):树莓派
- 网页数据采集爬虫研究
- Visual Studio Code修改字体大小
- 看mysql安装在哪怎么看_mysql安装在哪儿怎么查看?
- oracle 聚合函数 条件,Oracle PLSQL之HAVING后面的条件可由聚合函数构成,也可由GROUP BY后的字段构成...
- 集成支付宝SDK流程
- Masonry比例用法
- ios实现qq空间飘落的花瓣(swift—粒子发射器)
- Chocolatey离线安装
热门文章
- 中国邮政领取Google AdSense 西联汇款表单填写样本(附图)
- 手机摆摊无线服务器是什么,一天卖出10000只的网红鸡爪,在家轻松做,学会可以摆摊了!...
- 勒索软件攻击防御的9件事
- SE16N修改SAP标准表内容
- XGBoost中特征重要性计算方法对比
- 2023年02月编程语言流行度排名
- java swing jdbc个人记账管理系统的设计与实现(GUI)
- 一天一条Linux指令-sz
- 小米max2 android p,小米max2 升级miui11全程跟进推送
- 使用slmgr.vbs -rearm命令重置,提升需要提升特权 [此博文包含图片]