<b>编写JSR-168 Portlet指南</b>[Java编程]
本文“<b>编写JSR-168 Portlet指南</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
择要
JSR-168是合适于portlet开辟人员的Java API调集.计划符合标准的JSR-168 portlet的缘由有很多.可移植性就一个显而易见的好处.按照标准编写的代码更简单在门户服务器之间移动.大都基于Java的门户服务器都支持JSR-168 portlet.
另一个好处是更易于结合.当portlet符合JSR-168标准时,通过Web Services for Remote Portlets (WSRP)生产者公开JSR-168 Portlet会更简单一些.WSRP供应了一个通过Web service结合portlet内容的尺度.JSR-168和WSRP 1.0 portlet功效是精密耦合的.JSR-168 to WSRP portlet桥操纵JSR-168的URL重写API.本文将阐述开辟JSR-168 portlet以便得到可移植性的最佳实践.
1. 老是操纵URL重写API,以得到Portlet中的内容
Java开辟人员常常在以下所示JSP中编写图象的URL:
<img src="/<%= request.getContextPath()%>/images/logo.gif"/>
这在JSR-168 portlet中是不精确的.精确的办法是:
<img src="<%= renderResponse.encodeURL(renderRequest.getContextPath()+
"/images/logo.gif") %>"/>
encodeURL()办法可以采取完好途径URI大概完好限定URL.完好途径URI是最常用的.在利用JSR-168 portlet将资源嵌入Web Application Archive (WAR)中时,可以利用此技术.在将图象安排到单独服务器上时,可以利用完好限定URL.专门为静态内容供应服务的缓存服务器就是一个示例,它卸掉来自门户服务器的通信量.固然可以通过对完好限定URL利用encodeURL()来引用portlet以外的内容,但应当只在无法通过客户机拜候资源时这样做.假如客户机可以直接浏览资源,则无需对URL利用encodeURL().比方,假若有一台Web服务器,可用该服务器得到门户用户无法直接浏览的防火墙内的静态内容,则需求调用encodeURL().假如这些内容在防火墙之外,并且门户用户可以直接浏览到Web服务器,则无需调用encodeURL().
2. 不要将途径附加到重写URL中
传入RenderRequest的encodeUrl()办法中的URL在调用该办法之前必须是完好的.在调用该办法之后,无法增添URL的某些部份.比方,假如想从XSLT转换中生成一个URL转换,则不能将已编码的基本URL(http://foo.com/)作为参数传送,并将途径(pages/bar.jsp)附加到该转换中的已编码基本URL中.
以下调用演示了将URL编码到图象中的精确方法:
<@= renderResponse.encodeURL(renderRequest.getContextPath()+
"/images/logo.gif")@>
它利用一个.portal文件在BEA WebLogic Portal 9.2中生成以下HTML片段:
<img src="http://localhost:7001/PortalWebApp/images/logo.gif;
PORTAL_TAU=W3f6FbmLLcgZq9Fpv1JHLs5rrJG8Lgj2nnDVJqdfShhRGFnsqCKZ!-545815275"/>
以下调用是不精确的.URL并不指向想要的资源.
<@= renderResponse.encodeURL(renderRequest.getContextPath()+
"/images/")+"logo.gif"@>
它利用.portal文件在WebLogic Portal 9.2中生成以下HTML文件:
<img src="http://localhost:7001/PortalWebApp/images/;PORTAL_TAU=W3f6FbmLLcgZq9Fpv1JHLs5rrJG8Lgj2nnDVJqdfShhRGFnsqCKZ!-545815275logo.gif"/>
3. 利用名称空间限定客户端脚本变量和办法
假定您想利用portlet中的JavaScript考证用户输入.以下JavaScript功效大概很有效:
<script>
function validate(foo) {
if (foo.bar.value=="") {
return false;
}
return true;
}
</script>
同一页面中的其他portlet大概也有一个命名为validate()的具有差别逻辑的JavaScript办法.门户框架本身大概利用JavaScript办法.这个问题的办理办法是利用客户端脚本中的名称空间办法和顶层变量.<portlet:namespace/>标志将为每个portlet生成一个惟一标识符.第一步是通过taglib directive将标志库包含在JSP中.
<%@taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
脚本中的validate()办法可以对标志加以辨别.
<script>
function validate<portlet:namespace/>(foo) {
if (foo.bar.value=="") {
return false;
}
return true;
}
</script>
以下是调用带名称空间的JavaScript办法的方法:
<form action="http://www.somesite.org/servlet"
method="GET" onsubmit="return validate<portlet:namespace/>(this);">
<label for="bar">Text(required): </label>
<input type="text" name="bar" id="bar">
</form>
以上是“<b>编写JSR-168 Portlet指南</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |