EL和JSTL中对xml的解析差异

80酷酷网    80kuku.com

  js|xml

一,问题描述

最近我们的一个应用,要从支持jsp2.0的服务器移植到只支持sp1.2的服务器,经过一段时间的移植,测试发现与xml相关的一些数据的表现和存储出现了不少的问题,发现本来应该存储为xml字符串的信息,最终被存储为了解析后的纯文本,即xml中的标签全部被html化,例如<user>变为了<user>,我们的应用以前没有问题啊,为什么移植到jsp1.2的服务器后就出了xml的问题呢?

二,问题分析

后来经过排查发现,原来我们在jsp2.0的服务器中,使用了大量的EL语法,当移植到jsp1.2的服务器后,我们使用替换算法,将EL部分替换为了JSTL,例如:
<input type="text" name="username" value="${username}"/>
变为了:
<input type="text" name="username" value="<c:out value='${username}'/>"/>
这样对一般的EL而言,都是正确的,但是如果EL中存放的是xml字符串变量,那么这么替换后就会出问题,对于如下例子:
<input type="text" name="username" value="<c:out value='${xmlStr}'/>"/>
这样的话,input域中存放的将不会xml字符串,而是被转化为纯html的普通字符串,即所有的<>等等都被替换为了<$gt;。

三,解决办法

解决办法不难,只要将在c:out中加入ecapseXml属性即可,例如:
<input type="text" name="username" value="<c:out value='${xmlStr}' escapeXml='false'/>"/>
这样就解决了,input域中存储的依然是xml字符串。

四,思考

服务器环境的移植,绝非是一个简单的事情,所涉及的修改可能会很多,像xml这种问题只是其中的一种问题,另外还有数据源配置方式不同、JMS版本支持不一样等等。 



分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: