【问题标题】:Unterminated String Literal from getServletContext().getRealPath("/") in JSPJSP 中来自 getServletContext().getRealPath("/") 的未终止字符串文字
【发布时间】:2011-03-16 19:15:43
【问题描述】:

这是我在此处回答上一个问题后出现的错误。本质上,我试图随身携带文件夹的 absPath,这样我就可以在运行时制作一些文件,而不管我的代码位于何处。我被推荐使用

getServletContext().getRealPath("/");

要找到正确的路径。

我在我的 JSP 页面中尝试过,但是当我创建 absPath 变量时,我得到了一个未终止的字符串文字。这是我尝试运行的脚本。

<script type="text/javascript">
        var RemoteUserId = "<%=(request.getRemoteUser()==null)? "blah" : request.getRemoteUser()%>";
        var contextPath = "<%= request.getContextPath()%>";         
        var extPath = "<%=extPath%>";
        var absPath = "<%=getServletContext().getRealPath("/")%>";
        var env='<%=string1%>';
</script>

我错过了什么?我是否必须转义返回的路径名,或者我是否误解了我应该使用它的时候。

编辑** 这是源在访问页面时显示的内容
(稍作调整,因此我没有显示完整的 C: 路径)

<script type="text/javascript">
        var RemoteUserId = "blah";
        var contextPath = "/TRACK";         
        var extPath = "http://xxx/sales/it/tlp/ext-3.2.1";
        var env='null';
        var absPath = "C:\Documents and Settings...\TRACK\";
</script>

【问题讨论】:

  • 生成的输出是什么?右键页面,查看源码。另外,为什么需要这个作为 JS 变量?为什么不在服务器端确定呢?我看不出这些信息对 JS/客户端有什么用,因为它无论如何都无法访问它。
  • 我猜是因为我不确定如何设置服务器端。这个项目非常大,我不确定我需要添加什么,以便我可以从一个类启动服务器,而不是仅仅从服务器视图启动 Tomcat。我打算将此路径传递给 ajax 请求(因为我们已经从框架设置中完成了),然后我可以在 java 端访问它。
  • 请求进来后在Java端访问即可。
  • 我能看一下这个的sn-p代码吗?或者一个例子的链接。使用框架的设置方式,请求是通过来自 Ext-JS 的 ajax 请求传递的......我需要用参数填充(比如这个 absPath)。
  • 不清楚功能要求是什么以及您正在使用什么框架,这使得您无法在应该处理此请求的 Java 代码中仅使用 ServletContext#getRealPath()。顺便说一句,您的问题是由反斜杠引起的。它们也是 JS 字符串中的转义字符。但毕竟,您真的不需要将 Java 变量作为 JS 变量传递回 Java,而您可以在 Java 端本身访问它。

标签: javascript relative-path servlets


【解决方案1】:

就像在 Java 中一样,反斜杠是 JS 中的转义字符。您需要对它们进行转义以表示文字反斜杠。换句话说,您的 absPath 变量必须以

结尾
var absPath = "C:\\Documents and Settings...\\TRACK\\";

你可以这样做

var absPath = "<%=getServletContext().getRealPath("/").replace("\\", "\\\\")%>";

但是,通过 JavaScript 将 Java 变量传回 Java 对我来说毫无意义。当代码即将处理请求时,只需在 Java 端访问它。想象一下,您正在使用 servlet 来处理请求,就这样做

String absPath = getServletContext().getRealPath("/");

而不是

String absPath = request.getParameter("absPath");

(或者你正在做的任何事情来让absPath回到你的Java代码中)

另请注意,所有 JavaScript 代码都完全可以由客户端控制/欺骗/破解。客户端能够在代码运行时编辑 JavaScript 变量。例如,客户端可以在使用之前更改路径。请记住这一点!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-16
  • 2014-06-09
  • 2014-06-14
  • 1970-01-01
  • 2013-03-27
相关资源
最近更新 更多