Spring MVC(2)Spring MVC 组件开发

  一、控制器接收各类请求参数

  代码测试环境:

  接收各类参数的控制器--ParamsController

package com.ssm.chapter15.controller;

@Controller
@RequestMapping("/params")
public class ParamsController {
    // 各种控制器方法
}

  先看一下目录结构:

  

  这里需要知道的知识点是,WebContent文件夹下的.jsp文件都可以通过http://localhost:8080/工程名/文件名.jsp直接访问。

  而WEB-INF里面的文件,必须通过Spring MVC 中的Controller控制器产生映射才能访问。

  1.接收普通请求参数

  params.jsp文件的内容如下,其中action="./params/commonParams.do"表示提交按钮按下后,跳转到action指定的页面。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!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>
<!-- 加载Query文件-->
<script src="https://code.jquery.com/jquery-3.2.0.js"></script> <!-- 此处插入JavaScript脚本 -->
</head> <body> <!-- 根据你的需要改变请求url --> <form id="form" action="./params/commonParams.do"> <table> <tr> <td>角色名称</td> <td><input id="roleName" name="roleName" value="" /></td> </tr> <tr> <td>备注</td> <td><input id="note" name="note" /></td> </tr> <tr> <td></td> <td align="right"><input type="submit" value="提交" /></td> </tr> </table> </form> </body> </html>

  而对应的控制器方法:commonParams方法

@Controller
@RequestMapping("/params")
public class ParamsController {
    
    @RequestMapping("/commonParams")
    public ModelAndView commonParams(String roleName, String note) {
        System.out.println("roleName =>" + roleName);
        System.out.println("note =>" + note);
        ModelAndView mv = new ModelAndView();
        mv.setViewName("index");
        return mv;
    }

  这里因为当前Spring MVC 比较智能化,如果传递进来的参数名称和HTTP的保存一致,意思就是传递进来的参数名称为roleName和note,而params.jsp中<input id="roleName" name="roleName" value="" />和<input id="note" name="note" />两个参数名称都和roleName和note一致,因此,可以获取到params.js中提交的参数。

  测试:首先输入访问表单,输入任意参数,并提交

  

  然后,正确跳转到./params/commonParams.do?roleName=mingcheng&note=beizhu,这一URL,说明参数传递成功。

  

   但是,在参数很多的情况下,再使用这样的方式,显然所写方法的参数就会非常多,这是应该考虑到使用一个POJO来管理这些参数。在没有任何注解的情况下,Spring MVC 也有映射POJO的能力。

  新建一个角色参数类,将两个参数封装到类中:

package com.ssm.chapter14.pojo;

public class RoleParams {
    private String roleName;
    private String note;

  /*getter and setter*/
}

  然后增加控制器方法:由于上面的POJO的属性和HTTP参数(jsp文件中的参数)一一对应了,然后在commonParamPojo方法中将POJO类对象RoleParams roleParams当成方法的参数,也可以在没有任何注解的情况下实现参数的有效传递。

    @RequestMapping("/commonParamPojo")
    public ModelAndView commonParamPojo(RoleParams roleParams) {
        System.out.println("roleName =>" + roleParams.getRoleName());
        System.out.println("note =>" + roleParams.getNote());
        ModelAndView mv = new ModelAndView();
        mv.setViewName("index");
        return mv;
    }

  另外,还需要修改jsp中的action成<form id="form" action="./params/commonParamPojo.do">才能进行测试。

  2.使用@RequestParam注解获取参数

  前面的两种情况,仅仅在参数名称和jsp文件中的参数名称一一对应时才有效。那么,如果修改jsp中的参数名称,例如,<td><input id="role_name" name="role_name" value="" /></td>将roleName修改成role_Name,此时由于参数不一致,就无法再进行自动对应传递了。

  可以用@RequestParam注解获取参数的方式解决这个问题:使用@RequestParam("role_name")来讲HTTP的参数名称(即jsp文件中的参数名称)和传递进去的roleName参数一一对应。

    @RequestMapping("/requestParam")
    //使用@RequestParam("role_name")指定映射HTTP参数名称
    public ModelAndView requestParam(@RequestParam("role_name") String roleName, String note) {
        System.out.println("roleName =>" + roleName);
        System.out.println("note =>" + note);
        ModelAndView mv = new ModelAndView();
        mv.setViewName("index");
        return mv;
    }

  同样,修改action,然后也可以得到正确的测试结果:

  

  3.使用URL传递参数

  一些网站使用URL的形式传递参数,对于一些业务比较简单的应用是非常常见的,如果想把获得数据库中id为1的role的信息,那么就写成/params/getRole/1,这里的1就代表角色编号,只不过是在URL中传递。Spring MVC 也提供了支持。

  需要通过@RequestMapping注解和@PathVariable注解协作完成。其中,

  @RequestMapping("/getRole/{id}")中的{id}表示处理器需要接受一个由URL组成的参数,且参数名称为id

  @PathVariable("id")的意思是获取定义在@RequestMapping中参数名称为id的参数,这样就可以在方法内获取这个参数了

  然后通过劫色服务类获取角色对象,并将其绑定到视图中,将视图设置为JSON视图。

    //注入角色服务对象
    @Autowired
    RoleService roleService;

    //{id}代表接收一个参数
    @RequestMapping("/getRole/{id}")
    //注解@PathVariable表示从URL的请求地址中获取参数
    public ModelAndView pathVariable(@PathVariable("id") Long id)  {
        Role role = roleService.getRole(id);
        ModelAndView mv = new ModelAndView();
        //绑定数据模型
        mv.addObject(role);
        //设置为JSON视图
        mv.setView(new MappingJackson2JsonView());
        return mv;
    }

  测试结果:

  

  

  4.传递JSON参数

  

  5.接收列表数据和表单序列化

  二、重定向

  1.

  三、保存并获取属性参数

  1.

  2.

  3.

猜你喜欢

转载自www.cnblogs.com/BigJunOba/p/9774056.html