背景

梳理维护的程序时,发现以下代码:

/*jsp*/
<input type="hidden" name="hidURL" value="${fileURL}" />
<input type="hidden" name="fileName" value="${fileName}" />
<input type="hidden" name="returnMsg" value="${msg}" />

对${fileURL}是上传到服务器文件的绝对路径。其值得来源搞不懂。
经过查阅,是servlet的request.setAttribute向前台传变量的方法。后台包含了如下代码。

/*servlet*/
request.setAttribute("fileURL", uploadPath);
request.setAttribute("fileName", tempFileName);
request.setAttribute("msg", "success");

梳理相关的知识点:

  1. ${msg}是jsp的EL(express language,表达式语言),可以直接计算表达式或取request里的变量的值。
  2. servlet通过request.setAttribute设置request的值;前台jsp通过EL获取值,实现前后台互动(ps:ajax和jquery方式更简单点,ajax获取服务器返回值,jquery设置dom对象值;c#.net里也有类似的实现)。
  3. jsp本身就是servlet(是servlet的升级),所以可以直接获取HttpServletRequest里的属性值。
  4. jsp支持4中作用域:page(仅当前页)、request(整个请求\响应过程)、session(会话级,贯穿多个request,关闭浏览器生效)、application(整个应用,可跨越浏览器存在)。

参考示例

获取对象的话可以这样:

Java后台: 设置request的属性值

  1. // 返回课程包装类的数据--用于页面显示
  2. request.setAttribute("courseDto", courseDto);

HTML/jsp页面: 可以直接用el表达式获取到request中设置的属性值

  1. <div class="static-item">
  2. <div class="meta">难度级别</div>
  3. <div class="meta-value">${courseDto.course.courseGrade }</div>
  4. </div>

JavaScript: 获取request.setAttribute的对象,两种方式

第一种:

  1. <strong>var courseDto = '<%=request.getAttribute("courseDto")%>';
  2. alert(courseDto);</strong>

第二种:

  1. <strong>var courseDto = '${courseDto}';
  2. alert(courseDto);</strong>

打印出来的对象:

但是我现在想要获取的是courseDto中的一个属性值,

我想在js中直接用

alert(courseDto.course.coourseId);

来显示,结果是不行的。

网上查了一些资料说是:

  1. 1、把js直接写在了JSP页面,所以能获取到。如果单独把JS抽离出来是不可能获取到的。前者服务端解析能或许到,后者客户端解析获取不到。
  2. 2、js里是在客户端执行的,不能直接获取,因为EL表达式是在服务器的时候被解析的,所以可以获取到。一个是客户端的东西,一个是服务器端的东西。
  3. 3、jsp能取到,那是因为他本身就是servlet。js不可能有方法直接获取到HttpServletRequest里面的属性值。
  4. 4、setAttribute是服务器行为,到了客户端就无效了,也谈不上如何用。除非你在jsp的时候就写到js变量里,或者使用ajax请求你需要的数据。

尽管如此,但是还是有办法解决的,如下:

获取request.setAttribute对象的属性值

就是在HTML/jsp页面设置一个隐藏域,然后再通过就是获取

HTML: <input type="hidden" value="${student.name}" id="stuName"/>

JavaScript:var stuName = $('#stuName').value ;

参考:
《js/jquery怎么取后台request.setAttribute的对象或者属性值?》
《JSP的原理、JSP的执行过程》
jsp 的四个作用域 :page、request、session和application的区别

Jsp通过request.setAttribute向前台传递变量相关推荐

  1. 后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值

    讲这些,我们先来了解一下request.setAttribute和request.setAttribute()这两种方法的作用. request.getAttribute("nameOfOb ...

  2. JSP内置对象request——setAttribute/getAttribute的使用

    学习本文章前需知getRequestDispatcher的使用 前言 一.setAttribute是什么? 二.使用步骤示例 1.建ArrayList和HashMap 2. 使用setAttribut ...

  3. 使用request对象进行数据传递

    在进行请求转发时,需要把一些数据传递到转发后的页面进行处理,需要使用request对象的setAttribute方法将数据保存到request范围内的变量中 使用: request对象可以视为一个域, ...

  4. request.setAttribute()用法

    小问题: JSP1代码 String [] test=new String[2]; test[0]="1"; test[1]="2"; request.setA ...

  5. request.setAttribute()

    讲这些,我们先来了解一下request.setAttribute和request.setAttribute()这两种方法的作用. request.getAttribute("nameOfOb ...

  6. java中的setattribute_JSP request.setAttribute()详解及实例

    javascript request.setAttribute()详解 request.setAttribute()怎么用的? JSP1代码 String [] test=new String[2]; ...

  7. 避坑——request.getSession().setAttribute与request.setAttribute的区别

    刚开始不理解这个区别,导致每次前台取到的验证码总是有差别:坑---所以也记录下 equest.setattrbute()顾名思义只能在一个request内有效,如果重定向回客户端,将取不到值.requ ...

  8. request.getParameter()与request.setAttribute()的区别

    request.getParameter(),request.setAttribute()区别如下: (1)request.getParameter()取得是通过容器的实现来取得通过类似post,ge ...

  9. JSP中Request属性范围

    JSP属性范围,通过以下几个测试代码来学习request属性的范围 测试一(JSP动态指令方式传参): 测试内容: <jsp:param .../>添加参数,通过<jsp:forwa ...

最新文章

  1. c语言求出两个最大素数,求两个正整数的最大公约数      思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法。通式分别为 f(x, y) = f(y, x%y...
  2. 如何杀死进程及子进程
  3. c++11 变长参数的使用(制作一个多参数多类型求和函数)
  4. C语言strstr()函数(在主字符串里查找子字符串,返回第一次找到的子字符串以及后面的字符串)
  5. 医学影像中用 python 读取 nrrd 文件、nrrd转nii、nrrd转h5
  6. 让您的Xcode键字如飞
  7. 莫烦Matplotlib可视化第二章基本使用代码学习
  8. 【软件开发底层知识修炼】十一 链接器-链接脚本
  9. struts2 resultType为chain时 传值
  10. Python深度学习:常见优化算法
  11. wps页码从指定页开始_wps怎么自动生成页码以及设置页码从第三页开始
  12. 计算机网络基础知识总结,就这一篇了
  13. 稻城智慧旅游太极计算机,智慧旅游,让梦中的“香格里拉”离我们更近
  14. Session-判断用户登陆验证码是否正确
  15. 全球最厉害最有钱的24位顶尖程序员及其代表项目(公号回复“顶尖程序员”下载PDF资料)
  16. UUI Make StartUp Disk
  17. 【Excel学习笔记13】对一个单元格内容进行条件分列,分列成多列
  18. C#人民币大小写转换
  19. Docker Privileged access
  20. 【建议收藏】17个XML布局小技巧

热门文章

  1. 《SGM-Nets: Semi-global matching with neural networks》
  2. 魅蓝s6 android系统版本,魅蓝s6处理器相当于骁龙多少-与非网
  3. oracle 12cdba pdf,【C26】《深入理解Oracle12c数据库管理》PDF 下载
  4. Java动态代理InvocationHandler的一点感悟
  5. set echo on/off,set term on/off,set feedback off,set heading off命令
  6. 5大抖音变现模式,看懂你就知道如何抖音如何吸粉
  7. 逆水寒土豪最多的服务器,逆水寒土豪到底多有钱?几个人可以承包一个服!
  8. 高僧与少女的私生子!看懂了,你离成功就不远!
  9. Linux下QT更改系统时间并同步到硬件时钟
  10. HTML百度地图开发者平台的使用,实现简单位置定位