`
hrtc
  • 浏览: 55185 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

websphere5.1+spring2.0+struts2+hibernate3搭建总结

阅读更多

最近搭建了一个websphere5.1+spring2.0+struts2+hibernate3的框架,因为jdk1.4加websphere5.1环境中间碰到一些问题,网上的解决方案也不全,今天搞了一整天总算搞定了,现与大家分享下。

开发工具myeclipse6,先在tomcat4 jdk4上测试,然后部署到websphere5.1上测试通过。

步骤:

1.设置编译环境为jdk1.4

2.把自己代码中所有1.5的特性都改成1.4

3.web.xml改成servlet2.3规范的

4.lib包不要配缺了就行

spring和hibernate的包都是jdk1.4编译的,不需要修改,其中cglib用的是cglib-nodep-2.1_3.jar而不是cglib-2.1_3.jar

struts2由于是jdk1.5编译的需要用retrotranslator转换,工具在struts2目录下的backport目录中,struts2-core-j4-2.0.11.1.jar和xwork-j4-2.0.4.jar已经转好了,再自己转个struts2-spring-plugin-j4-2.0.11.1.jar就可以了,最后把backport-util-concurrent-3.0.jar,retrotranslator-runtime-1.2.2.jar和你转好的包扔到lib目录下,原来的删除。

这方面网上资料还是蛮多的,不明白的可以查找下。

5.websphere5.1兼容性问题

当你成功完成上述步骤后tomcat4已经可以跑了,然后部署到websphere5.1如果没有错误的话可以运行而且后台不报错,但是页面上报XXX.action路径找不到,这个花了我好多时间才搞定,网上也没找到具体解决方案。

原因:

DefaultActionMapper类中的getUri方法:

String getUri(HttpServletRequest request) {
		// handle http dispatcher includes.
		String uri = (String) request
				.getAttribute("javax.servlet.include.servlet_path");
		if (uri != null) {
			return uri;
		}

		uri = RequestUtils.getServletPath(request);
		//System.out.println("url==========="+uri);
		//old:if (uri != null && !"".equals(uri)) {
		if (uri != null && uri.length() > 1) {
			return uri;
		}

		uri = request.getRequestURI();
		return uri.substring(request.getContextPath().length());
	}

 发现上面注释掉的那句:

//System.out.println("url==========="+uri);

输出为"/",实际为"/XX/XX.action"看来是uri解析错误,猜想可能是

RequestUtils.getServletPath(request);

这个方法有bug,结果发现源代码没提供,所以只能在外层方法中改下了,重写了个过滤器。改完后成功运行。

解决方案如下,添加2个类

DefaultActionMapperCompaWebsphere51(修改了getUri后的判断)

/*
 * $Id: DefaultActionMapper.java 540141 2007-05-21 13:46:48Z mrdon $
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.struts2.dispatcher.mapper;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.RequestUtils;

public class DefaultActionMapperCompaWebsphere51 extends DefaultActionMapper {
	private static ActionMapper actionMapper = new DefaultActionMapperCompaWebsphere51();
	
	public static ActionMapper getActionMapper(){
		return actionMapper;
	}
	
	/**
	 * modify uri compare
	 * @param request
	 * @return
	 */
	String getUri(HttpServletRequest request) {
		// handle http dispatcher includes.
		String uri = (String) request
				.getAttribute("javax.servlet.include.servlet_path");
		if (uri != null) {
			return uri;
		}

		uri = RequestUtils.getServletPath(request);
		//System.out.println("url==========="+uri);
		//old:if (uri != null && !"".equals(uri)) {
		if (uri != null && uri.length() > 1) {
			return uri;
		}

		uri = request.getRequestURI();
		return uri.substring(request.getContextPath().length());
	}

}

 FilterDispatcherCompaWebsphere51(调用自己刚才重写的DefaultActionMapperCompaWebsphere51)

/*
 * $Id: FilterDispatcherCompatWeblogic61.java 476075 2006-11-17 08:28:30Z mrdon $
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.struts2.dispatcher;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.RequestUtils;
import org.apache.struts2.dispatcher.mapper.ActionMapper;
import org.apache.struts2.dispatcher.mapper.ActionMapping;
import org.apache.struts2.dispatcher.mapper.DefaultActionMapperCompaWebsphere51;

import com.opensymphony.xwork2.util.profiling.UtilTimerStack;

public class FilterDispatcherCompaWebsphere51 extends FilterDispatcher {
	private static boolean serveStatic;

	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;
		ServletContext servletContext = getServletContext();

		String timerKey = "FilterDispatcher_doFilter: ";
		try {
			UtilTimerStack.push(timerKey);
			request = prepareDispatcherAndWrapRequest(request, response);
			ActionMapping mapping;
			ActionMapper actionMapper = DefaultActionMapperCompaWebsphere51.getActionMapper();
			try {
				mapping = actionMapper.getMapping(request, dispatcher
						.getConfigurationManager());
			} catch (Exception ex) {
				log.error("error getting ActionMapping", ex);
				dispatcher.sendError(request, response, servletContext,
						HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex);
				return;
			}

			if (mapping == null) {
				// there is no action in this request, should we look for a
				// static resource?
				String resourcePath = RequestUtils.getServletPath(request);

				if ("".equals(resourcePath) && null != request.getPathInfo()) {
					resourcePath = request.getPathInfo();
				}

				if (serveStatic && resourcePath.startsWith("/struts")) {
					String name = resourcePath.substring("/struts".length());
					findStaticResource(name, request, response);
				} else {
					// this is a normal request, let it pass through
					chain.doFilter(request, response);
				}
				// The framework did its job here
				return;
			}

			dispatcher
					.serviceAction(request, response, servletContext, mapping);

		} finally {
			try {
				ActionContextCleanUp.cleanUp(req);
			} finally {
				UtilTimerStack.pop(timerKey);
			}
		}
	}

	private static final Log log = LogFactory
			.getLog(FilterDispatcherCompaWebsphere51.class);

}

 修改web.xml中原来的struts2的filter类

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.FilterDispatcherCompaWebsphere51
        </filter-class>
    </filter>

之后就可以放在tomcat和websphere5.1上运行了。

本文只说明了遇到的一些问题的解决方案,如何配置struts2或spring或hibernate可以参考官方资料。

如有不明白的可以留言。

分享到:
评论
6 楼 sliverfancy 2009-04-24  
谢谢把你这个项目用到的lib目录下的jar列个表看看行吗?我现在配置的strtus2+spring2+hibernate3跑不起来,启动的时候报error filterstart错误。
5 楼 lg_techie 2008-12-16  
恼火,我们公司就是采用的websphere6.0,好像ws6.0不支持jdk5.0,没有办法全部都得改!!! 我对项目经理出离愤怒老!!!  
4 楼 hrtc 2008-12-03  
这个可能是xml解析器导致的问题,需要配置下SAXParse相关的工厂类参数,具体我也不大清楚,到网上查一下吧。
3 楼 星哥儿 2008-12-02  
我的开发环境是MyEclipse5.5、Tomcat6.0,SSH2框架,并用到了E3tree和DWR。可项目打包部署时客户要求用WebSphere6.0做服务器,我改啊改啊,IDE变成MyEclipse5.0,JDK也换成1.4了,Tomcat换成4.0的,并按照你的步骤都做到第4步了,可修改之后在启动tomcat4.0时报如下错误,我都郁闷了好几天了,特此请教!

2008-12-2 23:19:51 org.apache.commons.digester.Digester error
严重: Parse Error at line 10 column -1: 组件类型“uri”未被声明。
org.xml.sax.SAXParseException: 组件类型“uri”未被声明。
	at org.apache.crimson.parser.Parser2.error(Parser2.java:3354)
	at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1502)
	at org.apache.crimson.parser.Parser2.content(Parser2.java:1963)
	at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1691)
	at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:667)
	at org.apache.crimson.parser.Parser2.parse(Parser2.java:337)
	at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
	at org.apache.commons.digester.Digester.parse(Digester.java:1765)
	at org.apache.catalina.startup.ContextConfig.tldScanStream(ContextConfig.java:929)
	at org.apache.catalina.startup.ContextConfig.tldScanJar(ContextConfig.java:863)
	at org.apache.catalina.startup.ContextConfig.tldScan(ContextConfig.java:810)
	at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:588)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:182)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:3644)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:777)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:760)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:538)
	at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:265)
	at org.apache.catalina.core.StandardHost.install(StandardHost.java:731)
	at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:649)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:379)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:808)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:335)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1156)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:697)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1148)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:311)
	at org.apache.catalina.core.StandardService.start(StandardService.java:450)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:2213)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:484)
	at org.apache.catalina.startup.Catalina.execute(Catalina.java:371)
	at org.apache.catalina.startup.Catalina.process(Catalina.java:134)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:151)
2008-12-2 23:19:51 org.apache.commons.digester.Digester error
严重: Parse Error at line 11 column -1: 组件类型“listener”未被声明。
org.xml.sax.SAXParseException: 组件类型“listener”未被声明。
	at org.apache.crimson.parser.Parser2.error(Parser2.java:3354)
	at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1502)
	at org.apache.crimson.parser.Parser2.content(Parser2.java:1963)
	at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1691)
	at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:667)
	at org.apache.crimson.parser.Parser2.parse(Parser2.java:337)
	at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
	at org.apache.commons.digester.Digester.parse(Digester.java:1765)
	at org.apache.catalina.startup.ContextConfig.tldScanStream(ContextConfig.java:929)
	at org.apache.catalina.startup.ContextConfig.tldScanJar(ContextConfig.java:863)
	at org.apache.catalina.startup.ContextConfig.tldScan(ContextConfig.java:810)
	at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:588)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:182)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:3644)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:777)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:760)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:538)
	at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:265)
	at org.apache.catalina.core.StandardHost.install(StandardHost.java:731)
	at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:649)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:379)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:808)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:335)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1156)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:697)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1148)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:311)
	at org.apache.catalina.core.StandardService.start(StandardService.java:450)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:2213)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:484)
	at org.apache.catalina.startup.Catalina.execute(Catalina.java:371)
	at org.apache.catalina.startup.Catalina.process(Catalina.java:134)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:151)
2 楼 hrtc 2008-08-06  
如果确定文件在的话,按上述步骤试下,6.1没用过,看是否是相同的原因,希望你成功。
1 楼 yuyang030405 2008-07-30  
我项目在工作的时候由于方便,所以就在tomcat5.5下运行
上线的时候客户要求用了websphere6.1,我就直接部上来了,登陆的页面能看到,但是输入信息登陆后就弹出个页,说是:
Error 404: SRVE0190E:找不到文件: login.action

请问,这是什么原因啊?

相关推荐

    MYECLIPSE + STRUTS2 + SPRING4 + HIBERNATE4 + STRUCTS2S+OGNL + MYSQL_5.7.12

    根据提供的标题、描述以及部分内容,本文将详细解析与MYECLIPSE + STRUTS2 + SPRING4 + HIBERNATE4 + STRUCTS2S+OGNL + MYSQL_5.7.12相关的技术栈及其应用。这些技术在企业级开发中非常常见,能够帮助开发者构建高效...

    Spring 2.0 开发参考手册

    2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的...

    spring chm文档

    2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@...

    Spring API

    2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...

    Spring中文帮助文档

    12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器中使用Hibernate的注意事项 12.3. ...

    高级软件工程师个人简历表.pdf

    - Struts 2:Apache Struts 是一个用于创建企业级 Java Web 应用的开源 MVC 框架。 - Spring 2.5:Spring 框架为 Java 应用提供了一个全面的编程和配置模型。Spring 2.5 时期的版本主要关注了注解驱动的开发体验。...

    J2EEWEB开发教程

    ### J2EE WEB 开发教程知识点详述 #### 第一章 J2EE的基本概念和规范 **1.1 J2EE定义** J2EE(Java 2 Platform, Enterprise ...后续章节将继续深入讨论J2EE的相关技术和框架,如JDBC、Struts、Hibernate、Spring等。

Global site tag (gtag.js) - Google Analytics