1. 页面中数据提交到 Controller 中如何处理

a) 如果自定义 Controller 是实现 spring 的 Controller 的接口,那么可以通过 HttpServletRequest 来获取数据。

b) 如果自定义的 Controller 没有实现 spring 的 Controller 的接口,那么可以通过在处理方法上,添加一个 HttpServletRequest 类型的参数,在请求被方法处理时, spring 会自动的将 HttpServletRequest 注入到该参数中。

注意:以上两种方式均可以获取表单数据,但是获取的方式和 servlet 一致,那么在提交数据时,会自动将表单域中的值,直接注入给参数。

c) 在处理方法上,直接声明参数,参数名称和表单中的域的名称一致,那么在提交数据时,会自动将表单域中的值,直接注入给参数。

Jsp 页面

<form action="login.do" method="post">
username:<input type="text" name="username"/><br>
password:<input type="password" name="password"/><br>
<input type="submit" value="登录"/>
</form>

Controller 类

@RequestMapping("/login.do")
public ModelAndView login(String username,String password){
ModelAndView mv = new ModelAndView();
System.out.println("username="+username+" \tpassword="+password);
if("siggy".equals(username)&&"1111".equals(password)){
mv.addObject("msg", "登录成功!!!");
mv.setViewName("index");
}else{
mv.setViewName("login");
}
return mv;
}

如果表单域中的名称和参数名不一致,可以使用 @RequestParam("username") 进行声明

@RequestMapping("/login.do")
public ModelAndView login(@RequestParam("username")String user,String password){
ModelAndView mv = new ModelAndView();
System.out.println("username="+user+" \tpassword="+password);
if("siggy".equals(user)&&"1111".equals(password)){
mv.addObject("msg", "登录成功!!!");
mv.setViewName("index");
}else{
mv.setViewName("login");
}
return mv;
}

d) 对于提交对象的处理:

如果在表单域中提交的是对象,那么域中的名称为 vo 类的属性名即可,vo 类中提供 get/set 方法,Controller 类中的处理方法上,直接将参数声明为 vo 类型的对象即可。

vo 类型

public class User {
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}

Jsp 页面

<body>
<form action="login.do" method="post">
username:<input type="text" name="name"/><br>
password:<input type="password" name="pwd"/><br>
<input type="submit" value="登录"/>
</form>
</body>

Controller 类

@Controller
public class UserController {
@RequestMapping("/toLogin.do")
public ModelAndView toLogin(){
return new ModelAndView("login");
}
@RequestMapping("/login.do")
public ModelAndView login(User user){
ModelAndView mv = new ModelAndView();
System.out.println("username="+user.getName()+" \tpassword="+user.getPwd());
if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
mv.addObject("msg", "登录成功!!!");
mv.setViewName("index");
}else{
mv.setViewName("login");
}
return mv;
}
}

2. 数据如何从后台响应到页面中

a) 可以通过 ServletAPI 将数据携带到前台,和 servlet 处理是一致的。

@RequestMapping("/login.do")
public ModelAndView login(@RequestParam("username")String user,String password,HttpServletRequest req){
ModelAndView mv = new ModelAndView();
System.out.println("username="+user+" \tpassword="+password);
req.setAttribute("hello", "world");
if("siggy".equals(user)&&"1111".equals(password)){
mv.addObject("msg", "登录成功!!!");
mv.setViewName("index");
}else{
mv.setViewName("login");
}
return mv;
}

b) 通过 ModelAndView 将数据携带到前台,前台使用 el 和 jstl 来获取数据

@RequestMapping("/login.do")
public ModelAndView login(User user){
ModelAndView mv = new ModelAndView();
System.out.println("username="+user.getName()+" \tpassword="+user.getPwd());
if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
mv.addObject("msg", "登录成功!!!");
mv.setViewName("index");
}else{
mv.setViewName("login");
}
return mv;
}

c) 也可以通过 ModelMap 来携带数据, ModelMap 类型的数据,需要在处理方法的参数中声明:

@RequestMapping("/login.do")
public ModelAndView login(User user,ModelMap map){
ModelAndView mv = new ModelAndView();
System.out.println("username="+user.getName()+" \tpassword="+user.getPwd());
if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
map.addAttribute("msg", "登录成功!!!");
mv.setViewName("index");
}else{
mv.setViewName("login");
}
return mv;
}

d) 也可以通过 Model 来携带数据,Model 类型的数据,需要在处理方法的参数中声明

@RequestMapping("/login.do")
public ModelAndView login(User user,Model model){
ModelAndView mv = new ModelAndView();
System.out.println("username="+user.getName()+" \tpassword="+user.getPwd());
if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
model.addAttribute("msg", "登录成功!!!");
mv.setViewName("index");
}else{
mv.setViewName("login");
}
return mv;
}

java之spring mvc之数据处理的更多相关文章

  1. 框架-Java:Spring MVC

    ylbtech-框架-Java:Spring MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 We ...

  2. 从零开始学 Java - 搭建 Spring MVC 框架

    没有什么比一个时代的没落更令人伤感的了 整个社会和人都在追求创新.进步.成长,没有人愿意停步不前,一个个老事物慢慢从我们生活中消失掉真的令人那么伤感么?或者说被取代?我想有些是的,但有些东西其实并不是 ...

  3. Java框架-Spring MVC理解001

    Spring MVC理解 1.servlet--Spring MVC的本质 2.Spring MVC其实是一个工具,具体的理解可以分为两步:第一步,了解这个工具是怎么创建出来的:第二步,了解这个工具是 ...

  4. Java之Spring mvc详解

    文章大纲 一.Spring mvc介绍二.Spring mvc代码实战三.项目源码下载四.参考文章   一.Spring mvc介绍 1. 什么是springmvc   springmvc是sprin ...

  5. 【Java】Spring MVC 扩展和SSM框架整合

    开发web项目通常很多地方需要使用ajax请求来完成相应的功能,比如表单交互或者是复杂的UI设计中数据的传递等等.对于返回结果,我们一般使用JSON对象来表示,那么Spring MVC中如何处理JSO ...

  6. java之spring mvc之helloworld

    这篇主要讲解springmvc的基本的使用,这里以helloworld项目为例. 目录结构: 1. 新建 web 项目 :springmvc_helloworld 2. 在 WebRoot\WEB-I ...

  7. java之spring mvc之初始spring mvc

    1. mvc : mvc框架是处理 http请求和响应的框架 2. mvc 做的事情有哪些: 将 url 映射到一个java的处理方法上 将表单数据提交到 java 类中 将后台 java 类处理的结 ...

  8. 从零开始学 Java - 搭建 Spring MVC 记录云创的日子 第一章

    2017年11月29日 来到新项目,需要用到Spring MVC ,那么我就开始记录我这次的学习. Spring MVC 框架是围绕一个 DispatcherServlet 来设计的,这个 Servl ...

  9. java idea spring mvc 入门 最起码 我8080跑起来了

    IDEA建立Spring MVC Hello World 详细入门教程 https://www.cnblogs.com/wormday/p/8435617.html

随机推荐

  1. 使用electron开发桌面级小程序自动部署系统

    那一天我二十一岁,在我一生的黄金时代,我有好多奢望.我想爱,想吃,还想在一瞬间变成天上半明半暗的云,后来我才知道,生活就是个缓慢受锤的过程,人一天天老下去,奢望也一天天消逝,最后变得像挨了锤的牛一样. ...

  2. unicode欺骗—— hctf - admin

    查看源代码,发现<!-- you are not admin --> 提示要以管理员身份登陆 尝试注册管理员账号,提示The username has been registered 于是 ...

  3. 声源定位之2精读《sound localization based on phase difference enhancement using deep neuarl networks》

    2.1.1 题目与摘要 1.为什么要增强IPD? The phase differences between the discrete Fourier transform (DFT) coeffici ...

  4. Leetcode:2. 两数相加

    题目描述: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来 ...

  5. element UI中的select选择器的change方法需要传递多个值

    如果直接调用change事件,不传任何参数,则可以获取到当前选中的值(因为默认会将event参数传递过去) 场景: 你需要将select选择器 ”选中的当前元素“ 和 ”其他你需要的值“ 一起传递过去 ...

  6. MQTT研究之EMQ:【EMQX使用中的一些问题记录(3)】

    EMQX功能强大,但是帮助信息或者可用资料的确有限,遇到个问题,比较难找到处理的头绪,今天,我要记录的是,使用中出现EMQX宕机,但是呢,启动也启动不了. 今天记录的内容,就以操作EMQX 3.2.3 ...

  7. C#实体类null自动转空字符串

    C#实体类null自动转空字符串 using System.ComponentModel.DataAnnotations; [DisplayFormat(ConvertEmptyStringToNul ...

  8. StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation - 1 - 多个域间的图像翻译论文学习

    Abstract 最近在两个领域上的图像翻译研究取得了显著的成果.但是在处理多于两个领域的问题上,现存的方法在尺度和鲁棒性上还是有所欠缺,因为需要为每个图像域对单独训练不同的模型.为了解决该问题,我们 ...

  9. [ Docker ] 基础的网络应用

    1. Docker 基本网络模型 Docker 有 4 种基本的网络模型: bridge 桥接模式 host 网络模式 container 联盟模式 none 模式 Docker daemon 在启动 ...

  10. Nginx 配置学习

    官方文档 一.概述 Nginx的配置放在配置文件nginx.conf/etc/nginx/nginx.conf中,大概的结构如下: main # 全局配置 events { # nginx工作模式配置 ...