- , Portlet API Servlet API, .
:
J2EE Web-;
;
Web- .
:
, ;
, URL , , : , URL
;
, ;
, .
:
;
, , .
Web-. , WAR- Web- ( web.xml). - ( portlet.xml).
, ,
init(), , ( , ..).
init() , PortletConfig, . , PortletContext.
, , - - , ( , ). , , UnavailableException, , . , , , , .
destroy() , init(). destroy() : .
. .
:
View ;
|
|
Help ;
Edit ;
Configure , .
.
-
- . .
5. JAVA_HOME=C:\jdk1.5.0
6. PATH %JAVA_HOME%\bin
7. Apache Ant http://ant.apache.org/
8. , , C:\ant
9. ANT_HOME=C:\ant
10. PATH %ANT_HOME%\bin
11. Jetspeed2 c http://portals.apache.org/jetspeed-2/
12. , , C:\jetspeed2
13. build.properties
jetspeed.deploy.dir=C:/jetspeed2/jakarta-tomcat-
5.5.9 /webapps/jetspeed/WEB-INF/deploy
14. Windows
15.
C:/jetspeed2/jetspeed-database/start-database.bat
16.
C:/jetspeed2/jakarta-tomcat-5.5.9/bin /startup.bat
17. ant deploy
18. http://localhost:8080/jetspeed
19. (
admin, )
20. .
Portlet API , , . portlet-. javax.portlet.
SamplePorltet. , , . , init(PortletConfig config), doEdit(), doView(), doHelp(). processAction() ( ).
/* # 1: : SamplePorltet.java*/
package com.learning.portlet;
import java.io.IOException;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletConfig;
import javax.portlet.PortletContext;
import javax.portlet.PortletException;
import javax.portlet.PortletMode;
import javax.portlet.PortletPreferences;
import javax.portlet.PortletRequest;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
public class SamplePortlet extends GenericPortlet {
private static final String EDIT_PAGE_PARAM
= "Edit-Page";
private static final String HELP_PAGE_PARAM
= "Help-Page";
private static final String VIEW_PAGE_PARAM
= "View-Page";
public void init(PortletConfig config)
throws PortletException {
|
|
super. init(config); //
}
// ,
public void doEdit(RenderRequest request,
RenderResponse response)
throws PortletException,IOException {
PortletContext context = getPortletContext();
//
setRequestAttributes(request); //
// responce
PortletRequestDispatcher rd = context.
getRequestDispatcher(getInitParameter(EDIT_PAGE_PARAM));
rd.include(request, response); /*
*/
}
// ,
public void doHelp(RenderRequest request,
RenderResponse response)
throws PortletException, IOException {
PortletContext context = getPortletContext();
//
setRequestAttributes(request); //
// responce
PortletRequestDispatcher rd = context.
getRequestDispatcher(getInitParameter(HELP_PAGE_PARAM));
rd.include(request, response); //
}
// ,
public void doView(RenderRequest request,
RenderResponse response)
throws PortletException, IOException {
PortletContext context = getPortletContext();
//
setRequestAttributes(request); //
// response
PortletRequestDispatcher rd = context.
getRequestDispatcher(getInitParameter(VIEW_PAGE_PARAM));
rd.include(request, response); //
}
//
public void processAction(ActionRequest request,
ActionResponse response)
throws PortletException, IOException {
PortletMode mode = request.getPortletMode(); /*
*/
PortletPreferences preferences =
request.getPreferences(); //
if (mode.equals(PortletMode.VIEW)) {
//
preferences.setValue("firstName",
request.getParameter("firstName"));
preferences.setValue("lastName",
request.getParameter("lastName"));
preferences.setValue("address",
request.getParameter("address"));
preferences.setValue("telephone",
request.getParameter("telephone"));
preferences.store();
}
}
//
private void setRequestAttributes(PortletRequest
request) {
PortletPreferences preferences =
request.getPreferences();
request.setAttribute("firstName",
preferences.getValue("firstName", "undefined"));
request.setAttribute("lastName",
preferences.getValue("lastName", "undefined"));
request.setAttribute("address",
preferences.getValue("address", "undefined"));
request.setAttribute("telephone",
preferences.getValue("telephone", "undefined"));
request.setAttribute("portletName",
getPortletName());
}
}
portlet.xml, .
<!-- # 2: : portlet.xml- ->
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app
xmlns=
"http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/
portlet-app_1_0.xsd
http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
<portlet id="sample-application">
<!-- -->
<description>Portlet Application</description>
<!-- -->
<portlet-name>SamplePortlet</portlet-name>
|
|
<!-- -->
<display-name>Sample Portlet</display-name>
<!-- -->
<portlet-class> com.learning.portlet.SamplePortlet</portlet-class>
<!-- -->
<init-param>
<name>ViewPage</name>
<value>/WEB-INF/jsp/sample-view.jsp</value>
</init-param>
<init-param>
<name>HelpPage</name>
<value>/WEB-INF/jsp/sample-help.jsp</value>
</init-param>
<init-param>
<name>EditPage</name>
<value>/WEB-INF/jsp/sample-edit.jsp</value>
</init-param>
<!-- , . -1 cache
-->
<expiration-cache>-1</expiration-cache>
<!-- -->
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>view</portlet-mode>
<portlet-mode>help</portlet-mode>
<portlet-mode>edit</portlet-mode>
</supports>
<!-- -->
<supported-locale>en</supported-locale>
<!-- -->
<resource-bundle> com.learning.portlet.SamplePortlet</resource-bundle>
<!-- -->
<portlet-info>
<!-- -->
<title>Portlet Application</title>
<short-title>Portlet</short-title>
<!-- -->
<keywords>portlet</keywords>
</portlet-info>
</portlet>
</portlet-app>
web.xml web-, - web-, .
/* # 3: : web.xml*/
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>Sample</display-name>
</web-app>
JSP-, . , : , (, ): RenderRequest, RenderResponse, PortletConfig. , .
<!-- # 4: : sample-edit.jsp - ->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet"%>
<portlet:defineObjects/>
<portlet:actionURL var="editAction" portletMode="view"/>
<c:set var="inputTextStyle" value="border: none; width: 150px; color: #000000;"/>
<c:set var="inputSubmitStyle" value="border: none; width: 75px;"/>
<c:set var="labelStyle" value="text-align: right; color: #000000; white-space: nowrap;"/>
<fmt:setBundle basename="com.learning.portlet.SamplePortlet"/>
<form action="${editAction}" method="post">
<table style="border: none;">
<tbody>
<tr><td style="${labelStyle}">
|
|
<fmt:message key="portlet.label.firstname"/>:
</td>
<td nowrap="nowrap">
<input type="text" name="firstName" value="${firstName}"
style="${inputTextStyle}"/>
</td>
</tr>
<tr><td style="${labelStyle}">
<fmt:message key="portlet.label.lastname"/>:
</td>
<td nowrap="nowrap">
<input type="text" name="lastName" value="${lastName}"
style="${inputTextStyle}"/>
</td>
</tr>
<tr><td style="${labelStyle}">
<fmt:message key="portlet.label.address"/>:
</td>
<td nowrap="nowrap">
<input type="text" name="address" value="${address}"
style="${inputTextStyle}"/>
</td>
</tr>
<tr><td style="${labelStyle}">
<fmt:message key="portlet.label.telephone"/>:
</td>
<td nowrap="nowrap">
<input type="text" name="telephone" value="${telephone}"
style="${inputTextStyle}"/>
</td>
</tr>
<tr><td colspan="2" align="right">
<button type="submit" style="${inputSubmitStyle}">
<fmt:message key="portlet.button.submit"/>
</button>
</td>
</tr>
</tbody>
</table>
</form>
<!-- # 5:: sample-help.jsp- ->
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet"%>
<portlet:defineObjects/>
<fmt:setBundle basename="com.learning.portlet.SamplePortlet"/>
<table><tbody>
<tr>
<td colspan="2">
<fmt:message key="portlet.name.message">
<fmt:param>${portletName}</fmt:param>
</fmt:message><br>
<fmt:message key="portlet.storeduser.message">
<fmt:param>${firstName}</fmt:param>
<fmt:param>${lastName}</fmt:param>
</fmt:message>
</td></tr>
<tr>
<td align="center">
<portlet:renderURL var="viewUrl" portletMode="view"/>
<a href="${viewUrl}" style="text-decoration: none;">
<fmt:message key="portlet.viewpage.link"/>.
</a>
</td>
<td align="center">
<portlet:renderURL var="editUrl" portletMode="edit"/>
<a href="${editUrl}" style="text-decoration: none;">
<fmt:message key="portlet.editpage.link"/>.
</a>
</td></tr>
</tbody>
</table>
<!-- # 6:: sample-view.jsp- ->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet"%>
<portlet:defineObjects/>
<c:set var="labelStyle" value="text-align: right; color: #000000; white-space: nowrap;"/>
<c:set var="textStyle" value="text-align: left; color: #000000; white-space: nowrap;"/>
<fmt:setBundle basename="com.learning.portlet.SamplePortlet"/>
<table>
<tbody style="background-color: ">
<tr>
<td style="${labelStyle}">
<fmt:message key="portlet.label.firstname"/>:
</td>
<td style="${textStyle}">
${firstName}
</td>
</tr>
<tr>
<td style="${labelStyle}">
<fmt:message key="portlet.label.lastname"/>:
</td>
<td style="${textStyle}">
${lastName}
</td>
</tr>
<tr>
<td style="${labelStyle}">
<fmt:message key="portlet.label.address"/>:
</td>
<td style="${textStyle}">
${address}
</td>
</tr>
<tr>
<td style="${labelStyle}">
<fmt:message key="portlet.label.telephone"/>:
</td>
<td style="${textStyle}">
${telephone}
|
|
</td>
</tr>
</tbody>
</table>
# # 7: :SamplePortlet_en.txt
portlet.label.firstname = First name
portlet.label.lastname = Last name
portlet.label.address = Address
portlet.label.telephone = Telephone number
portlet.button.submit = Store
portlet.name.message = This is the simple help page of the portlet <span style="font-weight: bolder">{0}</span>.
portlet.storeduser.message = Stored user is <span style="font-weight: bolder"> {0} {1}</span>.
portlet.viewpage.link = View page
portlet.editpage.link = Edit page
# # 8:: :SamplePortlet_ru.txt
portlet.label.firstname =
portlet.label.lastname =
portlet.label.address =
portlet.label.telephone =
portlet.button.submit =
portlet.name.message = <span style="font-weight: bolder">{0}</span>.
portlet.storeduser.message = <span style="font-weight: bolder"> {0} {1}</span>.
portlet.viewpage.link =
portlet.editpage.link =
/* # 9: : build.xml*/
<?xml version="1.0" encoding="UTF-8"?>
<project name="SamplePortlet" default="war" basedir=".">
<property file="build.properties"/>
<property name="src.dir" value="src"/>
<property name="jsp.dir" value="jsp"/>
<property name="java.dir" value="java"/>
<property name="message.dir" value="message"/>
<property name="config.dir" value="config"/>
<property name="lib.dir" value="lib"/>
<property name="src.lib.dir" value="${src.dir}/${lib.dir}"/>
<property name="src.java.dir" value="${src.dir}/${java.dir}"/>
<property name="src.jsp.dir" value="${src.dir}/${jsp.dir}"/>
<property name="src.message.dir" value="${src.dir}/${message.dir}"/>
<property name="src.config.dir" value="${src.dir}/${config.dir}"/>
<property name="webapp.dir" value="WEB-INF"/>
<property name="result.dir" value="result"/>
<property name="classes.dir" value="classes"/>
<property name="project.name" value="SamplePortlet"/>
<property name="localization.encoding" value="Cp1251"/>
<property name="localization.src.dir" value="${src.message.dir}/com/learning/portlet"/>
<property name="localization.result.dir" value="${result.dir}/${classes.dir}/com/learning/portlet"/>
<property name="localization.ext" value=".properties"/>
<target name="compile" description="Compiles all source files of the portlet.">
<mkdir dir="${result.dir}/${classes.dir}"/>
<javac srcdir="${src.java.dir}" destdir= "${result.dir} /${classes.dir}" optimize="yes" debug="no">
<classpath>
<fileset dir="${src.lib.dir}">
<include name="**/*.jar"/>
</fileset>
</classpath>
</javac>
<copy todir="${result.dir}/${classes.dir}">
<fileset dir="${src.message.dir}" excludes="**/*.txt"/>
</copy>
<native2ascii src="${localization.src.dir}" dest=
"${localization.result.dir}" includes="**/*.txt"
encoding="${localization.encoding}" ext="${localization.ext}"/>
</target>
<target name="war" depends="compile" description= "Creates.war file of the portlet.">
<war destfile="${result.dir}/${project.name}.war"
webxml="${src.config.dir}/web.xml" compress="on">
<lib dir="${src.lib.dir}">
<exclude name="**/portlet-api-1.0.jar"/>
</lib>
<classes dir="${result.dir}/${classes.dir}"/>
<zipfileset dir="${src.config.dir}" prefix="${webapp.dir}">
<include name="**/*.*"/>
<exclude name="**/web.xml"/>
</zipfileset>
<zipfileset dir="${src.jsp.dir}" prefix=
"${webapp.dir}/${jsp.dir}"/>
</war>
</target>
<target name="deploy" depends="war" description ="Deploys.war file of the portlet.">
<copy todir="${jetspeed.deploy.dir}">
<fileset file="${result.dir}/${project.name}.war"/>
</copy>
</target>
<target name="clean" description=
"Deletes all result files of the portlet.">
<delete dir="${result.dir}"/>
</target>
</project>
# # 10: ant: build.properties
jetspeed.deploy.dir = E:/web/jetspeed-2.0-M3-Tomcat-5.5.9 /jakarta-tomcat-5.5.9/webapps/jetspeed/WEB-INF/deploy