在我的应用程序中,我需要为JSP页面内的XML文件准备一个路径。我正在做这样的事情:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
<!DOCTYPE html>
<c:set var="abs_path" value='<%= getServletContext().getRealPath("").replace(" ", "%20").replace("\\", "/") %>' />
但是有一个问题,我得到了followind异常:
org.apache.jasper.JasperException:无法为JSP编译类:
An error occurred at line: 6 in the jsp file: /users.jsp
String literal is not properly closed by a double-quote
3: <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
4: <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
5: <!DOCTYPE html>
6: <c:set var="abs_path" value='<%= getServletContext().getRealPath("").replace(" ", "%20").replace("\\", "/") %>' />
显然这是关于这部分的:.replace("\\", "/")
当我删除它时,我没有得到这个例外。
那是什么意思?我会非常感谢任何线索。
编辑:
我以下列方式使用此变量:
<c:import url="file:/${abs_path}/MyProject/xml/users.xml" var="inputDoc" charEncoding="UTF-8" />
<c:import url="xsl/users_list.xsl"
var="stylesheet" charEncoding="UTF-8" />
<x:transform
xml = "${inputDoc}"
xslt = "${stylesheet}">
</x:transform>
答案 0 :(得分:2)
它不是"\\"
作为正则表达式...因为这不会导致JSP编译错误。 (此外,String.replace(String)
的论证不被解释为正则表达式。)
然而,编译错误似乎确实在说你需要双重转义,而我认为原因是JSP语法“消耗”了一个级别的转义...这个背景。
这是来自JSP 2.1规范:
...
无论属性值是否为a,报价都会一致地完成 文字或请求时属性表达式。引用可以在属性中使用 值,无论它们是使用单引号还是双引号分隔。它是 只需要如下所述。
- 引用
‘
为\’
。这在单引号分隔属性中是必需的 值。- 引用
“
为\”
。这在双引号分隔属性中是必需的 值。- 引用
\
为\\
- 仅当为页面启用EL时(参见章节JSP.3.3.2,“取消激活 EL评价“),文字
$
可以由\$
引用。同样,文字#
也可以 引自\#
。这不是必需的,但对引用EL表达式很有用。- 引用
%>
为%\>
- 引用
<%
为<\%
- 实体
'
和"
可用于描述单身和双人 引号。
无论如何,尝试将有问题的代码片段写为replace("\\\\", "/")
。