1.1通过ServletAPI获取
SpringMVC封装的就是原生的servlet
我们进行测试如下所示:
package com.rgf.controller.service; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; /** * 1.获取请求参数的方式: * 1.通过servletAPI获取 * 只需要在控制器方法的形参位置设置HttpServletRequest类型的形参,就可以在控制器方法中使用request对象获取请求参数 */ @Controller public class TestParamController { @RequestMapping("/param/servletAPI") public String getParamByServlet(HttpServletRequest request){ String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println("username:"+username+",password:"+password); return "success"; } }
我们的登陆页面如下所示:
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <h1>index.html</h1> <a th:href="@{/hello}">测试@RequestMapping注解所标识的位置</a><br> <a th:href="@{/abc}">测试@RequestMapping注解的value属性</a> <form th:action="@{/hello}" method="post"> <input type="submit" value="测试@RequestMapping注解的method属性"> </form> <a th:href="@{/hello?username=admin}">测试@RequestMapping注解的params属性(第一种)</a><br> <a th:href="@{/hello(username='admin')}">测试@RequestMapping注解的params属性(第二种)</a><br> <a th:href="@{/aaa/test/ant(username='admin')}">测试@RequestMapping注解支持ant风格的路径</a><br> <br> <form th:action="@{/param/servletAPI}" method="post"> 用户名: <input type="text" name="username"><br> 密码: <input type="password" name="password"><br> 提交: <input type="submit" value="登录"><br> </form> <a th:href="@{/param/servletAPI}"></a> </body> </html>
点击登录之后,即会跳转到成功界面。
同时我们的控制台会进行输出:username:admin,password:123456
1.2通过控制器方法的形参获取请求参数和@RequestParam的使用
我们的页面如下所示:
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <h1>index.html</h1> <a th:href="@{/hello}">测试@RequestMapping注解所标识的位置</a><br> <a th:href="@{/abc}">测试@RequestMapping注解的value属性</a> <form th:action="@{/hello}" method="post"> <input type="submit" value="测试@RequestMapping注解的method属性"> </form> <a th:href="@{/hello?username=admin}">测试@RequestMapping注解的params属性(第一种)</a><br> <a th:href="@{/hello(username='admin')}">测试@RequestMapping注解的params属性(第二种)</a><br> <a th:href="@{/aaa/test/ant(username='admin')}">测试@RequestMapping注解支持ant风格的路径</a><br> <br> <form th:action="@{/param}" method="post"> 用户名: <input type="text" name="username"><br> 密码: <input type="password" name="password"><br> 提交: <input type="submit" value="登录"><br> </form> <a th:href="@{/param/servletAPI}"></a> </body> </html>
package com.rgf.controller.service; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; /** * 1.获取请求参数的方式: * 1.通过servletAPI获取 * 只需要在控制器方法的形参位置设置HttpServletRequest类型的形参,就可以在控制器方法中使用request对象获取请求参数 * 2.通过控制器方法的形参获取 * 只需要在控制器方法的形参位置,设置一个形参,形参的名字要和请求参数的名字一致即可。 * */ @Controller public class TestParamController { @RequestMapping("/param/servletAPI") public String getParamByServlet(HttpServletRequest request){ String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println("username:"+username+",password:"+password); return "success"; } @RequestMapping("/param") public String getParam(String username,String password){ return "success"; } }
我们进行如下界面:
我们点击登陆之后,会跳转到成功界面, 此时控制台会进行输出:
username:root,password:123456
当请求参数的名字和控制器方法的形参名字不一致的时候,如果继续获取的话,控制台会输出为null.面对这种情况,我们需要进行手动添加。
我们需要利用@RequestParam标签:其下有三个属性
我们将界面修改如下所示:
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <h1>index.html</h1> <a th:href="@{/hello}">测试@RequestMapping注解所标识的位置</a><br> <a th:href="@{/abc}">测试@RequestMapping注解的value属性</a> <form th:action="@{/hello}" method="post"> <input type="submit" value="测试@RequestMapping注解的method属性"> </form> <a th:href="@{/hello?username=admin}">测试@RequestMapping注解的params属性(第一种)</a><br> <a th:href="@{/hello(username='admin')}">测试@RequestMapping注解的params属性(第二种)</a><br> <a th:href="@{/aaa/test/ant(username='admin')}">测试@RequestMapping注解支持ant风格的路径</a><br> <br> <form th:action="@{/param}" method="post"> 用户名: <input type="text" name="name"><br> 密码: <input type="password" name="password"><br> 提交: <input type="submit" value="登录"><br> </form> <a th:href="@{/param/servletAPI}"></a> </body> </html>
此时找不到,我们将匹配的方法修改如下所示:
package com.rgf.controller.service; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import javax.servlet.http.HttpServletRequest; /** * 1.获取请求参数的方式: * 1.通过servletAPI获取 * 只需要在控制器方法的形参位置设置HttpServletRequest类型的形参,就可以在控制器方法中使用request对象获取请求参数 * 2.通过控制器方法的形参获取 * 只需要在控制器方法的形参位置,设置一个形参,形参的名字要和请求参数的名字一致即可。 * */ @Contro