c语言sprint参数,Spring MVC获取参数的几种常见方式

Controller 接收请求参数的方式有很多种,有的适合 get 请求方式,有的适合 post 请求方式,有的两者都适合。下面分别介绍这些方式,读者可以根据实际情况选择合适的接收方式。

通过实体 Bean 接收请求参数

通过一个实体 Bean 来接收请求参数,适用于 get 和 post 提交请求方式。需要注意的是,Bean 的属性名称必须与请求参数名称相同。下面通过具体应用 springMVCDemo02 讲解“通过实体 Bean 接收请求参数”。

1)创建首页面

在 springMVCDemo02 应用的 WebContent 目录下修改 index.jsp 页面,代码如下:

pageEncoding="UTF-8"%>

Insert title here

没注册的用户,请 注册

已注册的用户,去 登录

2)完善配置文件

完善配置文件 springmvc-servlet.xml,代码如下:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd">

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

3)创建 POJO 实体类

在 springMVCDemo02 应用的 src 目录下创建 pojo 包,并在该包中创建实体类 UserForm,代码如下:

package pojo;

public class UserForm {

private String uname; // 与请求参数名称相同

private String upass;

private String reupass;

// 省略getter和setter方法

}

4)创建控制器类

在 springMVCDemo02 应用的 controller 包中创建控制器类 IndexController 和 UserController。

IndexController 的代码如下:

package controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

@Controller

@RequestMapping("/index")

public class IndexController {

@RequestMapping("/login")

public String login() {

return "login"; // 跳转到/WEB-INF/jsp下的login.jsp

}

@RequestMapping("/register")

public String register() {

return "register";

}

}

UserController 的代码如下:

package controller;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import pojo.UserForm;

import com.sun.org.apache.commons.logging.Log;

import com.sun.org.apache.commons.logging.LogFactory;

@Controller

@RequestMapping("/user")

public class UserController {

// 得到一个用来记录日志的对象,这样在打印信息的时候能够标记打印的是哪个类的信息

private static final Log logger = LogFactory.getLog(UserController.class);

/**

* 处理登录 使用UserForm对象(实体Bean) user接收注册页面提交的请求参数

*/

@RequestMapping("/login")

public String login(UserForm user, HttpSession session, Model model) {

if ("zhangsan".equals(user.getUname())

&& "123456".equals(user.getUpass())) {

session.setAttribute("u", user);

logger.info("成功");

return "main"; // 登录成功,跳转到 main.jsp

} else {

logger.info("失败");

model.addAttribute("messageError", "用户名或密码错误");

return "login";

}

}

/**

* 处理注册 使用UserForm对象(实体Bean) user接收注册页面提交的请求参数

*/

@RequestMapping("/register")

public String register(UserForm user, Model model) {

if ("zhangsan".equals(user.getUname())

&& "123456".equals(user.getUpass())) {

logger.info("成功");

return "login"; // 注册成功,跳转到 login.jsp

} else {

logger.info("失败");

// 在register.jsp页面上可以使用EL表达式取出model的uname值

model.addAttribute("uname", user.getUname());

return "register"; // 返回 register.jsp

}

}

}

5)创建页面视图

在 springMVCDemo02 应用的 /WEB-INF/jsp 目录下创建 register.jsp 和 login.jsp。

register.jsp 的核心代码如下:

pageEncoding="UTF-8"%>

Insert title here
姓名:
密码:
确认密码:

在 register.jsp 的代码中使用了 EL 语句“$1{uname}”取出“model.addAttribute("uname",user.getUname())”中的值。对于 EL 和 JSTL 的相关知识,读者可参考《JSP教程》。

login.jsp 的核心代码如下:

pageEncoding="UTF-8"%>

Insert title here

login.gif

姓名:
密码:

${messageError }

6)测试应用

运行 springMVCDemo02 应用的首页面,进行程序测试。

通过处理方法的形参接收请求参数

通过处理方法的形参接收请求参数也就是直接把表单参数写在控制器类相应方法的形参中,即形参名称与请求参数名称完全相同。该接收参数方式适用于 get 和 post 提交请求方式。用户可以将“通过实体 Bean 接收请求参数”部分中控制器类 UserController 中 register 方法的代码修改如下:

@RequestMapping("/register")

/**

* 通过形参接收请求参数,形参名称与请求参数名称完全相同

*/

public String register(String uname,String upass,Model model) {

if ("zhangsan".equals(uname)

&& "123456".equals(upass)) {

logger.info("成功");

return "login"; // 注册成功,跳转到 login.jsp

} else {

logger.info("失败");

// 在register.jsp页面上可以使用EL表达式取出model的uname值

model.addAttribute("uname", uname);

return "register"; // 返回 register.jsp

}

}

通过 HttpServletRequest 接收请求参数

通过 HttpServletRequest 接收请求参数适用于 get 和 post 提交请求方式,可以将“通过实体 Bean 接收请求参数”部分中控制器类 UserController 中 register 方法的代码修改如下:

@RequestMapping("/register")

/**

* 通过HttpServletRequest接收请求参数

*/

public String register(HttpServletRequest request,Model model) {

String uname = request.getParameter("uname");

String upass = request.getParameter("upass");

if ("zhangsan".equals(uname)

&& "123456".equals(upass)) {

logger.info("成功");

return "login"; // 注册成功,跳转到 login.jsp

} else {

logger.info("失败");

// 在register.jsp页面上可以使用EL表达式取出model的uname值

model.addAttribute("uname", uname);

return "register"; // 返回 register.jsp

}

}

通过 @PathVariable 接收 URL 中的请求参数

通过 @PathVariable 获取 URL 中的参数,控制器类示例代码如下:

@Controller

@RequestMapping("/user")

public class UserController {

@RequestMapping("/user")

// 必须节method属性

/**

* 通过@PathVariable获取URL的参数

*/

public String register(@PathVariable String uname,@PathVariable String upass,Model model) {

if ("zhangsan".equals(uname)

&& "123456".equals(upass)) {

logger.info("成功");

return "login"; // 注册成功,跳转到 login.jsp

} else {

// 在register.jsp页面上可以使用EL表达式取出model的uname值

model.addAttribute("uname", uname);

return "register"; // 返回 register.jsp

}

}

}

在访问“http://localhost:8080/springMVCDemo02/user/register/zhangsan/123456”路径时,上述代码自动将 URL 中的模板变量 {uname} 和 {upass} 绑定到通过 @PathVariable 注解的同名参数上,即 uname=zhangsan、upass=123456。

通过 @RequestParam 接收请求参数

通过 @RequestParam 接收请求参数适用于 get 和 post 提交请求方式,可以将“通过实体 Bean 接收请求参数”部分控制器类 UserController 中 register 方法的代码修改如下:

@RequestMapping("/register")

/**

* 通过@RequestParam接收请求参数

*/

public String register(@RequestParam String uname,

@RequestParam String upass, Model model) {

if ("zhangsan".equals(uname) && "123456".equals(upass)) {

logger.info("成功");

return "login"; // 注册成功,跳转到 login.jsp

} else {

// 在register.jsp页面上可以使用EL表达式取出model的uname值

model.addAttribute("uname", uname);

return "register"; // 返回 register.jsp

}

}

通过 @RequestParam 接收请求参数与“通过处理方法的形参接收请求参数”部分的区别如下:当请求参数与接收参数名不一致时,“通过处理方法的形参接收请求参数”不会报 404 错误,而“通过 @RequestParam 接收请求参数”会报 404 错误。

通过 @ModelAttribute 接收请求参数

当 @ModelAttribute 注解放在处理方法的形参上时,用于将多个请求参数封装到一个实体对象,从而简化数据绑定流程,而且自动暴露为模型数据,在视图页面展示时使用。

而“通过实体 Bean 接收请求参数”中只是将多个请求参数封装到一个实体对象,并不能暴露为模型数据(需要使用 model.addAttribute 语句才能暴露为模型数据,数据绑定与模型数据展示后面教程中会讲解)。

通过 @ModelAttribute 注解接收请求参数适用于 get 和 post 提交请求方式,可以将“通过实体 Bean 接收请求参数”中控制器类 UserController 中 register 方法的代码修改如下:

@RequestMapping("/register")

public String register(@ModelAttribute("user") UserForm user) {

if ("zhangsan".equals(uname) && "123456".equals(upass)) {

logger.info("成功");

return "login"; // 注册成功,跳转到 login.jsp

} else {

logger.info("失败");

// 使用@ModelAttribute("user")与model.addAttribute("user",user)的功能相同

//register.jsp页面上可以使用EL表达式${user.uname}取出ModelAttribute的uname值

return "register"; // 返回 register.jsp

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值