• Spring MVC @RequestParam注解


    org.springframework.web.bind.annotation包下 @RequestParam 注解,该注解类型用于将指定的请求参数赋值给方法中的形参。那么@RequestParam注解有什么属性呢?它有4种属性,下面将逐一介绍这四种属性:
    1、name属性
    该属性的类型是String类型,它可以指定请求头绑定的名称;

    2、value属性
    该属性的类型是String类型,它可以设置是name属性的别名;

    3、required属性
    该属性的类型是boolean类型,它可以设置指定参数是否必须绑定;

    4、defalutValue属性
    该属性的类型是String类型,它可以设置如果没有传递参数可以使用默认值。

    请求处理方法参数的可选类型位Java的8种基本数据类型和String。如下示例伪代码:

    @RequestMapping(value="/hello")
    public ModelAndView hello(
        @RequestParam("loginname") String loginname,
        @RequestParam("password") String password) {
        return...;
    }

    假设请求如下:http://localhost:8088/springmvc-comment1/login?loginname=qianch&password=123456
    以上代码会将请求中的loginname参数的值“qianch”赋给loginname变量,password参数的值“123456”赋给password变量。

    下面将通过案例演示@RequestMapping和@RequestParam注解的应用。
    在项目的“src/main/java”下创建一个包,包名叫“com.qianchunhua.domain”,在包下创建User类,该类是一个域对象,主要用于封装前台页面传来的数据。如下代码:

    package com.qianchunhua.domain;
    
    import java.io.Serializable;
    // 域对象,实现序列化接口
    public class User implements Serializable{
    
        // 私有字段
        private String loginname;
        private String password;
        private String username;
    
        // 公共构造器
        public User() {
            super();
        }
    
        // set/get方法
        public String getLoginname() {
            return loginname;
        }
        public void setLoginname(String loginname) {
            this.loginname = loginname;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
    
    }

    在刚才创建的“com.qianchunhua.controller”包下再创建一个UserController类,该类主要模拟用户的注册。代码如下:

    package com.qianchunhua.controller;
    
    import java.util.ArrayList;
    import java.util.List;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import com.qianchunhua.domain.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    
    // Controller注解用于指示该类是一个控制器,可以同时处理多个请求动作
    @Controller
    // RequestMapping可以用来注释一个控制器类,此时,所有方法都将映射为相对于类级别的请求, 
    // 表示该控制器处理所有的请求都被映射到 value属性所指示的路径下
    @RequestMapping(value="/user")
    public class UserController {   
        // 静态List<User>集合,此处代替数据库用来保存注册的用户信息
        private static List<User> userList; 
        // UserController类的构造器,初始化List<User>集合
        public UserController() {
            super();
            userList = new ArrayList<User>();
        }
        // 静态的日志类LogFactory
        private static final Log logger = LogFactory
                .getLog(UserController.class);
    
        // 该方法映射的请求为http://localhost:8088/springmvc-comment1/user/register,该方法支持GET请求
        @RequestMapping(value="/register",method=RequestMethod.GET)
         public String registerForm() {
             logger.info("register GET方法被调用...");
             // 跳转到注册页面
             return "registerForm";
         }
    
        // 该方法映射的请求为http://localhost:8088/springmvc-comment1/user/register,该方法支持POST请求
         @RequestMapping(value="/register",method=RequestMethod.POST)
         // 将请求中的loginname参数的值赋给loginname变量,password和username同样处理
         public String register(
                 @RequestParam("loginname") String loginname,
                 @RequestParam("password") String password,
                 @RequestParam("username") String username) {
             logger.info("register POST方法被调用...");
             // 创建User对象
             User user = new User();
             user.setLoginname(loginname);
             user.setPassword(password);
             user.setUsername(username);
             // 模拟数据库存储User信息
             userList.add(user);
             // 跳转到登录页面
             return "loginForm";
         }
    
        // 该方法映射的请求为http://localhost:8088/springmvc-comment1/user/login
         @RequestMapping("/login")
         public String login(
                // 将请求中的loginname参数的值赋给loginname变量,password同样处理
                 @RequestParam("loginname") String loginname,
                 @RequestParam("password") String password,
                 Model model) {
             logger.info("登录名:"+loginname + " 密码:" + password);
             // 到集合中查找用户是否存在,此处用来模拟数据库验证
             for(User user : userList){
                 if(user.getLoginname().equals(loginname) && user.getPassword().equals(password)) {
                     model.addAttribute("user",user);
                     return "welcome";
                 }
             }
             return "loginForm";
         }
    
    }

    UserController类的代码解释如下:
    (1)UserController类使用了@Controller注解,是一个控制器类;
    (2)UserController类上面使用了@RequestMapping(value=”/user”)注解,表示该控制器处理的所有请求都被映射到user路径下;
    (3)本来没有使用数据库存储用户注册信息,所以定义了一个静态的List集合userList来代替数据库存储用户数据;
    (4)registerForm方法使用了@RequestMapping(value=”/register”,method=RequestMethod.GET)注解,表示该方法映射的请求为http://localhost:8088/springmvc-comment1/user/register,并且只支持GET请求。该方法返回字符串“registerForm”,参考springmvc-config.xml中的配置信息,可以知道该方法只是跳转到registerForm.jsp注册页面;
    (5)register方法使用了@RequestMapping(value=”/register”,method=RequestMethod.POST)注解,表示该方法映射的请求为http://localhost:8088/springmvc-comment1/user/register,并且只支持POST请求。该方法使用@RequestParam注解将指定的请求参数赋值给方法中的形参,之后创建了一个User对象保存用户传递的注册信息,最后将User对象存储到userList集合当中,之后的登录页面就可以到userList集合当中进行用户登录业务逻辑判断。该方法返回字符串“loginForm”,并跳转到loginForm.jsp登录页面;
    (6)login方法使用了@RequestMapping(“/login”)注解,表示该方法映射的请求为http://localhost:8088/springmvc-comment1/user/login ,这里没有设置method属性表示支持所有方式的请求。该方法也使用@RequestParam注解将指定的请求赋值给方法中的形参。之后到集合中查找用户是否存在,此处用来模拟数据库验证。login方法中海油一个参数Model对象,调用该对象的addAttribute方法可以将数据添加到request当中。最后,如果用户登录成功则返回字符串“loginForm”,并跳转到loginForm.jsp页面。

    我们需要在项目的content文件夹下,创建一个registerForm.jsp。如下代码:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        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>
    </head>
    <body>
    <h3>注册页面</h3>
    <form action="register" method="post">
         <table>
             <tr>
                <td><label>登录名: </label></td>
                 <td><input type="text" id="loginname" name="loginname" ></td>
             </tr>
             <tr>
                <td><label>密码: </label></td>
                 <td><input type="password" id="password" name="password"></td>
             </tr>
             <tr>
                <td><label>真实姓名: </label></td>
                 <td><input type="text" id="username" name="username" ></td>
             </tr>
             <tr>
                 <td><input id="submit" type="submit" value="注册"></td>
             </tr>
         </table>
    </form>
    </body>
    </html>

    registerForm.jsp是一个注册页面,用户可以输入登录名、密码和真实姓名,该表单被提交到register请求。注意,这里使用的是POST方式,响应请求是UserController类的register方法。

    REF

    https://blog.csdn.net/qq_42223653/article/details/90486584

  • 相关阅读:
    第四章 开始Unity Shader学习之旅(3)
    第四章 开始Unity Shader学习之旅(2)
    第四章 开始Unity Shader学习之旅(1)
    堆中的变量、对象的使用
    goto语句 switch语句
    C/C++走过的坑(基础问题篇)
    EOF 与 getchar()
    char与 int 类型转化问题汇总
    运算符优先级记忆口诀及列表(转)
    SQL基础篇---函数及其函数配套使用的关键字
  • 原文地址:https://www.cnblogs.com/emanlee/p/15754237.html
Copyright © 2020-2023  润新知