Spring MVC Controller接受请求参数的常见方法

Spring MVC Controller接受请求参数的常见方法

1.通过实体Bean接收请求参数

通过一个实体Bean来接收请求参数,适用于get和post提交的请求方式。注意Bean的属性名称必须与请求参数名称一致。
1)创建首页面

<%@ 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>Insert title here</title>
</head>
<body>
	<a href="${pageContext.request.contextPath }/index/register">注册</a><br>
	<a href="${pageContext.request.contextPath }/index/login">登录</a>
</body>
</html>

2)完善配置文件springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	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">
	
	<!-- 使用扫描机制扫描控制器类 -->
	<context:component-scan base-package="controller"/>
	
	<mvc:annotation-driver/>
	<!-- Spring 3.0.x中使用了mvc:annotation-driven后,默认会帮我们注册默认处理请求,参数和返回值的类,
	其中最主要的两个类:DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter ,
	分别为HandlerMapping的实现类和HandlerAdapter的实现类,
	从3.1.x版本开始对应实现类改为了RequestMappingHandlerMapping和RequestMappingHandlerAdapter。 -->
	<!-- 使用resources过滤掉不需要dispathcherservlet的资源(即静态资源,例如css、js、html、images)。
	在使用resources是必须要使用mvc:annotation-driver,否则resources元素会阻止任意控制器被调用 -->
	<!-- 允许css、html、images目录下的文件可见 -->
	<mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
	<mvc:resources location="/html/" mapping="/html/**"></mvc:resources>
	<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
	
	<!-- 配置视图解析器 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver"
		id="internalResourceViewResolver">
		<!-- 前缀 -->
		<property name="prefix" value="/WEB-INF/jsp/" />
		<!-- 后缀 -->
		<property name="suffix" value=".jsp" />
	</bean>

</beans>

3)创建POJO实体类
在src目录下新建pojo包,在pojo包中创建实体类UserForm

package pojo;

public class UserForm {
	private String uname;
	private String upass;
	private String reupass;
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getUpass() {
		return upass;
	}
	public void setUpass(String upass) {
		this.upass = upass;
	}
	public String getReupass() {
		return reupass;
	}
	public void setReupass(String reupass) {
		this.reupass = reupass;
	}
}

4)创建控制器
在controller包中创建控制器类IndexController和UserController

package controller;

import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import pojo.UserForm;

@Controller
@RequestMapping(value="/user")
public class UserController {
	//得到一个用来记录日志的对象
	private static final Log logger = LogFactory.getLog(UserController.class);
	
	
	
	/**
	 * 处理登录
	 * 使用UserForm实体来接受登录页面提交的请求参数
	 */
	@RequestMapping(value="/login")
	public String login(UserForm user,HttpSession session,Model model) {
		if("admin".equals(user.getUname())&&"123456".equals(user.getUpass())) {
			logger.info("成功");
			session.setAttribute("u",user);
			return "main";
		}else{
			logger.info("失败");
			model.addAttribute("messageError","用户名或密码错误");
			return "login";
		}
	}
	
	/**
	 * 处理注册
	 * 使用UserForm实体来接受注册页面提交的请求参数
	 */
	@RequestMapping(value="/register")
	public String register(UserForm user,Model model) {
		if("admin".equals(user.getUname())&&"123456".equals(user.getUpass())) {
			logger.info("成功");
			return "main";
		}else{
			logger.info("失败");
			model.addAttribute("uname",user.getUname());
			return "register";
		}
	}	
}

5)创建页面视图
在/WEB-INF/jsp目录下创建register.jsp和login.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>Insert title here</title>
</head>
<body>
	<h1>登录页面</h1>
	<form action="${pageContext.request.contextPath}/user/login" method="post" >
		<table>
			<tr>
				<td>姓名:</td>
				<td><input class="textSize" type="text" name="uname" value="${uname }"> </td>
			</tr>
			<tr>
				<td>密码:</td>
				<td><input class="textSize" type="password" name="upass" maxlength="20" > </td>
			</tr>
			${messageError }
			<tr>
				<td colspan="2" align="center"><input type="submit" value="登录"></td>
			</tr>
		</table>
	</form>
