先准备一个含有表单的页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<h1>登录页面</h1>
<%--
/demo/login1.do
/demo/login2.do
/demo/login3.do
/demo/login4.do
/demo/login5.do
/demo/login6.do
/demo/login7.do
/demo/login8.do
--%>
<form action="${pageContext.request.contextPath}/demo/login9.do" method="post">
编 号*:<input type="text" name="num"><br>
用户名:<input type="text" name="username"><br>
密 码: <input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
1、通过HttpServletRequest对象获取
//1.在方法参数中添加一个HttpServletRequest对象,通过该对象获取请求参数。
(通过Java反射机制分析代码的结构)
@RequestMapping("/login1.do")
public String login1(HttpServletRequest request) throws UnsupportedEncodingException {
System.out.println("login1()");
//request.setCharacterEncoding("UTF-8");
String num = request.getParameter("num");
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("num="+num+" username="+username+" password="+password);
return "index";
}
2、通过使用@RequestParam注解
通过使用@RequestParam注解(添加到方法的形参前面),DispatcherServlet在调用处理器方法之前,会利用Java反射机制分析方法的结构。这里会调用request对象的方法,先获得参数值,然后赋给对应的形参。如果请求参数名与形参名不一致会获取不到值,则值为null,如果不一致,要通过@RequestParam注解显式绑定,将请求参数名与方法形参名对应。
@RequestParam注解还有如下参数可以使用:
value:请求参数名称
required:此在指定的请求参数是否必须包括,默认是true,提交时如果没有此参数则报错
defaultValue:当没有指定请求参数时,则使用指定的默认值赋值
@RequestMapping("/login2.do")
public String login2(@RequestParam(value = "num",required = true) int number,
String username,@RequestParam("password") String pwd){
System.out.println("login2()");
System.out.println("number="+number+" username="+username+" password="+pwd);
return "index";
}
3、通过javabean获取请求参数
/**
*用于封装请求参数值
* 属性名与请求参数名一致
* 注:
* 名称要一样,类型要匹配
* (会做类型转换,比如将String转换成int)
* 提供相应的get/set方法
*
*/
public class UserParam {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
/**
* 获取请求参数的方式
* 3.通过javabean获取请求参数(将请求参数封装成一个JavaBean)
* DispatcherServlet会将UserParam对象创建好
* (会将请求参数值赋给相应的属性,属性名与请求参数名一致,参数值会自动映射匹配。)
*/
@RequestMapping("/login3.do")
public String login3(UserParam userParam){
System.out.println("login3()");
System.out.println(userParam);
return "index";
}