这是我在回答上一个问题后出现的错误。本质上我正试图带来文件夹的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>
答案 0 :(得分:0)
与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");
(或者您正在做的任何事情,以便在您的Java代码中重新获得absPath
)
另请注意,客户端的所有JavaScript代码都是完全可控/可欺骗/可攻击的。客户端能够在代码运行时编辑JavaScript变量。例如,客户端可以在使用之前更改路径。牢记这一点!