锘??xml version="1.0" encoding="utf-8" standalone="yes"?> There are a number of distributions to choose from depending on your needs.
The The If installing to a directory that contains spaces, This section documents the manual installation of Pluto into Tomcat. It replaces the pluto:install goal, but requires that the built-in Maven 2 install goal ( Step 1: Step 2: Copy the following to
聽 //Servlet鍒濆鍖?br />聽 Pluto.PortalImpl.Servlet.init()
聽聽聽聽 // ServiceManager鍒濆鍖?br />聽聽聽聽 ServiceManager.init()
聽聽聽聽聽聽聽 ConfigService.init()聽 // 閰嶇疆鏈嶅姟
聽聽聽聽聽聽聽 LogService.init()聽 // 鏃ュ織鏈嶅姟
聽聽聽聽聽聽聽 FactoryManagerService.init()聽 // 宸ュ巶綆$悊鍣?/font>
聽聽聽聽聽聽聽 PortletDefinitionRegistryService.init()聽 // Portlet瀹氫箟娉ㄥ唽琛?/font>
聽聽聽聽聽聽聽 PortletEntityRegistryService.init()聽 // Portlet瀹炰綋娉ㄥ唽琛?/font>
聽聽聽聽聽聽聽 PageRegistryService.init() // Page娉ㄥ唽琛?/font>
聽聽聽聽聽聽聽 //娉紝浠ヤ笂鏈嶅姟閮借鍙栧悓鍚嶇殑properties閰嶇疆鏂囦歡.
聽聽聽聽 // 鍒濆鍖朠ortlet瀹瑰櫒, 瀹瑰櫒瀹炵幇綾誨湪ConfigService.properties涓寚瀹?br />聽聽聽聽 PortletContainerFactory.getPortletContainer().init()
浜屻佽姹傚鐞嗘祦紼?
聽 Pluto.PortalImpl.Servlet.doGet()
聽聽聽 1. 鍒涘緩PortalEnvironment;
聽聽聽 2. 鏌ユ壘ActionWindow;
聽聽聽 2a. 濡傛壘鍒癆ctionWindow, 鍒欎負Action
聽聽聽 2b. 鎵句笉鍒癆ctionWindow, 鍒欎負Render, 璇誨彇Page瀹氫箟銆?br />聽聽聽聽聽聽聽聽聽聽聽 RootFragment root = PageRegistry.getRootFragment();
聽聽聽 3. 澶勭悊瀹屾瘯;
聽 // 澶勭悊Fragment, RootFragment涓嶱ageregistry.xml鏂囦歡鍏寵仈, 鍚庤呭畾涔変簡欏甸潰鐨勫竷灞
聽聽聽 // 鏈嶅姟鍓嶇疆澶勭悊銆?br />聽聽聽 1. preService(request, response);
聽聽聽 // 鍖呭惈涓庡綋鍓峟ragment鍚屽悕鐨刯sp鏂囦歡錛屽綋鍓嶄負RootFragment銆?br />聽聽聽 2. RequestDispatcher rd = getServletConfig().getServletContext().
聽聽聽 // 鏈嶅姟鍚庣疆澶勭悊
聽 // Pageregistry.xml
聽聽聽 銆坒ragment name="test" type="page"銆壜?// 瀵瑰簲PageFragment
聽聽聽聽聽聽聽 銆坒ragment name="row" type="row"銆壜?// 瀵瑰簲RowFragment
聽聽 // 涓婇潰鐨勫眰嬈$粨鏋勫崄鍒嗘竻妤氾紝鍏朵腑fragment涓嶧ragment鐨勫瓙綾誨搴旓紝涓婇潰鐨勫畾涔変腑鍖呮嫭RootFragment,
聽聽 // 閬嶅巻瀛恌ragment, 騫惰皟鐢ㄥ叾鏈嶅姟鏂規硶銆?br />聽聽 while (childIterator.hasNext()) {
涓夈丳ortal澶勭悊嫻佺▼
聽 鍏堟潵鐪嬬湅Portlet鐨勫垵濮嬪寲, 涓昏鏄粠閰嶇疆鏂囦歡涓鍙朠ortlet瀹氫箟銆?br />聽 PortletFragment.init()
聽聽聽聽聽 // 璇誨彇Portlet鐨勫疄浣揑d, 鍦╬ageregistry.xml涓敱portlet灞炴ф寚瀹?
聽聽聽聽聽 // 璇誨彇Portlet瀹炰綋. portlet瀹炰綋鍦╬ortletentityregistry.xml涓畾涔?
聽聽聽聽聽 // portletentityregistry.xml
聽 // Portlet鏈嶅姟
聽聽聽聽聽 //load protlet
聽聽聽聽聽聽聽 // 1.鍙栧緱PortletDefinition, 浠巔ortletentityregistry涓畾涔夌殑application涓鍙杙ortlet瀹氫箟.
聽聽聽聽聽聽聽 // portlet.xml
聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坧ortlet-class銆塷rg.apache.Pluto.portalImpl.portlet.TestPortlet銆?portlet-class銆?/font>
聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坕nit-param>
聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坰upports銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坢ime-type銆塼ext/html銆?mime-type銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坧ortlet-mode銆塚IEW銆?portlet-mode銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坧ortlet-mode銆塃DIT銆?portlet-mode銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坧ortlet-mode銆塇ELP銆?portlet-mode銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽 銆?supports銆?/font>
聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坧ortlet-info銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坱itle銆塗est Portlet #1銆?title銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坰hort-title銆塗est #1銆?short-title銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坘eywords銆塗est,Testing銆?keywords銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽 銆?portlet-info>
聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坰ecurity-role-ref銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坮ole-name銆塒lutoTestRole銆?role-name銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坮ole-link銆塼omcat銆?role-link銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽 銆?security-role-ref銆?br />聽聽聽聽聽聽聽聽聽聽 銆?portlet銆?br />聽聽聽聽聽聽聽 銆坧ortlet-app銆?/font>
聽聽聽聽聽聽聽 // 2.鍙栧緱PortletInvoker
聽聽聽聽聽聽聽 // 3.鎵цload鎿嶄綔
聽聽聽聽聽 // render Portlet
聽聽聽聽聽聽聽 // 1. 鍙栧緱PortletInvoker
聽聽聽聽聽聽聽 // 2. 鎵цrender鎿嶄綔銆?br />聽聽聽聽聽聽聽 invoker.render(renderRequest, renderResponse);
聽聽聽聽聽 // 澶勭悊Title, support modes,
聽 // Portlet璋冪敤.
聽聽聽聽聽 // 鍙栧緱Portlet搴旂敤鐨刣ispatcher.
聽聽聽聽聽 // 璁劇疆灞炴? METHOD_ID涓哄埆瀵瑰簲load, render鍜宎ction銆?br />聽聽聽聽聽 servletRequest.setAttribute(Constants.METHOD_ID, methodID);
聽聽聽聽聽 // 璋冪敤Portlet聽
鍥涖丳ortlet澶勭悊嫻佺▼
聽 鍦≒ortlet搴旂敤鐨剋eb.xml涓紝瀹氫箟浜哖ortletServlet涓篜ortlet鐨凷ervlet錛屽畠鐢眃ispatch鏂規硶緇熶竴榪涜璇鋒眰澶勭悊.
聽 PortletServlet.dispatch(...)
聽聽聽聽 // 璁劇疆portletConfig.
聽聽聽聽 Integer method_id = (Integer)request.getAttribute(Constants.METHOD_ID);
聽聽聽聽聽聽聽聽 // prepare container objects to run in this webModule
聽聽聽聽聽聽聽聽 portletClass.render(renderRequest,renderResponse);
聽聽聽聽聽聽聽聽 // prepare container objects to run in this webModule
聽聽聽聽聽聽聽聽 portletClass.processAction(actionRequest,actionResponse);
聽聽聽聽 鑷蟲錛岃姹傚氨鐢眕ortlet榪涜澶勭悊浜嗐?/font>
浠庝笂闈㈢殑嫻佺▼鍙互鐪嬪嚭錛孭luto灝辨槸灝嗚姹傚垎媧懼埌欏甸潰涓婄殑鍚勪釜portlet錛宲ortlet鏍規嵁method鎵ц鐩稿簲鎿嶄綔錛?/font>
鏈鍚庣敱Pluto灝嗗畠浠鐞嗙殑緇撴灉鎸夌壒瀹氬竷灞榪涜鏄劇ず銆?/font>
Installing the Pluto 1.1 Binary Build
About Pluto Distributions
Building Pluto from Source
Maven 2 is utilized as the project management and build system for Pluto 1.1. Pluto currently provides Maven plugins which can be used to install the Pluto Portal, assemble portlet applications, deploy applications, and publish portlet applications to the Pluto Portal. Obtaining Pluto 1.1 Source Code
The Pluto project uses the Subversion version control system. If you're new to Subversion, you can check out the online book about Subversion. Note that we are currently using Subversion 1.3.x (there are separate versions of the book covering the different versions of Subversion). Web Access to Subversion To browse the Pluto 1.1 source code, you can use the ViewCVS web interface to Subversion. This is current at all times. Normal Subversion Access Anyone can check code out of Subversion anonymously. However, you need to specify a username and password in order to update the Subversion repository, and only Pluto committers have the permissions to do that. We run Subversion over standard HTTPS, so hopefully you won't have problems with intervening firewalls.
Check out from Subversion
Again, anyone can do this. To check out the latest distribution of Pluto 1.1 (trunk) to a directory called 'pluto' use this command: svn checkout https://svn.apache.org/repos/asf/portals/pluto/trunk/ pluto
To check out Pluto 1.1.1 source to the 'pluto' directory use this command: svn checkout https://svn.apache.org/repos/asf/portals/pluto/tags/pluto-1.1.1 pluto
Zipped up Pluto source distributions can also be downloaded from a distribution mirror. Building Pluto with Maven 2
If this is your first time building Pluto with Maven 2, edit ~/.m2/settings.xml
and add the <pluginGroups> element:
<settings>
...
<pluginGroups>
<pluginGroup>org.apache.pluto</pluginGroup>
</pluginGroups>
...
</settings>
org.apache.pluto
specified as a <pluginGroup>
, then the pluto:install
will fail.
<PLUTO-1.1-SRCHOME>
is the local directory where the Pluto 1.1 source distribution has been checked out or unzipped into. $> cd <PLUTO-1.1-SRCHOME>
$> mvn install
$> mvn pluto:install -DinstallDir=path/to/appserver
install
goal is a built in Maven 2 lifecycle which builds the project artifacts and installs them into the Maven repository. pluto:install
goal will take the resulting artifacts and properly deploy them within the configured Tomcat installation. Currently, the Pluto 1.1 install has been tested on Tomcat 5.5.9, 5.5.17 and 5.5.20. The Tomcat 5 archive can be found here. installDir
needs to be enclosed within quotes: C:\pluto> mvn pluto:install -DinstallDir="C:\Program Files\Apache Software Foundation\Tomcat 5.5"
Installing Pluto Manually
mvn install
) be run from <PLUTO-1.1-SRCHOME>
. $> cd <PLUTO-1.1-SRCHOME>
$> mvn install
<TOMCAT_HOME>/shared/lib
:
Step 3: Copy the following to <TOMCAT_HOME>/common/endorsed
:
Step 4: Copy the following to <TOMCAT_HOME>/conf/Catalina/localhost
:
Step 5: Copy the following to <TOMCAT_HOME>/webapps
:
Installing Pluto with a Windows EXE
The NSIS Installer is not yet complete, but we hope to have a fully functional one soon. Anyone is more than welcome to assist us in this process. Configuring Source-Built Pluto for Application Scope PortletSession Attributes
To be able to use application-scoped PortletSession
attributes in Pluto, modify the Connector element for port 8080 in <TOMCAT_HOME>/conf/server.xml
by adding the following attribute and value: emptySessionPath="true". Configuring User and Role in the Pluto Source Build
The Pluto Testsuite portlet application needs the role 'pluto
' to run the Security Mapping Test. So before starting tomcat, you should edit <TOMCAT_HOME>/conf/tomcat-users.xml
, add the role 'pluto
', and add a user in that role. The simplest way to do this is to edit add the 'pluto
' role to the 'tomcat
' user's record. Here is a sample tomcat-users.xml
file:
<?xml version="1.0" encoding="utf-8"?>
<tomcat-users>
<role rolename="pluto"/>
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat,pluto"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
</tomcat-users>
Starting the Portal
Now you are ready to use the Pluto Portal built from source. Start up tomcat by running startup.bat
(for windows) or startup.sh
(for *nix) in <TOMCAT_HOME>/bin
, and browse to http://localhost:8080/pluto/portal
. Login to Pluto using the user and password you just created in tomcat-users.xml
. If you added the 'pluto' role to the 'tomcat' user's record, you can login as 'tomcat/tomcat'.
]]>Pluto鍒濆鍖栨祦紼?a title="姘鎬箙閾炬帴錛歅luto鎺у埗嫻佺▼" >
涓銆佸垵濮嬪寲嫻佺▼
聽聽聽聽聽聽聽聽聽聽聽 鎵цPortletContainer.processPortletAction();
聽聽聽聽聽聽聽聽聽聽聽 閲嶅畾鍚戣緭鍑?
聽聽聽聽聽聽聽聽聽聽聽 root.service(servletRequest, servletResponse);
聽 Pluto.portalImpl.Aggregation.RootFragment.service()
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 getRequestDispatcher(BASE_ROOT+jspName);
聽聽聽聽聽聽 rd.include(request, response);
聽聽聽 3. postService(request, response);
聽 銆坧ortal銆壜?// 瀵瑰簲RootFragment
聽聽聽 銆坒ragment name="navigation"
聽聽聽聽聽聽聽 class="org.apache.Pluto.portalImpl.aggregation.navigation.TabNavigation"銆?br />聽聽聽 銆?fragment銆?/font>
聽聽聽聽聽聽聽 銆坣avigation銆?br />聽聽聽聽聽聽聽聽聽聽聽 銆坱itle銆塗est銆?title銆?br />聽聽聽聽聽聽聽聽聽聽聽 銆坉escription銆?..銆?description銆?br />聽聽聽聽聽聽聽 銆?navigation銆?/font>
聽聽聽聽聽聽聽聽聽聽聽 銆坒ragment name="col1" type="column"銆壜犅?// 瀵瑰簲ColumnFragment
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坒ragment name="p1" type="portlet"銆壜犅?// 瀵瑰簲PortletFragment
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坧roperty name="portlet" value="3.1"/銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆?fragment銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坒ragment name="p2" type="portlet"銆壜?// 瀵瑰簲PortletFragment
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坧roperty name="portlet" value="4.1"/銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆?fragment銆?br />聽聽聽聽聽聽聽聽聽聽聽 銆?fragment銆?br />聽聽聽聽聽聽聽 銆?fragment銆?br />聽聽聽 銆?fragment銆?br />聽 銆?portal銆?/font>
聽聽聽聽聽聽聽 PageFragment, RowFragment, ColumnFragment鍜孭ortletFragment錛岄櫎浜哖ortletFragment澶栵紝
聽聽聽聽聽聽聽 鍏跺畠Fragment鐨勫鐞嗗ぇ鑷翠笂鏄竴鏍風殑錛?br />聽聽 Iterator childIterator = fragment.getChildFragments().iterator();
聽聽聽聽聽聽 Fragment subfragment = (Fragment)childIterator.next();
聽聽聽聽聽聽 if (subfragment instanceof AbstractNavigationFragment)
聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽 subfragment.service(request, response);
聽聽聽聽聽聽聽聽聽聽 break;
聽聽聽聽聽聽 }
聽 }
聽聽聽聽聽 String portletEntityId = getInitParameters().getString("portlet");
聽聽聽聽聽 PortletEntity portletEntity = PortletEntityRegistry.getPortletEntity(...);
聽聽聽聽聽 銆坧ortlet-entity-registry銆?br />聽聽聽聽聽聽聽 銆坅pplication id="3"銆壜?// 瀵瑰簲PortletApplicationEntity
聽聽聽聽聽聽聽聽聽聽 銆坉efinition-id銆塼estsuite銆?definition-id銆?br />聽聽聽聽聽聽聽聽聽聽 銆坧ortlet id="1"銆壜?// 瀵瑰簲PortletEntity
聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坉efinition-id銆塼estsuite.TestPortlet1銆?definition-id銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坧references銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坧ref-name銆塗estName4銆?pref-name銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坧ref-value銆塗estValue4銆?pref-value銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坮ead-only銆塼rue銆?read-only銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽 銆?preferences銆?br />聽聽聽聽聽聽聽聽聽 銆?portlet>
聽聽聽聽聽聽 銆?application>
聽聽聽聽聽聽 銆坅pplication id="4"銆?br />聽聽聽聽聽聽聽聽聽 銆坉efinition-id>testsuite銆?definition-id銆?br />聽聽聽聽聽聽聽聽聽 銆坧ortlet id="1"銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坉efinition-id>testsuite.TestPortlet2銆?definition-id銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坧references銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坧ref-name銆塗estName4銆?pref-name銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坧ref-value銆塗estValue4銆?pref-value銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坮ead-only銆塼rue銆?read-only銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽 銆?preferences銆?br />聽聽聽聽聽聽聽聽聽 銆?portlet銆?br />聽聽聽聽聽聽 銆?application銆?br />聽聽聽聽 銆?portlet-entity-registry銆?br />聽聽聽聽聽 //瑕佹敞鎰忚繖閲岀殑applicationid鍜宲ortletid涓巔ageregistry涓殑portletid鐨勫搴斿叧緋匯?/font>
聽 PortletFragment.service()
聽聽聽聽聽 PortletContainer.portletLoad(...)
聽聽聽聽聽聽聽 PortletDefinition def = portletWindow.getPortletEntity().getPortletDefinition();
聽聽聽聽聽聽聽 銆坧ortlet-app銆壜犅?// 瀵瑰簲PortletApplicationDefinition
聽聽聽聽聽聽聽聽聽聽 銆坧ortlet銆壜犅犅犅?// 瀵瑰簲PortletDefinition
聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坉escription銆塗estSuiteDescription銆?description銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坧ortlet-name銆塗estPortlet1銆?portlet-name銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坉isplay-name銆塗est Portlet #1銆?display-name銆?/font>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坣ame銆塩onfig銆?name銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 銆坴alue銆?WEB-INF/testsuite-config.xml銆?value銆?br />聽聽聽聽聽聽聽聽聽聽聽聽聽 銆?init-param銆?/font>
聽聽聽聽聽聽聽 PortletInvoker invoker = PortletInvokerAccess.getPortletInvoker(def);
聽聽聽聽聽聽聽 invoker.load(renderRequest, renderResponse)
聽聽聽聽聽 PortletContainer.renderPortlet(...);
聽聽聽聽聽聽聽 PortletInvoker invoker = PortletInvokerAccess.getPortletInvoker(...);
聽 ProtletInvoker.invoke(...)
聽聽聽聽聽 ServletDefinition servletDefinition = portletDefinition.getServletDefinition();
聽聽聽聽聽 ServletContext servletContext = servletConfig.getServletContext();
聽聽聽聽聽 RequestDispatcher dispatcher = servletDefinition.getRequestDispatcher(servletContext);
聽聽聽聽聽 servletRequest.setAttribute(Constants.PORTLET_REQUEST, portletRequest);
聽聽聽聽聽 servletRequest.setAttribute(Constants.PORTLET_RESPONSE, portletResponse);
聽聽聽聽聽 dispatcher.include(servletRequest, servletResponse);
聽聽聽聽 request.setAttribute(org.apache.Pluto.Constants.PORTLET_CONFIG, portletConfig);
聽聽聽聽 if (method_id == Constants.METHOD_RENDER)
聽聽聽聽 {
聽聽聽聽聽聽聽聽 renderRequest = (RenderRequest)request.getAttribute(Constants.PORTLET_REQUEST);
聽聽聽聽聽聽聽聽 renderResponse = (RenderResponse)request.getAttribute(Constants.PORTLET_RESPONSE);
聽聽聽聽聽聽聽聽 prepareRenderRequest(renderRequest, request);
聽聽聽聽聽聽聽聽 prepareRenderResponse(renderResponse, request, response);
聽聽聽聽 }
聽聽聽聽 else if (method_id==org.apache.Pluto.Constants.METHOD_ACTION)
聽聽聽聽 {
聽聽聽聽聽聽聽聽 actionRequest = (ActionRequest)request.getAttribute(Constants.PORTLET_REQUEST);
聽聽聽聽聽聽聽聽 actionResponse = (ActionResponse)request.getAttribute(Constants.PORTLET_RESPONSE);
聽聽聽聽聽聽聽聽 prepareActionRequest(actionRequest, request);
聽聽聽聽聽聽聽聽 prepareActionResponse(actionResponse, request, response);
聽聽聽聽 }
聽聽聽聽 else if (method_id == org.apache.Pluto.Constants.METHOD_NOOP)
聽聽聽聽 {
聽聽聽聽聽聽聽聽 //nothing to do
聽聽聽聽 }
聽聽聽聽 //娉? portletClass鍗充負portlet鐨勫叿浣撳疄鐜扮被銆?/font>
]]>
鍥?鏄疨ortal鐨勫熀鏈綋緋葷粨鏋勫浘銆侾ortal Web Application澶勭悊瀹㈡埛鐨勮姹傦紝浠庡鎴風殑褰撳墠 欏典腑鎻愬彇鍑簆ortlets錛岀劧鍚庤皟鐢╬ortlet瀹瑰櫒鏉ヨ幏寰楁瘡涓涓猵ortlet鐨勫唴瀹廣侾ortal閫氳繃 Portlet瀹瑰櫒鐨処nvoker API鏉ヨ闂畃ortlet瀹瑰櫒銆傝繖浜汚PI鏄痯ortlet瀹瑰櫒鐨勪富瑕佽皟鐢ㄦ帴鍙o紝 瀹冧滑涓篜ortal鎻愪緵浜嗕竴浜涘熀浜庤姹傜殑鏂規硶鏉ヨ皟鐢╬ortlet銆傚鍣ㄧ殑浣跨敤鑰咃紙鍗砅ortal錛岃瘧鑰?娉?/i>錛夊繀欏誨疄鐜皃ortlet瀹瑰櫒鐨凜ontainer Provider SPI錛圫ervice Provider Interface錛夊洖璋冩帴鍙o紝鏉ヤ負portlet瀹瑰櫒鎻愪緵涓嶱ortal鐩稿叧鐨勪俊鎭傛渶鍚庯紝portlet瀹瑰櫒閫?榪嘝ortlet API璋冪敤鎵鏈夌殑portlets銆?
鍥?錛氫竴涓泦鎴愪簡Pluto鐨勭畝鍗昉ortal
Portlet瀹瑰櫒鏄痯ortlets鐨勮繍琛屾椂鐜錛屼篃鏄瘡涓涓狿ortal鐨勬牳蹇冪粍浠躲侾ortlet瀹瑰櫒闇瑕佽幏 鍙栨湁鍏砅ortal鏈韓鐨勪竴浜涗俊鎭紝榪樺繀欏婚噸鐢≒ortal鐨勪竴浜涘熀鏈唬鐮併傚洜姝わ紝Portlet瀹瑰櫒鍙互 淇濊瘉鑷繁涓庡叾瀹冪殑Portal緇勪歡涔嬮棿鏄畬鍏ㄥ垎寮鐨勩備篃灝辨槸璇達紝浣犲彲浠ユ妸涓涓嫭绔嬬殑Portlet瀹瑰櫒 鎻掑叆鍒頒換浣曚竴涓狿ortal涓幓錛屽彧瑕佸畠鍙互婊¤凍Portlet瀹瑰櫒鐨勮姹傦紝姣斿瀹炵幇浜嗘墍鏈夌殑SPI銆?
Portlet瀹瑰櫒鐨処nvoker API錛堜篃琚О涓鴻繘鍏ョ偣錛夋槸Portlet瀹瑰櫒鐨勪富瑕佽皟鐢ㄦ帴鍙c傝繖浜汚PI鍖?鍚玃ortlet瀹瑰櫒鐨勭敓鍛藉懆鏈熸帶鍒舵柟娉曪紙init()錛宒estroy()錛夊拰鍩轟簬璇鋒眰鐨勮皟鐢ㄦ柟娉?錛坕nitPage()錛宲erformTitle()錛宲ortletService()絳夌瓑錛夈傜敱浜嶱ortlet瀹瑰櫒鏈緇堟槸 鍘昏皟鐢ㄤ竴涓猵ortlet錛屾晠榪欎簺鏂規硶鐨勭鍚嶅拰Portlet API鐨勪富瑕乸ortlet鎺ュ彛寰堢被浼鹼紝闄や簡涓涓?欏婚澶栦紶鍏ョ殑portlet ID銆侾ortlet瀹瑰櫒鍙互閫氳繃榪欎釜棰濆浼犲叆鐨刾ortlet ID鍙傛暟鏉ュ喅瀹氳皟鐢?鍝竴涓猵ortlet銆?
闄や簡鍙互浣跨敤Invoker API鏉ヨ皟鐢≒ortlet瀹瑰櫒澶栵紝Portal榪樺繀欏誨疄鐜癙ortlet瀹瑰櫒瀹氫箟鐨凷PI銆?鍥犳錛屽弬鑰冨疄鐜板紩鍏ヤ簡鈥滃鍣ㄦ湇鍔♀濈殑姒傚康錛氬鍣ㄦ湇鍔$敤鏉ュ畾涔変竴浜涜兘澶熷湪瀹瑰櫒涓敞鍐岀殑鍙彃鐨勭粍浠訛紝 榪欎簺緇勪歡瑕佷箞鎻愪緵涓浜涘熀鏈殑鍔熻兘錛岃涔堝瀹瑰櫒榪涜鎵╁睍銆侾luto鍙傝冨疄鐜板畾涔変簡涓嬮潰榪欎簺鍐呭緩鐨?瀹瑰櫒鏈嶅姟錛堝墠鍥涗釜鏄繍琛孭ortlet瀹瑰櫒鎵蹇呴』瀹炵幇鐨勶紝鑰岀浜斾釜鍒欐槸鍙夌殑錛夛細
涓ユ牸鐨勮錛孭ortlet Object Model錛圥ortlet瀵硅薄妯″瀷錛変篃鏄竴涓猄PI錛屼絾涓庡叾瀹冪殑SPI鐩告瘮錛?瀹冨鍦ㄤ竴涓壒孌婄殑浣嶇疆涓娿傚洜姝ゆ垜浠笉鎶婂畠鐪嬫垚鏄鍣ㄦ湇鍔$殑涓閮ㄥ垎錛屽洜涓哄畠澶勭悊鎵鏈夌殑portlet 瀵硅薄錛屽茍鍖呭惈浜嗕竴浜涙販鏉傜殑鎺ュ彛銆?
鍥?錛歅ortlet瀹瑰櫒鐨勪綋緋葷粨鏋?/b>
JSR 168瑙勮寖鍜學eb Service for Remote Portlets錛圵SRP錛夋爣鍑嗘湁楂樺害鐨勪竴鑷存с傝繖涓?涓悓鏃跺嚭鐜扮殑鏍囧噯閮藉彂甯冧簡寮鏀炬簮鐮佺殑瀹炵幇錛屽畠浠殑瀹炵幇閮藉畬鎴愪簡鍦ㄧ浉搴旂殑瑙勮寖涓畾涔夌殑鎵鏈夊繀瑕?鍔熻兘銆傝繖涓や釜鏍囧噯閮芥妸鑳藉緢濂界殑浜掔浉鍗忎綔浣滀負瀹冧滑鍏卞悓鐨勭洰鏍囥傚洜姝わ紝WSRP portlets鍦?portlet瀹瑰櫒涓棦鍙互浣滀負娑堣垂鑰呰繍琛岋紝涔熷彲浠ヤ綔涓虹敓浜ц呰繍琛屻?
Pluto欏圭洰蹇呴』鏀寔鍦ㄤ竴涓狿ortal涓繍琛屽涓猵ortlet瀹瑰櫒銆傚洜姝わ紝Pluto Portlet瀹瑰櫒鍙互 琚嬈″垵濮嬪寲銆傛洿閲嶈鐨勬槸錛屽畠鍙互浠ヤ笉鍚岀殑鏂瑰紡榪愯錛屾瘡涓猵ortlet瀹瑰櫒閮戒嬌鐢ㄤ竴涓笉鍚岀殑SPI 瀹炵幇銆?