Controller接受请求参数的常见方法:
1、通过Bean接受请求参数:
创建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; }}
创建控制器类,在controller包中创建控制器类IndexController和UserController
其中@RequestMapping注解的作用个人浅显的理解就是将方法或类注解为一个“路径”的名称,以便在HTML,JSP(视图)向控制器发送请求时寻找到。
IndexController代码:
package controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controller//在这里@Controller相当于@Controller(“indexController”)@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.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import pojo.UserForm;import service.UserService;@Controller//在这里@Controller相当于@Controller(“userController”)@RequestMapping("/user")public class UserController { //得到一个用来记录日志的对象,这样打印信息的时候能够标记打印的是那个类的信息 private static final Log logger = LogFactory.getLog(UserController.class); //将服务依赖注入到属性userService @Autowired public UserService userService; /** * 处理登录 */ @RequestMapping("/login") public String login(UserForm user, HttpSession session, Model model) { if(userService.login(user)){ session.setAttribute("u", user); logger.info("成功"); return "main";//登录成功,跳转到main.jsp }else{ logger.info("失败"); model.addAttribute("messageError", "用户名或密码错误"); return "login"; } } /** *处理注册 */ @RequestMapping("/register") public String register(@ModelAttribute("user") UserForm user) { if(userService.register(user)){ 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 } }}
创建页面视图,结合视图中更能理解@RequestMapping注解的作用,其中关于本次知识的核心代码为标签中的内容:
创建register.jsp代码:
注册画面
姓名: 密码: 确认密码:
创建login.jsp代码:
后台登录
姓名: 密码: ${messageError }
2、通过处理方法的形参接收请求参数
即将控制类UserConttroller中的register方法的代码修改如下:
@RequestMapping("/register")/***通过形参的计收请求参数,形参名称与请求参数名称完全相同*/ public String register(String uname,String upass,Model model) { if(userService.equals(uname)&&userService.equals(upass)){ logger.info("成功"); return "login";//注册成功,跳转到login.jsp }else{ logger.info("失败"); return "register";//返回register.jsp } }
3、通过HttpServetRequest接受请求参数(推荐使用):
即将控制类UserConttroller中的register方法的代码修改如下:
@RequestMapping("/register") public String register(HttpServletRequest request,Model model) { String uname = request.getParameter("uname"); String upass = request.getParameter("upass"); if(userService.equals(uname)&&userService.equals(upass)){ logger.info("成功"); return "login";//注册成功,跳转到login.jsp }else{ logger.info("失败"); return "register";//返回register.jsp } }
其他@PathVariable、@RequestParam等不多赘述,原理相同。
作者:阿波罗的手
链接:https://www.cnblogs.com/linchenguang/p/11243444.html