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