• 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中定义的参数值,这样就可以在方法内使用这个值了。
  • 相关阅读:
    PHP学习笔记之继承(面向对象三大特性之一)
    php学习笔记之封装练习题
    PHP学习笔记---封装(面向对象三大特性之一)
    PHP学习笔记之面向对象(上)
    php学习笔记之数组遍历练习题1
    php学习笔记数组与数据结构1(数组)
    php学习笔记数组与数据结构1(日期时间函数及遇到的问题解决)
    顺序查找和二分法查找
    冒泡排序
    字符串类型的一些操作处理
  • 原文地址:https://www.cnblogs.com/hellowhy/p/9741357.html
Copyright © 2020-2023  润新知