Spring MVC(六)--通過URL傳遞參數


URL傳遞參數時,格式是類似這樣的,/param/urlParam/4/test,其中4和test都是參數,這就是所謂的Restful風格,Spring MVC中通過注解@RequestMapping和注解@PathVariable來獲取這種方式的參數傳遞。通過代碼說明,首先我在頁面輸入參數,通過js將URL拼接成URL的樣式然后在控制器中獲取,獲取成功之后將數據渲染成json數據返回,並在當前頁面顯示。

注意⚠️:因為采用了ajax的方式,所以不會渲染新的視圖,只能局部刷新,在當前頁面獲取。下面是整個流程:

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">
<%
    String root = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + root + "/";
%>
<script type="text/javascript"
    src="<%=basePath%>jslib/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="<%=basePath%>jslib/jquery.form.js"></script>
<script type="text/javascript" src="<%=basePath%>js/param.js"></script>
<link href="<%=basePath%>css/param.css" type="text/css" rel="stylesheet">
<title>Insert title here</title>
</head>
<body>

    <!-- 簡單參數傳遞 -->
    <p style="text-align: center;color: red;font-size: x-large;">Spring MVC控制器接受參數方式測試</p>
    <div class="param">

        <!--使用URL傳遞參數  -->
        <div class="public url">
            <p style="text-align: center;">URL方式傳遞參數</p>
            <form id="urlForm">
                <table id="urlTable">
                    <tr>
                        <td>id:</td>
                        <td><input type="text" name="id" value=""></td>
                    </tr>
                    <tr>
                        <td>名稱:</td>
                        <td><input type="text" name="name" value=""></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td style="text-align: right;"><input type="button"
                            value="提交" id="setUrlParam"></td>
                    </tr>
                </table>
            </form>
        </div>
</body>
</html>

頁面如下:

從上面的代碼中可以看出,form表單沒有請求的action,因為我使用的是ajax請求的方式,並且在該文件中已經引入jquery的包,所以下一步是使用ajax提交請求,拼接URL。

2、創建ajax請求

$(function() {
    /* url方式傳遞參數 */
    $("#setUrlParam").click(
            function() {
                $.ajax({
                    url : "./urlParam/" + $("input[name=id]").val() + "/" + $("input[name=name]").val(),
                    type : "POST",
                    success : function(data) {
                        var html = "<tr><td>ID:</td><td>" + data.param.paramId
                                + "</td></tr></br><tr><td>NAME:</td><td>"
                                + data.param.paramName + "</td></tr>";
                        $("#urlTable").append(html);
                    }
                });
            });
});

上面紅色加粗的部分是拼接URL,可以看到請求成功后將數據渲染到當前頁面了。接下來創建控制器

3、創建控制器

@Controller
@RequestMapping("/param")
public class ParamController {

    /**
     * 通過URL的方式傳遞參數
     * 
     * @param id
     * @param name
     * @return
     */ @RequestMapping(value = "urlParam/{id}/{name}", method = RequestMethod.POST) public ModelAndView getParamByurl(@PathVariable("id") Integer id, @PathVariable("name") String name) {
        ModelAndView mv = new ModelAndView();
        System.out.println(id);
        System.out.println(name);
        Param param = new Param();
        param.setParamId(id);
        param.setParamName(name);
        mv.addObject(param);
        mv.setView(new MappingJackson2JsonView());
        return mv;
    }
}

注意上面代碼中加粗的部分:

1⃣️注解@RequestMapping中的value值就是請求這個方法的URL,URL中包含兩個參數id和name

2⃣️注解@PathVariable用來獲取傳過來的參數值,名稱就是前端傳遞的參數名;

控制器獲取到數據后渲染成json視圖,所以在剛才請求的頁面可以獲取到返回的數據。

注意⚠️:使用MappingJackson2JsonView映射json視圖的時候,需要導入相關的包,而且是2.0以上的,我在maven中添加的依賴如下:

<!--jackson json視圖相關 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.5</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.5</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.5</version>
        </dependency>

因為在第二步中已經將數據渲染到請求頁面,所以全部代碼已經完成,下面進行測試。

4、測試

在頁面輸入如下參數:

點擊提交按鈕

在控制台可以看到請求的URL如下:

請求成功的結果如下:

藍色框內是渲染的參數,說明控制器獲取成功!

5、總結

  • 控制器接受URL參數時,需要通過注解@RequestMapping和注解@PathVariable配合使用,前者映射URL,后者獲取參數;
  • URL中的參數需要用{}擴起來,表示處理器需要接受一個URL組成的參數,且參數名稱為{}中的值,name@PathVariable將會獲取在@RequestMapping中定義的參數值,這樣就可以在方法內使用這個值了。


免責聲明!

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



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