文章目录

  • 参数绑定
    • Controller层请求
    • springMVC参数绑定
      • 参数绑定过程
        • 具体步骤
      • SpringMVC支持的参数类型
        • 默认参数类型
        • 基本参数类型
        • 自定义参数类型
  • 返回值
    • Controller请求返回值的类型
      • ModelAndView
      • String
        • 返回逻辑视图名
        • redirect(重定向)
        • forward(页面转发)
      • void
        • 通过request转向页面
        • 通过response页面重定向
        • 通过response进行页面响应

参数绑定

Controller层请求

在请求过程中使用@RequestMapping注解,将URL映射到controller的类或方法上。

@RequestMapping注解特点

  1. 窄化请求
    添加在类上,对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";}
}
  1. 限制HTTP请求方法
    限制HTTP请求特定的方法可以起到保护URL的目的(保证服务端的安全访问)。如果指定为get方法请求,则除了get方法请求可以通过外,其他的请求都不能通过。
@RequestMapping(value = "/list" ,method = RequestMethod.POST)

springMVC参数绑定

  • 参数绑定即客户端发送请求,而请求中包含一些数据,这些数据传递到 controller 层对应的方法的参数上,这个过程就涉及到参数绑定的问题。

参数绑定过程

  • 参数绑定器:将请求的数据转化为需要的数据。
  • SpringMVC,在客户端提交数据的过程中,客户端将数据以key-value形式进行提交,在SpringMVC中通过参数绑定器将参数绑定到方法的形参上。

具体步骤

这里还是用school数据库中student表为例进行操作。

  1. 在用户列表页面(studentlist.jsp)添加修改操作:
  2. 添加修改页面 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>
  1. 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层实现

  • 注意
    表单中Inputname值和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前后端交互相关推荐

  1. vue和Java做数据交互_基于vue和springmvc前后端分离,json类接口调用介绍

    基于vue和springmvc前后端分离,json类接口调用介绍 版本要求:spring-3.2.9.RELEASE.vue-2.9.2.axios-0.17.1,其中axios作为http clie ...

  2. Spring+SpringMVC+MyBatis明日方舟版人员信息管理系统前端页面代码前后端交互+SSM框架 管理员登录 游客登录 普通用户登录 人员的增删改查 信息更新 图片上传 分页查询)

    Spring+SpringMVC+MyBatis明日方舟版人员信息管理系统前端页面代码(前后端交互+SSM框架 管理员登录 游客登录 普通用户登录 人员的增删改查 信息更新 图片上传 分页查询 修改密 ...

  3. springMVC前后端数据交互

    springMVC前后端数据及交互部分是最重要的,因为其余部分都被封装好了,我们要做的就是这个部分,我的框架才用SSM,进公司以来在项目组也用到了这些,但是不够全面,系统,脑子里面思路混乱,所以总结下 ...

  4. [原创]前后端交互的方式整理

    前言 本来我只是想整理下前后端如何传输数据这种交互过程,大概流程如下: 前台使用ajax通过get/post等方式提交数据到后端 后端如何获取参数 经过业务处理后,返回前端对应的响应数据 前端接受到响 ...

  5. html 和jsp 引入jquery_不用jsp怎么实现前后端交互?给萌新后端的ajax教程(1)

    众所周知jsp是已经入土的技术,虽然仍有不少老项目在用,但已经不值得花时间学习了,当然了解一下也是可以的.如果你是一位萌新后端,不想了解jsp,或者想做一个前后端分离的项目,想在纯html网页上实现前 ...

  6. java中常用前后端交互框架,整合Spring-SpringMVC-MyBatis实现简单前后端交互

    整合Spring-SpringMVC-MyBatis实现简单前后端交互 (1)环境要求 IDEA MySQL Tomcat Maven (2)数据库环境 id name pwd 1 Hunter 12 ...

  7. 前后端交互,网络请求

    这边文章主要根据我自己的前端开发工作经验,东拼西凑出来的一点理解,希望能够对大家有点帮助,如果有误导或者错误的地方还请帮助指正,感谢!!! 前后端交互我理解主要分为三个主要的部分: 1.客户端 2.服 ...

  8. echarts前后端交互数据_SpringBoot2.0实战(26)整合SpringSecurity前后端分离JSON交互...

    在前端的文章中,我们实现了使用 SpringSecurity 实现登录鉴权,并使用数据库存储用户信息,实现登录鉴权 SpringBoot2.0实战(24)整合SpringSecurity之最简登录方法 ...

  9. 写给刚入门的前端工程师的前后端交互指南

    转自原文 写给刚入门的前端工程师的前后端交互指南 作为刚接触前端的不久的童鞋,大家都会兴奋于CSS和JS所带来漂亮界面,然而,前端工程师除了UI重构外,还有非常重要的职责在正确的区域渲染出服务端的数据 ...

最新文章

  1. shell中exec解析
  2. RHEL7切换Firewall为iptables
  3. Android 第四课 活动的启动模式
  4. java 封装api_关于java 封装某个功能为api形式供其他用户调用的问题
  5. 4款深度学习框架简介,初学者该如何选择?
  6. 马哥Linux--elasticsearch
  7. php 导出excel 2007,使用PHPExcel导出Excel表
  8. a标签的href属性
  9. chrome 截长图功能
  10. 微信Apk扫描无法下载,显示空白页
  11. 5 款开源的 Linux 策略模拟游戏 | Linux 中国
  12. 信用卡一样大小的(小型电脑):树莓派
  13. 网页数据采集爬虫研究
  14. Visual Studio Code修改字体大小
  15. 看mysql安装在哪怎么看_mysql安装在哪儿怎么查看?
  16. oracle 聚合函数 条件,Oracle PLSQL之HAVING后面的条件可由聚合函数构成,也可由GROUP BY后的字段构成...
  17. 集成支付宝SDK流程
  18. Masonry比例用法
  19. ios实现qq空间飘落的花瓣(swift—粒子发射器)
  20. Chocolatey离线安装

热门文章

  1. 中国邮政领取Google AdSense 西联汇款表单填写样本(附图)
  2. 手机摆摊无线服务器是什么,一天卖出10000只的网红鸡爪,在家轻松做,学会可以摆摊了!...
  3. 勒索软件攻击防御的9件事
  4. SE16N修改SAP标准表内容
  5. XGBoost中特征重要性计算方法对比
  6. 2023年02月编程语言流行度排名
  7. java swing jdbc个人记账管理系统的设计与实现(GUI)
  8. 一天一条Linux指令-sz
  9. 小米max2 android p,小米max2 升级miui11全程跟进推送
  10. 使用slmgr.vbs -rearm命令重置,提升需要提升特权 [此博文包含图片]