</body>
</html>
<%@ 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>Insert title here</title>
</head>
<body>
	<h1>注册页面</h1>
	<form action="${pageContext.request.contextPath}/user/register" method="post" name="registerForm">
		<table>
			<tr>
				<td>姓名:</td>
				<td><input class="textSize" type="text" name="uname" value="${uname }"> </td>
			</tr>
			<tr>
				<td>密码:</td>
				<td><input class="textSize" type="password" name="upass" maxlength="20" > </td>
			</tr>
			<tr>
				<td>确认密码:</td>
				<td><input class="textSize" type="password" name="reupass" maxlength="20"> </td>
			</tr>
			<tr>
				<td colspan="2" align="center"><input type="submit" value="注册"></td>
			</tr>
		</table>
	</form>
</body>
</html>

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

通过处理方法的形参接收请求参数也就是直接把表单参数写在控制器类的相应方法的形参中,即形参名称要与请求参数名称完全相同。该接收参数的方式使用与get和post提交的请求方式。

/**
	 * 处理注册
	 * 通过形参接受请求参数,形参名称与请求参数名称完全相同
	 */
	@RequestMapping(value="/register")
	public String register(String uname,String upass,Model model) {
		if("admin".equals(uname)&&"123456".equals(upass)) {
			logger.info("成功");
			return "login";
		}else{
			logger.info("失败");
			model.addAttribute("uname",uname);
			return "register";
		}
	}	

3.通过HttpServletRequest接收请求参数

通过HttpServletRequest接收请求参数适用于get和post提交请求方式。

	/**
	 * 处理注册
	 * 通过HttpServletRequest接受请求参数
	 */
	@RequestMapping(value="/register")
	public String register(HttpServletRequest request,Model model) {
		String uname = request.getParameter("uname");
		String upass = request.getParameter("upass");
		if("admin".equals(uname)&&"123456".equals(upass)) {
			logger.info("成功");
			return "login";
		}else{
			logger.info("失败");
			model.addAttribute("uname",uname);
			return "register";
		}
	}	

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

	/**
	 * 处理注册
	 * 通过@PathVariable接受URL中的请求参数
	 */
	@RequestMapping(value="/register/{unname}/{upass}",method=RequestMethod.GET)
	//必须加method属性
	public String register(@PathVariable String uname,@PathVariable String upass,Model model) {
		if("admin".equals(uname)&&"123456".equals(upass)) {
			logger.info("成功");
			return "login";
		}else{
			logger.info("失败");
			model.addAttribute("uname",uname);
			return "register";
		}
	}

在访问"http://localhost:808/项目名/user/register/admin/123456"路径时,上述代码自动将URL中的模板变量{uname}、{upass}绑定到通过@Pathvariable注解的同名参数上,即uname=admin、upass=123456。

5.通过@RequestParam接收请求参数

通过@RequestParam接收请求参数适用于get和post提交请求方式。

/**
	 * 处理注册
	 * 通过@RequestParam请求参数
	 */
	@RequestMapping(value="/register")
	//必须加method属性
	public String register(@RequestParam String uname,@RequestParam String upass,Model model) {
		if("admin".equals(uname)&&"123456".equals(upass)) {
			logger.info("成功");
			return "login";
		}else{
			logger.info("失败");
			model.addAttribute("uname",uname);
			return "register";
		}
	}	

通过@RequsetParam接收请求方式与通过处理方法的形参接收请求参数的区别:当请求参数与接收参数名不一致时通过处理方法的形参接收请求参数不会报404错误而通过@RequestParam接收请求参数会报404错误

6.通过@ModelAttribute接收请求参数

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

	/**
	 * 处理注册
	 * 通过@ModelAttribute请求参数
	 */
	@RequestMapping(value="/register")
	//必须加method属性
	public String register(@ModelAttribute("user") UserForm user) {
		if("admin".equals(user.getUname())&&"123456".equals(user.getUpass())) {
			logger.info("成功");
			return "login";
		}else{
			logger.info("失败");
			return "register";
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值