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容器可能有一个针对所有输入表单提交的过滤器设置,这是导致此问题的原因。