Java 将反斜杠替换为斜杠时发生异常

Java 将反斜杠替换为斜杠时发生异常,java,jsp,str-replace,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" %> <!DO

在我的应用程序中,我需要在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("\\", "/") %>' />
这并不是说
“\\”
是一个正则表达式。。。因为这不会导致JSP编译错误。(此外,
String.replace(String)
的参数不能解释为正则表达式。)

然而,编译错误似乎表明您需要双重转义,我认为原因是JSP语法正在“消耗”一级转义本身。。。在这方面

这来自JSP 2.1规范:

JSP.1.6引用和转义约定

属性中的引用 无论属性值是否为 文本或请求时间属性表达式。引用可以在属性中使用 值,而不管它们是使用单引号还是双引号分隔的。它是 仅要求如下所述

  • 一个
    '
    被引用为
    \'
    。这在单引号分隔的属性中是必需的 价值观
  • 一个
    被引用为
    \”
    。这在双引号分隔的属性中是必需的 价值观
  • 一个
    \
    被引用为
    \\
  • 仅当为页面启用EL时(参见JSP.3.3.2节“停用 EL Evaluation”),可以用
    \$
    引用文本
    $
    。类似地,文本
    #
    也可以是 由
    \\\code>引用。这不是必需的,但对于引用EL表达式很有用
  • %>
    引用为
    %\>

  • A
    如果你使用单引号(使用
    替换(char,char)
    ),你是否尝试过将value属性用双引号而不是单引号引起来,这样它与var属性一致?@ratchet freak,我刚刚检查了API。我想你就在这里。您应该把您的评论作为一个答案。与具体问题无关,为什么您需要JSP中的信息?无论您想用这种方法解决什么功能需求,都必须以不同的方式解决。您应该查找StringEscapeUtils,并在其中使用XML编码器。//之所以有效,是因为URL规范化规则将//视为与路径中的/具有相同的含义。您不需要将正斜杠字符加倍,但在本用例中它是无害的。
    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("\\", "/") %>' />
    
                    <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>