Java jsp:setProperty是否转义esc序列?

Java jsp:setProperty是否转义esc序列?,java,jsp,Java,Jsp,我使用jsp:setProperty用用户数据填充bean字段。我的JSP页面如下所示: <%-- skipped code --%> <jsp:setProperty name="myBean" property="*"/> <%-- skipped code --%> <input type="text" name="myField" value=""></td> <%-- skipped code --%> 当

我使用
jsp:setProperty
用用户数据填充bean字段。我的
JSP
页面如下所示:

<%-- skipped code --%>
<jsp:setProperty name="myBean" property="*"/>
<%-- skipped code --%>
<input type="text" name="myField" value=""></td> 
<%-- skipped code --%>

当我在文本字段中指定包含esc序列的值(例如,
\r\n
),然后尝试在我的bean中调试
setMyField(字符串s)
setter时,
s
似乎带有转义字符(例如,
\\r\\n


这是常见的
jsp:setProperty
行为吗?我试图查找有关此功能的信息,但未成功。我需要文档或任何其他证据证明它应该以这种方式工作。

当您说
s
似乎带有转义字符时(例如
\\r\\n
),这是调试器的行为。实际上有四个字符:
'\\'、'r'、'\\'、'n'

如果通过
System.out.println(myBean.getMyField())
打印出来,您应该可以在控制台中看到
\r\n


当您执行
myBean.setMyField(“\n”)
,实际上只有一个字符:
'\n'

我怀疑输入字段正在被(应用程序中的其他内容)清除

一般来说,转义序列

\r
\n
当它们通过输入字段进入时,需要转义(出于安全原因)。这意味着在服务器处理输入之前向这些序列添加额外的反斜杠

我建议将“提交”之前的序列替换为

<br>


很抱歉,我无法向您提供说明jsp标记没有执行此操作的官方文档

我部分同意@changeng

您看到的行为是调试器本身,所以不要担心。我认为它试图保留您发送的所有字符,并且您必须知道完整的值,因此它会在序列中的每个
\
追加一个
\

它不希望您将
'\n'
新行
混淆,因此他保留了所有内容


如果您在控制台上打印,它将与您从客户端发送的序列相同。

您使用的是哪台服务器?@summerbull,Oracle WebLogic server 10.3.4。这有关系吗?:)jsp标记的jsp实现在服务器代码中,不是吗?:)对于jsp:setProperty和setMyName(),您得到的结果是否相同?(即getMyName()是否在两者之后调用时给出相同的结果?@SummerBull,您的意思是通过调用jsp中的
setMyField(String s)
来手动设置属性?因此,如果我将sysout添加到setter方法中,它将
\r\n
打印为回车符+换行符?我现在无法访问工作站,因此无法验证此行为。它不会。如果您需要这种行为,您需要自己转换它们。您的意思是调试和常规模式之间没有区别吗?正确。setProperty不会专门处理转义字符。您能否从官方资源中提供证据证明
setProperty
不会专门处理转义字符?这就是我需要的。你知道如何在我的应用程序中执行此转义吗?是否有扩展jsp标记或类似内容的常用方法?jsp是服务器端,输入是客户端。我不认为JSP正在进行这种转义。当用户点击“提交”时,输入将被发送回服务器,并在JSP中使用(来自服务器的响应)。在该输入到达JSP之前,它已经需要被清理(例如,通过javascript函数),转义是在服务器端执行的。如果您没有在客户端执行某些操作,那么您的servlet容器可能有一个针对所有输入表单提交的过滤器设置,这是导致此问题的原因。