以前用struts做了一个项目,现在需要将其转化为一个portlet,嵌入到另一个更大的项目中,使其成为其中的一部分,于是上网查了些资料,终于弄好了,在此记录一下。
1. 在struts项目的WebRoot\WEB-INF下面新建portlet.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" 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" version="1.0"> <portlet> <description>Web Fits files Header Archiving System</description> <portlet-name>webFithas</portlet-name> <display-name>webFithas Portlet</display-name> <portlet-class>org.apache.portals.bridges.struts.StrutsPortlet</portlet-class> <init-param> <name>ServletContextProvider</name> <value>org.cvo.fithas.struts.util.PortalServletContextProvider</value> </init-param> <init-param> <name>ViewPage</name> <value>/index.jsp</value> </init-param> <expiration-cache>-1</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>VIEW</portlet-mode> </supports> <portlet-info> <title>webFithas</title> <short-title>webFithas</short-title> <keywords>webFithas</keywords> </portlet-info> </portlet> </portlet-app>
2. 在struts项目的WebRoot\WEB-INF下面新建一个struts-portlet-config.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <config> <render-context> <attribute name="errors"/> <attribute name="message" keep="true"/> </render-context> <portlet-url-type> <action path="/index"/> <action path="/filter"/> <action path="/tableCreationStrategy"/> <action path="/dbConfiguration"/> <action path="/tableDescription"/> <action path="/tableCreation"/> <action path="/archiveStrategy"/> <action path="/result"/> </portlet-url-type> </config>
3. 修改struts项目的WebRoot\WEB-INF下面的struts-config.xmll文件,在<message-resources />前面添加如下内容:
<controller pagePattern="$M$P" processorClass="org.apache.portals.bridges.struts.PortletRequestProcessor"/>
4. 修改struts项目的WebRoot\WEB-INF下面的struts-config.xmll文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.portals.bridges.struts.PortletServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <servlet> <servlet-name>webFithas</servlet-name> <display-name>webFithas portlet</display-name> <description>webFithas Portlet</description> <servlet-class>org.apache.pluto.core.PortletServlet</servlet-class> <init-param> <param-name>portlet-class</param-name> <param-value>org.apache.portals.bridges.struts.StrutsPortlet</param-value> </init-param> <init-param> <param-name>portlet-name</param-name> <param-value>webFithas</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>webFithas</servlet-name> <url-pattern>/PlutoInvoker/webFithas/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
5. 新建PortalServletContextProvider.java文件,内容如下:
package org.cvo.fithas.struts.util;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import org.apache.pluto.internal.impl.PortletContextImpl;
import org.apache.portals.bridges.common.ServletContextProvider;
public class PortalServletContextProvider implements ServletContextProvider
{
public ServletContext getServletContext(GenericPortlet portlet)
{
return ((PortletContextImpl) portlet.getPortletContext()).getServletContext();
}
public HttpServletRequest getHttpServletRequest(GenericPortlet portlet, PortletRequest request)
{
return (HttpServletRequest) ((HttpServletRequestWrapper) request).getRequest();
}
public HttpServletResponse getHttpServletResponse(GenericPortlet portlet, PortletResponse response)
{
return (HttpServletResponse) ((HttpServletResponseWrapper) response).getResponse();
}
}
6. 修改所有的jsp页面,将
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
对应的改为
<%@ taglib uri="http://portals.apache.org/bridges/struts/tags-portlet-html" prefix="html" %>
其他标签也是类似的改法。
经过以上步骤,就可以成功的把一个struts项目转化为一个portlet了。