网站地图 | RSS订阅 老铁博客 - 上海SEO优化|上海网站建设|蜘蛛池出租|站群代搭建
你的位置:首页 » 前端脚本 » 正文

escapexml xml特殊字符转义对照

2020-8-13 13:54:22 | 作者:老铁SEO | 0个评论 | 人浏览

  标签中2113有一个escapeXml属性,其默认值为5261true,意思是是否过滤为xml文档。


  1.如果为escapeXml="false",则将其中的4102html、xml解析1653出来。如value="<fontsize=16>java</font>",会显示为大小为16的”java“。


  2.如果为escapeXml="true",则显示<fontsize=16>java</font>在项目中有时需要在后台将字符串拼接,然后传到前台显示。当在后台拼接的时候比如拼接了特殊字符如@、#、《》,<,>等的时候,传到前台时,和html的标签或者其他有冲突,导致不能正常显示。


  3.比如刚刚在后台拼接了几个<br>想用于前台换行,结果用jstl的c:out输出到前台的时候成了。


  4.在<c:outvalue="值"escapeXml="false"/>中加入escapeXml="false"就能阻止这种冲突。


  5.然后在需要显示的地方写入${fn:escapeXml(后台传值)},这样也能解决。以上是jstl的解决方法。


  6.在struts中是用<s:propertyvalue="escape="值"escape="false"/>解决的。


  JSTL<c:out>标签中escapeXML的问题


  ${fn:escapeXml(param)}这样才是将字2113符转换


  而out里面的5261这个的意思是是否过滤为4102xml文档。


  如果为false,则将其中的html、xml解析出1653来。


  如<fontsize=16>java</font>,会显示为大小为16的”java“


  如果为true,则显示<fontsize=16>java</font>


  escapexml对哪些字符编码


  \u是什么2113......一个转义字符,假设'\u'=a,那5261么s是“u6e05534e59275b66”s1是“a6e05a534ea5927ab66”这个时候两个字节一个4102汉字,6e05是16进制下的某1653汉字编码,6e一个字节,05一个字节,"6e05"是一个字符串,不是一个汉字编码string:chara[9]...


  <c:outvalue="${buttons}"escapeXml="false"/>


  这是JSTL标签的2113用法


  JSTL简介


  JSTL是一个不断完善的5261开放4102源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能1653运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat4.x。但是在即将推出的JSP2.0中是作为标准支持的。


  JSTL目前的最新版本为1.02,最终发布版为1.0。JSTL包含两个部分:标签库和EL(ExpressionLanguage表达式语言)语言。标签库目前支持四种标签:


  标签URI前缀示例


  Corehttp://java.sun.com/jstl/corec<c:tagname...>XMLprocessinghttp://java.sun.com/jstl/xmlx<x:tagname...>I18Ncapableformattinghttp://java.sun.com/jstl/fmtfmt<fmt:tagname...>Databaseaccess(SQL)http://java.sun.com/jstl/sqlsql<sql:tagname...>


  Core支持JSP中的一些基本的操作;


  XMLprocessing支持XML文档的处理;


  I18Ncapableformatting支持对JSP页面的国际化;


  Databaseaccess(SQL)支持JSP对数据库的操作。


  由于本人水平有限,本文仅介绍Core标签,如有兴趣,可一起探讨其它三种标签的使用与扩充。


  EL语言介绍


  EL语言是JSTL输出(输入)一个JAVA表达式的表示形式。


  在JSTL中,EL语言只能在属性值中使用。EL语言只能通过建立表达式来进行调用。在属性值中使用表达式有三种方式。


  1、value属性包含一个表达式


  <some:tagvalue=""/>


  在这种情况下,表达式值被计算出来并根据类型转换规则赋值给value属性。比如:<c:outvalue=""/>中的就是一个EL,它相当于JSP语句<%=request.getAttribute(“username”)%>或<%=session.getAttribute(“username”)%>


  2、value属性包含一个或多个属性,这些属性被文本分割或围绕


  <some:tagvalue="sometext"/>


  在这种情况下,表达式从左到右进行计算,并将结果转换为字符串型(根据类型转换规则),并将结果赋值给value属性


  3、value属性仅仅包含文本


  <some:tagvalue="sometext"/>


  在这种情况下,字符串型属性value将根据类型转换规则转换为标签所希望的类型。


  EL语言的操作符


  取得某个对象或集合中的属性值


  为了获得集合中的属性,EL支持以下两种操作


  1.使用.操作符来获得有名字的属性。例如表达式表明对象user的username属性


  2.使用[]操作符来获得有名字或按数字排列的属性。


  表达式和表达式含义相同


  表达式表明row集合的第一个条目。


  在这里user是一个类的对象,它的属性username必须符合标准JavaBean的规范,即必须为username属性定义相应的getter、setter方法。


  Empty操作符(空值检查)


  使用empty操作符来决定对象、集合或字符串变量是否为空或null。例如:


  true


  如果request的参数列表中的username值为null,则表达式的值为true。EL也可以直接使用比较操作符与null进行比较。如true。


  比较操作符操作符描述


  ==或eq相等检查


  !=或ne不等检查


  <或lt小于检查


  >或gt大于检查


  <=或le小于等于检查


  >=或ge大于等于检查


  数字运算符与逻辑运算符均与JAVA语言相同,不再列表。


  Core标签库


  1、通用标签


  <c:out>


  <c:out>标签用于在JSP中显示数据,它有如下属性属性描述是否必须缺省值


  value输出的信息,可以是EL表达式或常量是无


  defaultvalue为空时显示信息否无


  escapeXml为true则避开特殊的xml字符集否true


  例子:您的用户名是:<c:outvalue=””default=”guest”/>


  显示用户的用户名,如为空则显示guest


  <c:outvalue=""/>


  指定从session中获取username的值显示;


  <c:outvalue=""/>


  显示username的值,默认是从request(page)中取,如果request中没有名为username的对象则从session中取,session中没有则从application(servletContext)中取,如果没有取到任何值则不显示。


  <c:set>


  <c:set>标签用于保存数据,它有如下属性属性描述是否必须缺省值


  value要保存的信息,可以是EL表达式或常量否


  target需要修改属性的变量名,一般为javabean的实例否无


  property需要修改的javabean属性否无


  var需要保存信息的变量否无


  scope保存信息的变量的范围否page


  如果指定了target属性,那么property属性也必须指定。


  例子:<c:setvalue=""var="test2"scope=”session”/>


  将test.testinfo的值保存到session的test2中,其中test是一个javabean的实例,testinfo是test对象的属性。


  <c:settarget=""property="city"value=""/>


  将对象cust.address的city属性值保存到变量city中


  <c:remove>


  <c:remove>标签用于删除数据,它有如下属性属性描述是否必须缺省值


  var要删除的变量是无


  scope被删除变量的范围否所有范围,包括page、request、session、application等


  例子:<c:removevar="test2"scope="session"/>


  从session中删除test2变量。


  2、流控制标签


  <c:if>


  <c:if>标签有如下属性属性描述是否必须缺省值


  test需要评价的条件,相当于if(...){}语句中的条件是无


  var要求保存条件结果的变量名否无


  scope保存条件结果的变量范围否page


  <c:choose>


  这个标签不接受任何属性


  <c:when>


  <c:when>标签有以下属性属性描述是否必须缺省值


  test需要评价的条件是无


  <c:otherwise>


  这个标签同样不接受任何属性


  例子:<c:iftest="">


  user.wealthyistrue.


  </c:if>


  如果user.wealthy值true,则显示user.wealthyistrue.


  <c:choose>


  <c:whentest="">


  user.generousistrue.


  </c:when>


  <c:whentest="">


  user.stingyistrue.


  </c:when>


  <c:otherwise>


  user.generousanduser.stingyarefalse.


  </c:otherwise>


  </c:choose>


  只有当条件user.generous返回值是true时,才显示user.generousistrue.


  只有当条件user.stingy返回值是true时,才显示user.stingyistrue.


  其它所有的情况(即user.generous和user.stingy的值都不为true)全部显示user.generousanduser.stingyarefalse.


  由于JSTL没有形如if(){…}else{…}的条件语句,所以这种形式的语句只能用<c:choose>、<c:when>和<c:otherwise>标签共同来完成了。


  3、循环控制标签


  <c:forEach>


  <c:forEach>标签用于通用数据,它有以下属性属性描述是否必须缺省值


  items进行循环的项目否无


  begin开始条件否0


  end结束条件否集合中的最后一个项目


  step步长否1


  var代表当前项目的变量名否无


  varStatus显示循环状态的变量否无


  例子:<c:forEachitems=""var="vector">


  <c:outvalue=""/>


  </c:forEach>


  相当于java语句for(inti=0;i<vectors.size();i++){


  out.println(vectors.get(i));


  }


  在这里vectors是一个java.util.Vector对象,里面存放的是String数据,vector是当前循环条件下String对象。实际上这里的vectors可以是任何实现了java.util.Collection接口的对象。


  <c:forEachbegin="0"end="100"var="i"step="1">


  count=<c:outvalue=""/><br>


  </c:forEach>


  输出:


  count=0


  count=100


  <c:forTokens>


  <c:forTokens>标签有以下属性属性描述是否必须缺省值


  items进行循环的项目是无


  delims分割符是无


  begin开始条件否0


  end结束条件否集合中的最后一个项目


  step步长否1


  var代表当前项目的变量名否无


  varStatus显示循环状态的变量否无


  例子


  <c:forTokensitems="a:b:c:d"delims=":"var="token">


  <c:outvalue=""/>


  </c:forTokens>


  这个标签的使用相当于java.util.StringTokenizer类。在这里将字符串a:b:c:d以:分开循环四次,token是循环到当前分割到的字符串。


  4.导入文件和URL


  JSTL核心标签库支持使用<c:import>来包含文件,使用<c:url>来打印和格式化URL,使用<c:redirect>来重定向URL。


  <c:import>


  <c:import>标签包含另外一个页面代码到当前页,它有以下属性属性描述是否必须缺省值


  url需要导入页面的url是无


  context/后跟本地web应用程序的名字否当前应用程序


  charEncoding用于导入数据的字符集否ISO-8859-1


  var接受导入文本的变量名否page


  scope接受导入文本的变量的变量范围否1


  varReader用于接受导入文本的java.io.Reader变量名否无


  varStatus显示循环状态的变量否无


  <c:url>


  <c:url>标签输出一个url地址,它有以下属性属性描述是否必须缺省值


  urlurl地址是无


  context/后跟本地web应用程序的名字否当前应用程序


  charEncoding用于导入数据的字符集否ISO-8859-1


  var接受处理过的url变量名,该变量存储url否输出到页


  scope存储url的变量名的变量范围否page


  例子:


  <c:importurl="http://www.url.com/edit.js"var="newsfeed"/>


  将urlhttp://www.url.com/edit.js包含到当前页的当前位置,并将url保存到newsfeed变量中


  <ahref="<c:urlurl="/index.jsp"/>"/>


  在当前页的当前位置输出<ahref="http://www.yourname.com/index.jsp"/>,http://www.yourname.com是当前页的所在的位置。


  <c:redirect>


  <c:redirect>标签将请求重新定向到另外一个页面,它有以下属性属性描述是否必须缺省值


  urlurl地址是无


  context/后跟本地web应用程序的名字否当前应用程序


  例子:


  <c:redirecturl="http://www.yourname.com/login.jsp"/>


  将请求重新定向到http://www.yourname.com/login.jsp页,相当于response.setRedirect("http://www.yourname.com/login.jsp");


  <c:param>


  <c:param>标签用来传递参数给一个重定向或包含页面,它有以下属性属性描述是否必须缺省值


  name在request参数中设置的变量名是无


  value在request参数中设置的变量值否无


  例子:


  <c:redirecturl="login.jsp">


  <c:paramname="id"value="888"/>


  </c:redirect>


  将参数888以id为名字传递到login.jsp页面,相当于login.jsp?id=888


  JSTL的优点


  1、在应用程序服务器之间提供了一致的接口,最大程序地提高了WEB应用在各应用服务器之间的移植。


  2、简化了JSP和WEB应用程序的开发。


  3、以一种统一的方式减少了JSP中的scriptlet代码数量,可以达到没有任何scriptlet代码的程序。在我们公司的项目中是不允许有任何的scriptlet代码出现在JSP中。


  4、允许JSP设计工具与WEB应用程序开发的进一步集成。相信不久就会有支持JSTL的IDE开发工具出现。


  总结


  上面介绍的仅仅是JSTL的一部分,如果要使用JSTL,则必须将jstl.jar和standard.jar文件放到classpath中,如果你还需要使用XMLprocessing及Databaseaccess(SQL)标签,还要将相关JAR文件放到classpath中,这些JAR文件全部存在于下载回来的zip文件中。这个zip文件可以从http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard/jakarta-taglibs-standard-1.0.zip下载。


  参考资料


  1、http://java.sun.com/products/jsp/jstl/


  sun公司的JSTL站点


  2、http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html


  jakarta小组的JSTL站点


  3、http://www.manning.com/bayern/appendixA.pdf


  JSTL的参考文档,本文很多内容都是从这个PDF文件里翻译的。


  4、<<J2EE编程指南(1.3版)>>


  介绍了JSTL的雏形,wrox的书都是精品。

  • 本文来自: 老铁博客,转载请保留出处!欢迎发表您的评论
  • 相关标签:
  • 已有0位网友发表了一针见血的评论,你还等什么?

    必填

    选填

    记住我,下次回复时不用重新输入个人信息

    必填,不填不让过哦,嘻嘻。

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    相关推荐