将反斜杠替换为斜杠时出现异常

时间:2012-06-09 23:09:58

标签: java jsp str-replace

在我的应用程序中,我需要为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>

1 个答案:

答案 0 :(得分:2)

它不是"\\"作为正则表达式...因为这不会导致JSP编译错误。 (此外,String.replace(String)的论证不被解释为正则表达式。)

然而,编译错误似乎确实在说你需要双重转义,而我认为原因是JSP语法“消耗”了一个级别的转义...这个背景。

这是来自JSP 2.1规范:

JSP.1.6引用和转义约定

  

...

在属性中引用

  

无论属性值是否为a,报价都会一致地完成   文字或请求时属性表达式。引用可以在属性中使用   值,无论它们是使用单引号还是双引号分隔。它是   只需要如下所述。

     
      
  • 引用\’。这在单引号分隔属性中是必需的   值。
  •   
  • 引用\”。这在双引号分隔属性中是必需的   值。
  •   
  • 引用\\\
  •   
  • 仅当为页面启用EL时(参见章节JSP.3.3.2,“取消激活   EL评价“),文字$可以由\$引用。同样,文字#也可以   引自\#。这不是必需的,但对引用EL表达式很有用。
  •   
  • 引用%>%\>
  •   
  • 引用<%<\%
  •   
  • 实体&apos;&quot;可用于描述单身和双人   引号。
  •   

无论如何,尝试将有问题的代码片段写为replace("\\\\", "/")