| sin's profile有话好好说BlogLists | Help |
|
6/29/2006 AJAX 框架、类库推荐(1)
6/27/2006 Windows Live Spaces 即将到来!Windows Live Spaces 即将到来!不只是采用新的 Windows Live 风格的界面,还会增加一些新的令人激动的功能。随着 Friends Module(朋友模块)的加入,你将能在空间中建立一个放朋友们的地方。 Friends Explorer,将和 Windows Live Messenger 整合在一起,允许你和你的朋友探索其它人并建立新的朋友关系。 你将会注意到空间顶部变化了,当前的文字广告被横幅广告代替。想要没有广告的空间,可以订阅 Hotmail Plus来选择关掉它。 另外,你的空间标题和列表标题不再限于空间顶部。你可以选择把它变成一个模块显示在空间的任何地方。 breadcrumbing 的引入和一个可选择的 navigation module(导航模块)允许你和你的访客更轻松的在你的空间中航行。 还有许多方式用来展示你自己和定制空间。你可以增加叫做“Windows Live Gadgets”的小型应用程序。 转换到 Windows Live Spaces 后你的空间 URL 也会无缝转换。 下面是截图:
英文参考: 参考: The Space Craft
Hey Spaces fans,
Windows Live Spaces is arriving soon! Not only will your Space adopt the cool new Windows Live look & feel, but you will also be able to add new and exciting functionality to your space. With the addition of the Friends Module, you can create a place to hang out with your friends.
The Friends Explorer, which will be integrated with and accessible through Windows Live Messenger, will enable you and your friends to explore others and create new friendships.
You’ll notice some changes we’ve made to the header, including the replacement of the current text ad links with banner ads across the top. Of course, as always, if you prefer to see no ads at all in your space, remember you always have the option to switch them off as a subscriber.
In addition, your title and tagline will no longer be limited to the Spaces header. Instead, you can choose to display the title and tagline of your space as a module and have it appear wherever you want it to in your space. Removing the title from the header means you have more freedom and control over things like your space title and navigation to stuff in your space. Instead of always being stuck at the top, you can place them wherever you want.
The introduction of breadcrumbing and an optional new navigation module will enable you and your visitors to easily navigate through your space.
We are also going to offer many new ways to express yourself and customize your space. You’ll be able to add mini-applications called Windows Live Gadgets developed by the community for the community. Can’t find headlines, games, or other gadgets that reflect YOUR personality? Build your own gadget or bribe a techie friend to do it for you!
Of course with all this great stuff, we also have to make some changes to our URL structure. As Greg Phipps blogged about last month, your URL will be changing one final time with the switchover to Windows Live Spaces. Don’t worry though, we are working hard to make this as seamless as possible for you and the visitors to your space.
Here’s a glimpse of what the new Windows Live Spaces will look like:
* Note text & UI may change.
Thanks for making Spaces your home. We’re working hard to get this created for you and we hope you’re as excited as we are!
As always, we look forward to hearing from you. Thanks, The Spaces Team 6/20/2006 刚看到一篇文章,里面夹杂着大量的ENGLISH,感觉不错。什么时候我说话也能这样就OK了。公司与客户签订的是一个长期的IT外包大合同,包括软件,硬件,服务等等。从另外一个角度来说,包括开发,维护,BI等等。这么大的合同客户与外包商是如何实施与执行的?如何保证客户的Business一如既往地运行,并且还更好地受益于IT的外包呢?我试着从我的team角度,以及从我所能得到的信息尽量来理解这个大的合同是如何实施与执行的。尽管这只是对这个IT外包大合同管中窥豹,但我希望我的文字也能让更多的人认识一个外包案例,也希望能和此案例有兴趣的做IT外包的方方面面的专家和公司探讨。 我的team为客户公司各种信息系统提供技术支持,是大IT外包合同下的一个维护项目,负责客户business中的Europe和Asia区。客户的US business不在我team的support scope内,但有时候需要与US的一些team打交道。这里US port就不予仔细考虑。 由于客户把IT外包给我们,客户方就不用招聘很多的IT人员,大部分的工作依照外包合同都由外包服务提供者来完成(我们公司并不是客户唯一的外包商,某些方面的服务还外包给了其他专业公司,如HelpDesk的工作和服务器维护就外包给了HP——HP的HelpDesk非常不错,而且服务器就是HP服务器^_^)。因此,绝大多数客户方的IT人员都是外包合同的执行参与者与项目管理者。客户对自己的IT部门人员所进行的培训除了必要的business培训,就是leadership的培训。 客户是一家全球500强企业,Business非常多,客户的IT工作量也非常大。那么客户如何与外包商合作、沟通、实施这么大的外包合同呢?这就有必要提到外包商的customer relationship management team。 这个team和客户的management team密切合作,交换意见,共同研究合同的实施与改进,并致力于与客户关系的建立。因为合同签订的出发点就是双方都能从合同中受益,双方都有责任和义务帮助对方提高Business和收益,要不然,这个长期的合同可能没多久就会被Close。 customer relationship management team经常会和客户一起评估当前的business以及IT的服务情况,做一些必要的变化。这不,去年Europe刚被merge into Asia的管理team,才一年的时间,由于这一年客户Business的变化,Europe的Business变的重要起来,今年就又要 seperate出去,成立独立的management team,方便更好地support Business。 客户和BRM(Business relationship manager)一起评估project的大小,需要多少resource,然后我们(外包商)就开始project team的招兵买马,作为客户的Contract员工组成客户的IT部门。所谓Contract员工就是人是我们招的,和客户签聘用合同,我们为客户工作,每个resource每小时多少钱客户付给我们公司,我们来进行人员管理,客户只关注项目上的事。(我们有时候叫自己公司为人贩子公司,从另一方面来公司做的是目前时髦的人力猎头工作,只不过人都先招过来了,推荐合适的供客户挑选。呵呵) 客户把整个IT部门分成很多team,各team负责不同的工作,彼此间又相互支持。除了与程序直接打交道的各种Business team外,其中IT部门的HelpDesk team、Database workgroup、CTO team、Common application team和Ops team与我们team联系最密切。前面几个team一看就知道他们做什么的,我稍微解释一下Common application team和Ops team做什么。 Common application team顾名思义就是负责一些Common applications的,比如客户要求所有程序都是SSO(Single Sign On) enable的,这就需要有个系统能实现SSO的需求,保证程序的访问安全,并统一利用公司的员工信息库,保证信息的一致,防止各系统“各自为政”,减少重复工作。客户是使用的Site Minder作为SSO服务器,那么SSO的配置与维护就是一个Common的工作,这就是Common application team要做的事。当然,还有很多这样的Common application。 Ops team一般负责系统的CCM(Change Control Management)中的deploy。如果系统做了改动,在客户同意执行change后,Ops team就会执行这次change。 好了,那么我们到底如何来support Business的呢? 所有的team如何执行自己的职责在project的小合同中都有说明。其中如何处理客户的issue与需求,哪些事情是哪个team的scope都在 escalation chart中明确定义了的,然后让HelpDesk拿着这些escalation chart来处理。HelpDesk是在做IT系统维护时各个IT support team与Business之间唯一的联系点(SPOC - Single point of Contact)。当然,这是理想状态,也有Business用户直接联系我们的。 HelpDesk接到用户escalate的issue后,先自己做初步的分析,如果HelpDesk能自己解决,问题就不会再往下传递了;如果是 Business方面的问题,用户把问题发到用户的队列中,并跟踪问题什么时候关闭;如果是我们系统技术方面的问题或Bug,HelpDesk就按照前面定义的escalation chart,把问题dispatch到我们team的队列中;如果是其他team的范围也同样的process。因为所有的程序在交给我们team(或其他team)之前就定义了程序的信息,专门有team来维护所有程序的信息。根据客户对所有Business的评估,把相应的程序分为不同的重要程度,这样所有的问题也都根据对Business的影响程度定义了几种不同的紧急程度,再定义了每种紧急程度的问题需要在规定的时间内解决。用户定义了一些 metrics用来度量我们服务的质量,并规定了可需要达到的值。这些都在project的合同中定义,双方签字同意。这就是传说中的SLA (Service Level Agreement)^_^。相应地,我们也在我们公司(外包商)的project Plan中阐述客户的metrics,让所有member都知道并执行,保证meet客户的SLA。 当问题被dispatch到我们的队列中后,我们就需要在SLA规定的时间内解决问题。每周,专门的Monitor team会从工具中run出各个team这周服务的report,查看是否meet SLA。甚至那些对Business非常重要的系统每天就有report,然后report给management team。这也是客户对我们考核的一个重要指标。 由于我们中国的team要support客户Europe和Asia的系统,欧洲客户与中国有6个小时时差,这要求我们的team有灵活的上班安排,来 meet客户的Business时间。我们把team分成2部分,一部分support欧洲程序,一部分support亚洲程序。由于我们公司在中国只是一个分公司,印度还有team,印度和中国也有2个小时时差,所以我们安排中国team上 下午班,这样下班不用太晚;印度team同样上 下午班,但他们和欧洲只有4个小时时差,这样就可以更好地meet客户的Business时间。 当然有US的程序,上班时间又有些不同。在其他时间team的member提供On Call support。所谓On Call Support就是说在这段时间内,如果我们support的系统有问题,用户或HelpDesk可以Call我们的工作Cell Phone,我们就可以马上登陆到内部工作环境,开始移动办公。
12/13/2005 此SPACE已关闭8/11/2005
| 8/10/2005 Portlet API参考实现的秘密概要 在Stefan Hepper和Stephan Hesmer的portlet系列文章的第二部分中,作者把着笔点从Portlet API的基础概要介绍转移到了Portlet API的参考实现(RI reference implementation也就是Pluto)的细节描述。作者还提供了一系列portlet的实例来说明怎样扩展Portlet API的标准函数。企业portal提供商使用可插的用户接口组件(portlets)向信息系统提供表示层。不幸的是,以前的提供商都只定义了自己的portlet API,在整个行业之中互不相容。为了标准化整个行业进程,Java团体发布了Java规范要求(JSR)168:Portlet规范。这篇系列文章的第一部分介绍了JSP 168的细节。第二部分重点放在portlet API的参考实现(RI)上,也就是Pluto。此外还提供了一个portlet的实例,读者可以通过这个实例来学习。文章第一节描述了RI的体系结构,包括portlet容器的可拆卸性的概念和怎样在其他项目中重用portlet容器。第二节介绍了RI的安装和使用,以及怎样快速配置portlet。其中文章还包括一个逐步深入的实例。注意:你可以通过文章之后的资源链接下载原代码 Pluto的体系结构 让我们先来看一下Pluto的体系结构和一些基本的概念。我们先简要的说明portal的参考实现和portlet容器在整个portal体系结构中的位置。接下来我们在细节方面研究Pluto的体系结构。最后,我们看一下在portlet容器里很有趣的:portlet 展开。 关于portal Pluto一般用来演示Portlet API如何工作以及向开发者提供一个测试portlets的实例平台。然而,如果没有驱动来运行和测试portlet容器有点麻烦。Pluto的简单portal组件只是架构于portlet容器,它只满足了JSR 168的基本要求。(相比之下,Apache的开源项目Jetspeed就要专业的多。Jetspeed将着重中在了portal本身而非portlet容器之上,并且更多的考虑了其他团体的需求。)图一描述了portal的基本体系结构。Portal的网络应用程序处理客户端请求,从用户的当前页面得到portlets,之后调用portlet容器以获得每个portlet的内容。portal使用Portlet 容器的 Invoker API来访问 portlet容器,从 portal看来,portlet 容器的主要接口是支持基于请求的方法调用 portlets。容器用户要想获得portal的相关信息则必须实现portlet容器的Provider SPI (Service Provider Interface)的callback接口。最终,portlet容器通过portlet API调用所有portlet。 图一:Pluto中的一个简单的portal的结构 Portlet容器 Portlet容器是portlet的运行环境,也是每个portal的组成核心。它需要有关portal本身的信息,且它必须重用自身的公共代码。因此,portlet容器和其他portal组件是完全分离的。这就是说,你可以将独立的portlet容器嵌入任意的portal,只要你满足portlet容器的条件,比方说实现所有的SPI。 Portlet容器的 Invoker API,或者叫入口点,扮演了portlet容器的主调用接口的角色。Portlet容器的Invoker API将portlet容器的生存周期(init,destroy)和基于请求的调用方法(initPage(),performTitle(),portletService()等等)结合了起来。因为portlet容器最后调用portlet的方法名有点类似portlet API的主portlet接口,不同的是是否必须要传递portlet定义符。正是因为这个附加的portlet定义符,portlet容器才能正确的调用portlet。除了要用API访问portlet容器之外,portal还必须扩展portlet容器定义的SPI。因此,RI引入了容器服务:在容器注册过的可拆卸组件提供基础功能并且可扩充。RI包含如下一些容器内的自建服务(前四个必须在运行portlet容器时实现,最后一个是可选的): 信息提供器:给portlet容器提供portal和portal框架的信息。通过这个接口来获得信息和存储portal信息。这些信息包括导航栏里的URL、portlet上下文、portlet模式和窗口状态控制。 工厂管理器:定义了怎么怎样通过工厂方法来获得一个具体实现。(一个标准的portal应该已经存在一个实现。) 日志服务:定义了一个日志工具(一个标准的portal应该已经存在一个实现)。 配置服务:定义了怎么样获得配置参数(一个标准的portal应该已经存在一个实现)。 属性管理器(可选):属性管理器接口的实现允许处理JSR168规范中定义的属性。严格的说,portlet对象模型也是SPI中的一部分,只是它在SPI中占有一个特殊的地位。Portlet对象模型处理所有的potlet对象,他由一个交织在一起的接口集合组成。因此,不能把他和容器服务分开来考虑。 图二:portlet容器结构 Portlet的部署 portlet 容器 架构在servlet容器之上并且增强了它的功能。为了实现它,portlet 容器将原始servlet 加入每一个portlet应用程序的war文件中,这一点我们在图三3中有所描述。部署portlet组件时,先取得原始的war文件,然后向其中加入一个新的或者修改原有的web.xml,并且加入一个servlet作为一个调用点来包装每个portlet。之后, portlet的部署器(?这个原文是Then the portlet deployment passes the modified war file to the application server deployment)会传递一个修改过的war文件到应用服务器,将其部署到应用服务器系统。在portlet的调用过程中,portlet容器调用添加进去的servlet,作为部署portlet的war文件的入口点。 图三:RI中portlet的部署 Pluto和WSRP标准 正像第一部分所描述的那样,JSR 168与远程portlet网络服务(the Web Services for Remote Portlets (WSRP))标准紧密结合。几乎同时形成的这两种标准发布了开源实现,实现了在各自的规范中描述必要的功能。作为共有的目标,两种标准努力能够在一起更好的合作。现在,portlet容器可以很好的运行WSRP portlet。 Pluto可以在一个portal中运行多个portlet容器。从而Pluto的portlet容器可以被初始化多次。更重要的是,可以用不同的方式来初始化它。每一个portlet容器可以使用SPI的不同实现。 RI的安装 你会发现Pluto的安装过程非常简单。执行install命令,build目录/build下的install.bat或者install.sh。接下来安装程序会提示你指定Tomcat的安装目录。(注意:在MS windows下文件分隔符不是反斜杠。)在这之后,安装进程会创建RI和所有portlet,安装portlet到指定的Tomcat目录。安装完成后请查看文档以确定完成了所有必要的手工设置工作。现在可以启动Tomcat,通过http://localhost:8080/pluto/portal来访问RI了。就是这么简单! 怎样部署portlet 在Pluto中部署portlet和它的安装一样的简单。只要记住你必须首先安装了Pluto,它正确的设置了prepareRun.properties。这是部署过程所必须的。在命令提示符下转到build目录,输入命令deployPortlet.bat , 用portlet war文件做参数,比如: deployPortlet.bat C:\pluto\portlets\bookmark_04\driver\bookmark_04.war Portlet实例 我们来看一个portlet的例子,Bookmark。它充分利用了Portlet API并且阐明了我们学到的概念。我们以一个简单的例子开始,我们在每一节一步步扩展这个Bookmark portlet,最后我们将几乎用到所有的portlet API,把它做成一个高级的portlet。 Bookmark portlet:版本一第一个Bookmark portlet用到了Portlet API中如下的一些特性: Portlet API 接口The Portlet API interface Java服务器页面(jsp)JavaServer Pages (JSP) pages Portlet API标签库The Portlet API tag libraries 部署描述符Deployment descriptors 第一个Bookmark portlet的两个JSP页面分别显示和编辑模式。每个JSP页面只是简单的显示了portlet的当前portlet模式和windwos状态。为了显示这些信息,我们用到了Portlet API标签库(只是部分程序代码,请下载全部代码,不然很难理解:译者注): public void doView (RenderRequest request, RenderResponse response) throws PortletException, IOException { response.setContentType("text/html"); String jspName = getPortletConfig().getInitParameter("jspView"); PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName); rd.include(request,response); } 接下来的代码是例子中的一个简单的JSP 页面(即view.jsp:译者注): Hello, I am the bookmark portlet. Current Portlet Mode: Current Window State: Bookmark portlet:版本二 第二个Bookmark portlet进一步深入了Portlet API 的概念。除了第一例子所使用到的Portlet API 特性,它增加了: 动作处理Action handling Portlet 参数 Portlet preferences 验证参数 A preferences validator 在部署描述符中预定义参数 Predefined preferences in the deployment descriptor 在第二个Bookmark例子里,两个新的JSP页面替代了版本一中的。首先,edit.jsp允许通过portlet动作添加和删除书签。在这个JSP页面中输入的书签将作为portlet参数存放。其次,view.jsp 以超链接显示出作为portlet参数存放的书签。 Bookmark portlet:版本三 新增用到的特性: 地区性部署描述符 Localizable deployment descriptor 资源包ResourceBundles 现在部署描述符和JSP页面从资源包里(ResourceBundles)获得可显示的字符集,他们都可以支持英文和德文了。 Bookmark portlet:版本四 最终的这个portlet例子通过portlet API传递递交参量(render parameters)示范了导航的概念(the navigational state concept )。在版本四里有七个书签,但默认一页只显示四个,如图四所示。通过点击next和back的超链接,用户可以导航到向前或者向后的五个书签。初始点将被初始化为递交参量,使得用户可以使用浏览器的刷新、后退和前进按钮。 Bookmark portlet版本四的界面 Portlet复习 象你所看到的那样,portlet规范的参考实现包括两个部分:portal和portlet容器。Portal作为一个简单的运行portlet容器的测试驱动。Portlet容器作为一个能迅速使用到其他portal(比如jetspeed)里的普通组件。 这个portlet实例用到了许多portlet API里的很重要的概念。你可以用所有portlet API和servlet API的特性来扩展这个实例。比方说你可以用一个servlet在新窗口中输出其他有用的信息,如一个打印预览。还可以通过Http会话与portlet进行交互。实际上,因为portlet是一个强大的技术,能用他实现的功能是无穷无尽的。 PowerToy新功能完全图解教程
HTML模块完全图解教程 [Q] HTML模块实现功能 [Q] 如何添加HTML模块 [Steps]
[Q] 如何使用该模块 [Q] 使用该模块还有什么其他问题? 界面设计模块完全图解教程
[Q] 界面设计模块实现功能 [Steps]
[Q] 如何使用该模块
[Q] 使用该模块还有什么其他问题? 视频音乐模块完全图解教程
相关教程: HTML模块完全图解 界面设计模块完全图解 [Q] 视频音乐模块实现功能 [Q] 如何添加视频音乐模块 [Steps]
[Q] 如何使用该模块 A. 不可见 [Invisible] 选择该模式隐藏整个模块,一般用于播放音乐, 建议选中自动播放, 否则无法自动开始
[Q] 使用该模块还有什么其他问题? [Q] 安全性 使用Eclipse plus Pluto开发你的第一个与JSR168兼容的Portlet使用Eclipse plus Pluto开发你的第一个与JSR168兼容的Portlet By Terry.li SpiritSeekerS@sqatester.com[/pre] 本文将介绍开发基于Portlet Specification v1.0 (JSR168) 的Portlet应用. 我们使用Pluto作为Portlet Container和Portal. 同时可以将开发的Portlet应用迁移到任何支持JSR168的Portlet Container上. · 为什么要发布Portlet Specification? 什么是JSR168? 由于越来越多的公司开发了各自的Portal组件和基于其的Portal产品(如Bea, IBM, Oracle, Sun, Sybase, Novell, SAP, Jetspeed, Vignette 等.这种互不兼容的接口实现不断带给程序提供商各种问题和麻烦, 为了解决这种问题, JCP发布了JSP168 (Java Specification Request), Portlet Specification, 用以提供不同Portal和Portlets之间的互用性 · 什么是Portal? Portal是基于WEB的应用程序, 它将不同资源进行整合并展现给用户 通常其有如下三个特点: a. Personalization (个性化) b. Single sign on (单点登陆) c. Content aggregation (内容聚合) 其中Content aggregation指的是将不同来源的信息整合到一个页面中用来让用户更方便的进行使用. 比如, 如果某客户需要进行一次商业采购,以往需要访问不同的供应商的主页得到相关信息, 但如果使用Portal将所有不同的货物供应商的商品catalog页面都整合到一个Catalog Portal页面中, 那么所有的商品信息都可以更快的进行浏览,筛选和定货, 加快了客户的商业运作效率. · 什么是Portlet? Portlet是一种基于WEB组件的JAVA技术, 由Portlet Container进行管理. 处理请求并动态返回页面, 可以做为Portal 的可拔插的用户界面组件. · 什么是Portlet Container? Portlet Container用来管理Portlet的生命周期并且提供其运行所需要的必要环境. 并且为Portlet Preferences提供持久性(Persistent)存取服务.但是其不支持内容的Aggregation. Aggregation由Portal组件提供. 注: Portlet Preferences是Portlet的一个新特性,提供类似数据库的功能.但是不是用来取代数据库. 只是用来存取简单的Portlet参数配置. · 什么是WSRP? WSRP 是 OASIS Web Service for Remote Portlets的缩写. WSRP主要用来简化Portal对于各种资源或者程序的整合的复杂性, 可以避免编程带来的整合的复杂性. 并且Portal的管理员可以从大量的服务中选择需要的用以整和到Portal中. · Portlet and Servlet 摘自(Portlet Specs v1.0) 相同点: • Portlets are Java technology based web components • Portlets are managed by a specialized container • Portlets generate dynamic content • Portlets lifecycle is managed by a container • Portlets interact with web client via a request/response paradigm 不同点: • Portlets only generate markup fragments, not complete documents. The Portal aggregates portlet markup fragments into a complete portal page • Portlets are not directly bound to a URL • Web clients interact with portlets through a portal system • Portlets have a more refined request handling, action requests and render requests • Portlets have predefined portlet modes and window states that indicate the function the portlet is performing and the amount of real state in the portal page • Portlets can exist many times in a portal page Portlet特有: • Portlets have means for accessing and storing persistent configuration and customization data • Portlets have access to user profile information • Portlets have URL rewriting functions for creating hyperlinks within their content, which allow portal server agnostic creation of links and actions in page fragments • Portlets can store transient data in the portlet session in two different scopes: the application-wide scope and the portlet private scope Servlet特有: • Setting the character set encoding of the response • Setting HTTP headers on the response • The URL of the client request to the portal · 什么是Pluto ? Pluto 是 Apache开发下的一个Open Source项目, 是基于Portlet Specs的一个 Portlet Container 的实现. 它也提供了Sample Portal实现. 但是功能相对简单: 例如, 1) 没有复杂的Layout实现. 2) 不是multi-user enabled, 比如, 不同User之间的Portlet Preferences互相是可以share的. 请记住Pluto只是一个Portlet Container的实现, 不是一个Portal的实现. 如果你需要功能更为强大的Portal,可以使用JetSpeed , 它同样也是Apache的一个Open Source Project. 请参考文章末尾的资源部分. · 概念 如图: Figure 1.1 a. Decorations and controls (修饰部分及 控制部分) b. Portlet fragment (Portlet 片段) c. Portlet window (Portlet 窗口) d. Portlet page (Portlet 页面) Figure 1.1 · 开发工具( Eclipse2.1, Pluto-plugin, Jakarta-tomcat-4.1.29) 下载地址: Eclipse http://www.eclipse.org/downloads/index.php Pluto-plugin http://prdownloads.sourceforge.net/plutoeclipse/org.eclipsefan.pluto.ui_1.0.0.zip?download Tomcat4.1 http://mirrors.midco.net/pub/apache.org/jakarta/tomcat-4/v4.1.29/bin/jakarta-tomcat-4.1.29.zip JDK1.4 http://Java.sun.com · 配置开发环境 Step1 : 解压eclipse-SDK-2.1.1-win32.zip Step2 : 解压org.eclipsefan.pluto.ui_1.0.0.zip , 并将其拷入eclipse\plugins目录 下, 如下: eclipse\plugins\org.eclipsefan.pluto.ui_1.0.0\ \Icon \Lib \Source \Webapp … Step3: 解压tomat4.1到一目录. 并且配置好Tomcat服务器. Congratulations, It’s done! a. 使用Portlet Wizard 来创建Portal 1) 选择File > New > Project… > Portal > Pluto Portal application, 单 击Next 2) 指定Project名称 , 这里使用pluto, 然后单击Next. 3) 指定Tomcat路径, 单击Finish. 之后eclipse会将Pluto安装到tomcat上,并且自动配置好环境. b. 创建Portlets Application 1) 创建Pluto portlet application 2) 输入project名称,这里用portlets c. 最后生成的工程如图 d. 通过portlet.xml 生成/更新 web.xml e. 部署 Portlets 1) 编译 portlets 工程. 2) 在 [your tomcat installation directory]/webapps下, 新建目录portlets 3) 将portlets工程下的web-root目录下所有文件, 拷入以上新建的portlets目录中. Tip: 如果在每次修改后你厌倦了Ctrl+C 和 Ctrl+V, 你可以在Portlets工程目录下自己编一个Bat文件, 然后你可以在eclipse里的Package Explorer中看到它, 双击就可以了. 其中deploy.bat文件就是实现其功能的. 4) Start tomcat. 5) 在IE 中输入: http://localhost: 8080/pluto/portal, 你应该能看到portal 页面. · Sample Portlet 在Portlets工程文件创建过程中, 自动生成许多文件, 包括一个简单的Portlet, 我们来观察一下生成的sample portlet. 1) 与Servlet非常类似, Portlet扩展自GenericPortlet import javax.portlet.*; public class SimplePortlet extends GenericPortlet 2) 其三个方法对应了Portlet 标题栏中的三个联接 (View, Edit, Help) public void doView(…) public void doEdit(…) public void doHelp(…) Figure 1.9 3) 三个方法分别调用了三个JSP文件, 用以生成Portlet fragment, 同样也可以调用Servlet产生Portlet fragment. 与Servlet应用类似,也可以使用 getInitParameter(String s)方法,得到配置文件中Portlet的初始值. 只不过Servlet使用web.xml,而Portlet 使用portlet.xml文件. portlet.xml <init-param> <name>jspView</name> <value>/jsp/view.jsp</value> </init-param> SimplePortlet.java String jspName = getPortletConfig().getInitParameter("jspView"); · Portlet Tag library 1)defineObjects Tag 如果打开其中的一个JSP文件,你会发现,和Servlet一样,JSP中可以使用Portlet的一些variables.例如: renderResponse renderRequest portletConfig 但是必须声名: <portlet:defineObjects/> 其中不可以定义任何属性或者包含任何内容. 2) actionURL Tag 属性 值类型 对应值 windowState String minimized, normal, maximized portletMode String view, edit, help var String 任何值 secure String true,false <portlet:actionURL windowState=”normal” portletMode=”edit”> <portlet:param name=”action” value=”login”/> </portlet:actionURL> 创建一个action URL , 当访问它时将使portlet window变为normal 装态, 模式变为 edit. 3) renderURL Tag 属性 值类型 对应值 windowState String minimized,normal,maximized portletMode String view, edit, help var String 任何值 secure String true,false <portlet:renderURL portletMode=”view” windowState=”maximized”> <portlet:param name=”number” value=”1”/> <portlet:param name=”page” value=”2”/> </portlet:renderURL> 创建一个render URL , 当访问它时将使portlet window变为maximized装态, 模式变为 view. 4) namespace Tag 为目前的Portlet产生一个唯一的Value. 防止和其他的Portlet 或者Portal页面上的value产生冲突. <A HREF=”javascript: <portlet:namespace/>doFoo()”>Foo</A> 5) param Tag 属性 值类型 name String <portlet:param name=”myParam” value=”someValue”/> 注: param Tag不可以有body content. 总结 Pluto目前是v1.0, 有部分Portlet规范没有完全实现, 例如, renderResponse.setTitle (), 同时你可以从Apache的CVS下载最新的Pluto代码, 希望这编文章可以帮大家搭建一个简单的Portlet开发环境 , 熟悉Portlet相关的知识. 资源: · Pluto http://jakarta.apache.org/pluto · Pluto Mail List http://news.gmane.org/gmane.comp.jakarta.pluto.user · WSRP Spec1.0 http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsrp · Apache的WSRP实现 http://ws.apache.org/wsrp4j/ · Apache’s Portal, JetSpeed: http://jakarta.apache.org/jetspeed/site/index.html · JSR 168: http://www.jcp.org/en/jsr/detail?id=168 · "Portlet 规范介绍" By Stefan Hepper 和 Stephan Hesmer o Part 1: Get your feet wet with the specification's underlying terms and concepts (August 2003) o Part 2: The Portlet API's reference implementation reveals its secrets (September 2003) 8/8/2005 几种开源Portal的简单介绍分析
配置方法,不同的版本的配置可能有变化,如不成功,可以自行察看文档。
Liferay Professional在Tomcat下的安装配置方法: eXo Platform在Tomcat下的安装配置方法: Jetspeed2在Tomcat下的安装配置方法:
8/5/2005 日志固定链接<----->日志编辑链接比较多个日志固定链接与日志编辑链接,如 和 http://spaces.msn.com/members/msnpro/PersonalSpace.aspx?_c11_BlogPart_handle=cns!1pSt_gP1XO9shQaTTwgpJy7Q!1699&_c11_BlogPart_blogpart=blogentry&_c11_BlogPart_frompart=myspace&_c=BlogPart&_c02_owner=1 我们可以发现,日志固定链接与日志编辑链接之间的关系(蓝色为相同部分,绿色为区别之处)。
这样就得到了这个技巧—— 将/Blog用PersonalSpace.aspx?_c11_BlogPart_handle=替换,将.entry用&_c11_BlogPart_blogpart=blogentry&_c11_BlogPart_frompart=myspace&_c=BlogPart&_c02_owner=1替换,回车即可编辑相应的日志。反之亦然。Rainwalk Jump it! javascript:(function(){var b="_blogpart",a="http://spaces.msn.com/members/",l=window.location.href;/*by noroom*/if(l.match(a)){window.location=a+l.replace(/.+mbers\/([^\/]+).*/,"$1")+((l.match(/blog\//i))?"/PersonalSpace.aspx?_c11"+b+"_handle="+l.replace(/.+blog\/([a-z0-9!_-]+)\.entry.*/i,"$1")+"&_c11"+b+b+"=blogentry&_c11"+b+"_frompart=myspace&_c=BlogPart&_c02_owner=1":"/Blog/"+l.replace(/.+handle=([^&]+).*/i,"$1")+".entry")}})()
收到,谢谢 幻影幽灵。 这也应该算是必备工具了。正则表达式 在自己的日志编辑界面或日志访问界面,将上述红色的复制到地址栏,回车运行即可实现编辑页面与访问页面的切换。
呵呵。开始做改版工作开始做改版工作了,估计三天之后就可以跟大家见面了!
请等待我的界面完工哦! 7/18/2005 mop客户端限量内测7/8/2005 猜猜二十问,有意思的游戏想象一个对象(object),人工智能程序将通过 询问简单的问题,猜出您想象的对象。 您所想象的对象必须 为大多数人所熟悉,但是 绝不能是特定的人物、地点或事件。
蛮强的,常见的东西,一般20个问题电脑都猜出来,不过青菜,死活猜不出来。难道老外没青菜的?
点击下面的链接进入:
GoogleMaps探秘
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|