JAVA前端与后端参数传递方法小结

Java 专栏收录该内容
56 篇文章 0 订阅

一.Servlet后端传值给前端

使用一些Servlet API进行值的存取操作:HttpServletRequest、HttpSession和ServletContext。Struts2对这个三个对象用Map进行了封装,我们就可以使用Map对象来存取数据了。
  
    1)在Action中存值
ActionContext actionContext = ActionContext.getContext(); //get HttpServletRequest
Map<String,Object> request = (Map) actionContext.get("request");
request.put("a", "a is in request");
//get HttpSession
//Map<String,Object> session = (Map) actionContext.get("session");
Map<String,Object> session = actionContext.getSession();
session.put("b", "b is in session");

//get ServletContext
//Map<String,Object> application  = (Map) actionContext.get("application");
Map<String,Object> application  = actionContext.getApplication();
application.put("c", "c is in application");

//get ServletActionContext.request
HttpServletRequest request=ServletActionContext.getRequest()
request.setAttribute("c2", "test5");
request.put("c3","test6")
//或者直接放入上下文中
ActionContext.getContext().put("d","d is in application");

 2)在JSP页面上取值(使用EL表达式)
${a}
${b}
${c}
${d}
${c2}
${c3}
or
${requestScope.a}
${sessionScope.b}
${applicationScope.c}
${actionContext.d}
${requestScope.c2}${requestScope.c3}
or<%=request.getAttribute("d")%>  //使用ActionContext.getContext().put("d","d is an application")的情况

二.jsp从前台向后台传递参数
 
  通过表单传递参数

     1)在前端jsp页面设置form表单,确定需要传递的参数name让用户在input中输入,通过点击按钮后submit()提交到后台

<s:form method="post" action="ActivityAction_toUI.action">
  <table class="serTable">
        <tbody>
            <tr>
                <td>
                    <label>活动名称</label>
                </td>
                <td>
                    <input type="text" class="serput" name="activityName" placeholder="输入文本"/>
                </td>
                <td>
                    <s:submit cssClass="btn1" value="搜索" οnclick="submit();" />
                </td>
            </tr>
        </tbody>
     </table>
</s:form>
    2)点击搜索后activityName会放到HttpServletRequest 中

HttpServletRequest httpReq = ServletActionContext.getRequest();
String s = httpReq.getParameter("activityName");
    另外,在后台也可以通过extends ActionSupport 并构建get/set方法在后台获得其值
        private String activityName;

        public String getActivityName() {
              return activityName;
         }

        public void setActivityName(String activityName) {
               this.activityName = activityName;
        }
       
        public String list(){
                 System.out.println(activityName);
        }
 

三.在springMVC中,controller中方法的参数是自动注入的,在使用注解的方式下,通常有:

                  @RequestParam:  取querystring当中的参数
                  @PathVariable:     取 在@RequestMapping中定义的占位符中的参数(/test/{id})
                  @RequestBody:   取request 这个消息体 (可以组装json对象)

在不使用注解的情况下,默认有一些对象可以自动注入如:

                  HttpServletRequest
                  HttpServletResponse
                  MultipartFile
                  MultipartRequest

除此之外不使用注解的情况下,也可以接受前台传入的querystring中的参数

2.      接受前端传递的对象

从querystring中的参数中获取:

@RequestParam:接受对象类型(Integer、String、Boolean等基本数据类型),不能接收自定义类型。

@RequestParam(required=false)表示该参数非必传

不带注解:接受基本数据类型,若接收类型为自定义类型,会组装参数中与自定义类型属性名和类型相符的参数。

例:

后台:

        @ResponseBody
        @RequestMapping("/accept-object")
        public String acceptObject(
                @RequestParam Integer studentId,
                @RequestParam String studentName,
                Integer studentAge,
                Student student
        ) {
            logger.debug("---->" + studentId);
            logger.debug("---->" + studentName);
            logger.debug("---->" + studentAge);
            logger.debug("---->" + JSON.toJSONString(student));
            return studentId + ">>" + studentName + ">>" +
                    studentAge + ">>" + JSON.toJSONString(student);
        }

前端:

    <div>
        <form action="${pageContext.request.contextPath}/accept-object">
            <span>学生id</span>
            <input type="number" name="studentId" placeholder="studentId"><br>
            <span>学生姓名</span>
            <input type="text" name="studentName" placeholder="studentName"><br>
            <span>学生年龄</span>
            <input type="number" name="studentAge" placeholder="studentAge"><br>
            <input type="submit" value="提交">
        </form>
    </div>

过程及结果:

结论及分析:

1.获取自定义类型的对象时,不使用注解即可以获取

2.在组装对象时可以使用以被获取过的参数


从请求体(body)中获取:

用到的注解@RequestBody

当请求体中是一段json数据时,@RequestBody会解析该json字符串并将其注入指定的自定义类型中。

例:

后台代码:

        @ResponseBody
        @RequestMapping("/accept-json-object")
        public String acceptObject(
                @RequestBody Student student
        ) {
            logger.debug("---->" + JSON.toJSONString(student));
            return JSON.toJSONString(student);
        }

测试:


结果:

结论:通过@RequestBody的方式可以接收以json数据传输的对象,但前提是请求的Content-Type必须为application/json,并且引入了jackson-databind包。


3.      接收前端传递的数组

接收数组可以使用注解方式的@RequestParam、@RequestBody或者无注解的方式,也可以同时使用他们三个

在接受数组时,默认按照方法的参数名来映射请求的参数,目前很多前端框架喜欢传递数组时在请求参数后面加上"[]",所以使用@RequestParam时可以规定value使之对应如@RequestParam("ids[]") Integer[] ids。

例:

后台:

        @ResponseBody
        @RequestMapping(value = "/accept-arr-object")
        public String acceptArray(
                Integer[] ids,
                @RequestParam("ids[]") Integer[] id2s,
                @RequestBody Integer[] id3s
        ) {
            logger.debug("---->" + JSON.toJSONString(ids));
            logger.debug("---->" + JSON.toJSONString(id2s));
            logger.debug("---->" + JSON.toJSONString(id3s));
            return JSON.toJSONString(ids) + ">>" + JSON.toJSONString(id2s) + ">>" + JSON.toJSONString(id3s);
        }

测试:


结果:

4.      总结
在项目中,能够灵活的使用各种传参方式能灵活的实现与前端的交互,总之,自己喜欢的就是最好的。
---------------------

原文:https://blog.csdn.net/palerock/article/details/78034118
 

©️2022 CSDN 皮肤主题:创作都市 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值