Spring MVC的Controller接受請求方式以及編寫請求處理方法


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注解的作用,其中關於本次知識的核心代碼為<body>標簽中的內容:

創建register.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">
<style type="text/css">
    .textSize{
        width: 100pt;
        height: 15pt
    }
</style>
<title>注冊畫面</title>
<script type="text/javascript">
    //注冊時檢查輸入項
    function allIsNull(){
        var name=document.registForm.uname.value;
        var pwd=document.registForm.upass.value;
        var repwd=document.registForm.reupass.value;
        if(name==""){
            alert("請輸入姓名!");
            document.registForm.uname.focus();
            return false;
        }
        if(pwd==""){
            alert("請輸入密碼!");
            document.registForm.upass.focus();
            return false;
        }
        if(repwd==""){
            alert("請輸入確認密碼!");
            document.registForm.reupass.focus();
            return false;
        }
        if(pwd!=repwd){
            alert("2次密碼不一致,請重新輸入!");
            document.registForm.upass.value="";
            document.registForm.reupass.value="";
            document.registForm.upass.focus();
            return false;
        }
        document.registForm.submit();
        return true;
    }
</script>
</head>
<body>
    <form action="${pageContext.request.contextPath }/user/register" method="post" name="registForm">
        <table 
        border=1 
        bgcolor="lightblue" 
        align="center">
            <tr>
                <td>姓名:</td>
                <td>
                    <input class="textSize" type="text" name="uname" value="${user.uname }"/>
                </td>
            </tr>
            
            <tr>
                <td>密碼:</td>
                <td><input class="textSize" type="password" maxlength="20" name="upass"/></td>
            </tr>
            
            <tr>
                <td>確認密碼:</td>
                <td><input class="textSize" type="password" maxlength="20" name="reupass"/></td>
            </tr>
            
            <tr>
                <td colspan="2" align="center"><input type="button" value="注冊" onclick="allIsNull()"/></td>
            </tr>
        </table>
    </form>
</body>
</html>

創建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>后台登錄</title>
    <style type="text/css">
    table{
        text-align: center;
    }
    .textSize{
        width: 120px;
        height: 25px;
    }
    * {
        margin: 0px;
        padding: 0px;
    }
    body {
        font-family: Arial, Helvetica, sans-serif;
        font-size: 12px;
        margin: 10px 10px auto;
        background-image: url(${pageContext.request.contextPath }/images/bb.jpg);
    }
    </style>
    <script type="text/javascript">
    //確定按鈕
    function gogo(){
        document.forms[0].submit();
    }
    //取消按鈕
    function cancel(){
        document.forms[0].action = "";
    }
    </script>
  </head>
  <body>
      <form action="${pageContext.request.contextPath }/user/login" method="post">
    <table>
        <tr>
            <td colspan="2"><img src="${pageContext.request.contextPath }/images/login.gif"></td>
        </tr>
        <tr>
            <td>姓名:</td>
            <td><input type="text" name="uname" class="textSize"></td>
        </tr>
        <tr>
            <td>密碼:</td>
            <td><input type="password" name="upass" class="textSize"></td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="image" src="${pageContext.request.contextPath }/images/ok.gif" onclick="gogo()" >
                <input type="image" src="${pageContext.request.contextPath }/images/cancel.gif" onclick="cancel()" >
            </td>
        </tr>
    </table>
    ${messageError }
    </form>
  </body>
</html>

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等不多贅述,原理相同。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM