2010-07-21 40 views
1

當我從MyBean獲取一些文本,例如,<p>Hello world</p>並將其包含到jsp中通過jsp:getProperty生成的html頁面中它將是&lt;p&gt;Hello world&lt;/p&gt; 我可以猜測tomcat的團隊是出於安全原因這樣做了但是這不是我想得到的行爲。Tomcat(6)在將bean包含到resultig html之前從bean中轉義文本

問:如何獲得所需的行爲?

UPD:

@喬恩HORSTMANN

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<jsp:useBean id="xs" class="bean.XS" scope="application"></jsp:useBean> 
<html> 
    <head><title>Test</title></head> 
    <body> 
    <c:out value="${xs.yoba}" escapeXml="true"/> <br> 
    <c:out value="${xs.yoba}" escapeXml="false"/> <br> 
    <c:out value="&lt;p&gt;HELLO WORLD&lt;/p&gt;" escapeXml="true"/> <br> 
    <c:out value="&lt;p&gt;HELLO WORLD&lt;/p&gt;" escapeXml="false"/> 
    </body> 
</html> 

消氣樂趣:

public String getYoba(){ 
    return "&lt;p&gt;HELLO WORLD&lt;/p&gt;" ; 
} 

生成的HTML:

<html> 
    <head><title>Test</title></head> 
    <body> 
    &amp;lt;p&amp;gt;Р「РѕРґ выпуска: 20 июля 2010&amp;lt;/p&amp;gt; <br> 
    &lt;p&gt;Р「РѕРґ выпуска: 20 июля 2010&lt;/p&gt; <br> 
    &amp;lt;p&amp;gt;HELLO WORLD&amp;lt;/p&amp;gt; <br> 
    &lt;p&gt;HELLO WORLD&lt;/p&gt; 
    </body> 
</html> 

我想:

<html> 
    <head><title>Test</title></head> 
    <body> 
    <P>HELLO WORLD</P> 
    </body> 
</html> 
+0

所以你的財產包含已經逃脫的HTML?在這種情況下,我不知道標準方式,您將不得不用您的java代碼中的替換替換轉義字符。 – 2010-07-21 14:35:40

+0

是tomcat對每個其他servlet容器特有的行爲嗎? – Jeriho 2010-07-22 06:12:54

回答

1

您可以使用JSTL C:出標籤與將escapeXml設置爲false來解決這個問題:

<c:out value="${myBean.property}" escapeXml="false"/> 

編輯:

當你吸氣已經返回轉義HTML你將不得不第一次使用它,例如使用Apache Commons Lang StringEscapeUtils:

public String getYoba(){ 
    return StringEscapeUtils.unescapeHtml("&lt;p&gt;HELLO WORLD&lt;/p&gt;"); 
} 
+0

@在帖子中回覆 – Jeriho 2010-07-21 13:10:06