移植问题及解决

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

移植问题及解决

By CFR(mudboy)

摘要:本文档包括将现在系统:从tomcat5移植至WAS5.1,以及从WAS5.1移植到WAS6.0的一些问题的解决过程。

 

1、概述

应用架构:

WebStart/jsp + struts1.1 + spring115 + hibernate2.1

 

2、问题及解决

2.1 症状:用了JSTL标签的JSP页面运行出错。

解决:由于was512不支持jstl2.0(标准的写法将自动使用该版本的标签而不用配置),因此,使用它时,需要web.xml中显式的增加配置,或直接写明使用:

<%@ taglib uri="/WEB-INF/tld/c-1_0.tld" prefix="c" %>

而不是2.0

web.xml中增加如下即可

<taglib>

    <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>

    <taglib-location>/WEB-INF/tld/c-1_0.tld</taglib-location>

</taglib>

如果支持,则可以直接用而不需要配置!

注意:jstl并不是WEB容器必须支持的东东!

 

2.2 症状:URLConnection调用Servlet,有两种方法设置我当前的SESSION(后端传过来的):

设置Cookie的:JSESSIONID,或重写URL,这在tomcat完全没有问题,但在WebSphere5.1下却不行,到服务器又创建了一个新的SESSION,不知道为什么?

解决:一般而言,有两种最常用的会话跟踪机制,一种就是URL重写。在客户端不接受cookie的情况下可以使用URL重写进行会话跟踪。URL重写包括向URL路径添加一些容器可以解释的数据。规范要求会话ID必须编码在URL路径中,参数名称必须是jsessionid

例如: http://www.myserver.com/catalog/index.html;jsessionid=1234

一种就是现在最常用的cookie了,规范要求所有的servlet都必须支持cookie。容器向客户端发送一个cookie,客户端在后续的处于同一个会话的请求中向服务器返回该cookie。会话跟踪cookie的名字必须是JSESSIONID

httpUrl=http://localhost:9080/Agile/getFlightList.do;jsessionid=-JW0T70Esp9QZlyfUKOsO7o?currentCity=PEK

上面的方式在WAS下也不行,也不知道还需要做什么设置?

原来,在WAS中,SESSIONID不止这些,而应该是:<your_session>:<websphere_clone_id>,而返回的只有:前的部分,当然没有呀!!

看下面的日志:

swt process,sessionID is :uEVqj3UC4yYmIAZvmyZzuPw

2005-06-21 13:24:06 [com.ibatis.struts.SwtAction]-[DEBUG] other:0000uEVqj3UC4yYmIAZvmyZzuPw:-1,JSESSIONID=0000uEVqj3UC4yYmIAZvmyZzuPw:-1

2005-06-21 13:24:06 [com.ibatis.struts.SwtAction]-[DEBUG] cookie:JSESSIONID=0000uEVqj3UC4yYmIAZvmyZzuPw:-1

SESSIONID还包括冒号后的部分。

在链接页面中,将代代码做如下修改:

<%

String sessionid = "";

Cookie[] cookie = request.getCookies();

for(int i = 0; i < cookie.length; i++)

{

       if(cookie[i].getName().trim().equalsIgnoreCase("JSESSIONID"))

       {

              sessionid = cookie[i].getValue().trim();

              break;

              //logger.debug("cookie:"+cookie[i].getName() + "=" +cookie[i].getValue());

       }

      

}

 

%>

 

<a href="/Agile/swt/index.jnlp?sessionid=<%=sessionid%>">lanuch agile client here</a>

 

实际上,解决此方法唯一要改的地方就是链接处(见上):

但为了以后其它的兼容性,也可将URL重写也加上,这在HTTPUTIL文件中。

即不能通过调用getSession().getId()得到,而应该自己从Cookie中找

 

 

2.3 症状:ORB得不到,通过JNDI无法得到,也无法得到SUNORB

解决:由于WAS用的是IBM自己改造过的JRE,因此,通过实验,无法更换到SUNJRE,而且也无法让相关的SUNORB组件介入。最终还应通过JNDI获取。

将通过JNDI得到ORB的代码改成如下:

orb = (org.omg.CORBA.ORB) ctx.lookup("java:comp/ORB");

orb =(org.omg.CORBA.ORB)javax.rmi.PortableRemoteObject.narrow(

                                   ctx.lookup("java:comp/ORB"),

                                   org.omg.CORBA.ORB.class);

运行正常。

 

 

 

2.4 症状:WAS5.1WAS6.X 出现的问题,即URL重写导致STRUTS相关的请求均无法正常完成。

解决:主要原因是:getPathInfo,getServletPath的实现有变动,这会影响到struts,acegi等获得路径的行为。

 

解决方法:

       SWT中的URL重写部分去掉

       创建新的RequestProcess,可以只在WAS6.X上才配置用该RequestProcess,在该process中,取得路径后,如果有URL重写部分则将其去掉

       配置上新的processor后,工作正常。

 

 

附录1

得到ORB异常信息:

org.omg.CORBA.INTERNAL:   vmcid: 0x4f422000  minor code: 77  completed: No

[05-6-21 13:50:59:656 CST] 2dbf5794 SystemErr     R    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

[05-6-21 13:50:59:656 CST] 2dbf5794 SystemErr     R    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:79)

[05-6-21 13:50:59:656 CST] 2dbf5794 SystemErr     R    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java(Compiled Code))

[05-6-21 13:50:59:656 CST] 2dbf5794 SystemErr     R    at java.lang.reflect.Constructor.newInstance(Constructor.java(Compiled Code))

 

附录2

有关InitServlet晚于listener执行的问题,解决无非两种:

1)让Spring在需要时才生成对象

2)自己写listener载入配置(不在InitServlet中进行),且必须在Springlistener之前执行。

3)规定不要在SPRING管理的类构造函数中调用配置。

目前已按方法2进行。

 

 

 

附录3

以下是IBM BBS上的一些问答,供参考:

 

附录:

http://www-128.ibm.com/developerworks/forums/dw_thread.jsp?message=4023650&cat=9&thread=54497&treeDisplayType=threadmode1&forum=266#4023650

 

JSESSIONID cookie - Help!

Originally posted: 2004 July 15 05:39 AM

  Nau      Post new reply 

 

Hi, All

 

I have a need to call a servlet from another one withing the same session:

 

URL url = new URL( someURL );

URLConnection connection = url.openConnection();

connection.setDoInput( true );

connection.setRequestProperty( "Cookie", "JSESSIONID=" + request.getSession().getId() );

 

This piece of code works fine for Tomcat but on Webspere I'm getting a new session.

 

Any help please!

Thanks a million

 

Re: JSESSIONID cookie - Help!

Originally posted: 2004 July 19 07:15 AM

  Ben_      Post new reply 

 

WebSphere generates a cookie named JSESSIONID with value

<your_session>:<websphere_clone_id>.

 

It can be JSESSIONID=000024N1ZDMZZH022EANUW2ZO5I:u7078j8m, for example.

 

You can see this if you look at the cookies the browser received or dump the

HTTP request headers.

 

You built an HTTP request containing the JSESSIONID cookie with

"JSESSIONID=" + request.getSession().getId(), but this code is broken

because getSession().getId() only return the value before the ':' sign in

the cookie value.

 

Since only the *name* of the cookie is standardized in J2EE (JSESSIONID),

it's a bad idea to assume the format of the cookie is simply the session id,

because the way the *value* of the session cookie is computed is not J2EE

standardized.

 

You'd better read the actual value from the HTTP request header instead.

 

 

 

Re: JSESSIONID gets overwritten

Originally posted: 2005 Feb 28 05:01 PM

  sjostrand2@hotmail.com      Post new reply 

 

 

Lukasz Szelag wrote:

> JSESSIONID gets overwritten in the following scenario:

>

> 1. HTTP Request is sent to "A" URL.

>

> 2. HTTP session is created for "A" and session ID is stored in

> JSESSIONID cookie.

>

> 3. "A" stores an object in the session.

>

> 4. "A" calls "B" ("B" provides a menu)

>

> 5. HTTP session is created for "B" and session ID is stored in

> JSESSIONID cookie overwriting the previous value ("A" session ID).

>

> 6. Second HTTP request is sent to "A" URL.

>

> 7. "A" fails to lookup the object in the session stored in step 3.

> request.getSession(false) returns null.

>

> Is there a way to cure this problem? Thanks.

>

> PS. Not sure if that matters but "A" and "B" are deployed on two

> different servers. Specifying a different names for cookies seems to

> help, i.e. JSESSIONID_A and JSESSIONID_B but this is WebSphere

specific

> extension (Servlet specification requires that the cookie name is

> JSESSIONID).

>

> Lukasz

 

I assume that A and B are in two different WAR files and therefore have

different context roots, right?

 

In that case you could use WebSphere's admin console and change the

cookie path from the default (which is /, meaning the cookie is sent as

long as the URL starts with a /, which is always) to the context root

for each application.

So for application A, set the cookie path to /appA_contextRoot and for

application B, set the cookie path to /appB_contextRoot.

 

In WebSphere's admin console, go to Enterprise Applications ->

Application A -> Session Management -> {click the Enable Cookies link}

and change the Cookie path.

Good luck

/Henrik Sjostrand

解决Android平台移植ffmpeg的一揽子问题 IT行业是一个踩在巨人肩膀上前进的行业,否则做的事情不一定有意义,所以我也是基于havlenapetr移植的ffmpeg基础上做了些改进,他做的主要贡献有:1. 移植了ffmpeg并将与媒体相关的结构体在java层重新进行了封装,方便应用程序在java层直接操作ffmpeg API,如各种媒体格式转码及播放2. 模仿Android的MediaPlayer类实现了ffmpeg的播放接口,如setDataSource(),setDisplay(),start(), stop(),pause()等,缺点是没有实现 阅读详情

相关推荐

lwip双网卡移植问题,以及特殊解决方法。

我公司产品是双网口,原来的程序是自己写的TCP/IP协议栈,因为只是简单实现了ARP和TCP、UDP的最简单情况,所以有时候在公网上会遇到问题。 后来在单网口的产品中移植了LWIP,轻量级TCP/IP协议栈,觉得一定程度上解决问题,所以双网卡的产品也要用LWIP这个协议栈来实现。这个工作就落到了我的头上。 单网卡的移植我不赘述,只描述从单网卡向双网卡移植过程中遇到的问题以及解决方法。 首先

每天进步一点点... 7961

Uboot的移植中遇到的一些问题,及解决方法。

首先感谢tekkamanninja分享的源码:https://github.com/tekkamanninja/u-boot-2010.03-tekkaman,也可以参考友善之臂的移植手册。 由于本学期主要学习exyson 4410,对mini2440了解比较少,通过查看数据手册,移植手册,分析源码,学习了uboot的工作原理,启动过程。 下面就说一下我遇到的问题,及其解决方法。 1

不忘初心,方得始终。 5220

ffmpeg移植android编译问题解决

因项目需要用到视频监控技术,从网上查的可以用ffmpeg来实现视频的编码解码功能 系统;win10 开发软件:IDEA NDK:13B; ffpeg:3.2 写个shell脚本,执行编译 #!/bin/bash NDK=D:\android\sdk\ndk\android-ndk-r13b SYSROOT=D:\android\sdk\ndk\android-ndk-r13b\p

Luo_lung的博客 1515

WAS Server 启动报错无法找到秘钥解决办法

报错日志:[7/18/17 18:04:24:582 CST] 0000000a ORBRas E com.ibm.ws.orbimpl.transport.WSTransport createServerSocket P=254162:O=0:CT ORBX0390E: Cannot create listener thread. Exception=[ or...

weixin_34109408的博客 568

嵌入式系统移植常见问题解决方案备忘

//=========================================================//编译U-BOOT在主目录下:make cleanmake mini2440_configmake //==========================================================//tftp 192.168.0.67(服务器IP)get

hadise的专栏 5417

初学STM32移植FreeRTOS遇到问题以及解决办法

初学移植FreeRTOS遇到问题以及解决办法目录移植经历下载方式keil下移植关于移植过程中出现的问题以及解决办法移植经理合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表F...

qq_22146161的博客 5069

buildroot移植后的一些问题解决1

移植buildroot构建根文件系统后发现了一些问题,所以写了这篇文章来分享解决思路。

wanqing12的博客 602

蜂鸟E203移植ZYNQ7020,主要解决移植过程中遇到的问题

基于ZYNQ7020的蜂鸟E203的移植,以及移植过程中遇到的许多问题

qq_44676785的博客 3694

iperf移植到ARM上出现问题解决

最近要使用iperf测试wifi模块的延时,所以重点研究了一下iperf. 1.安装使用 我主要是使用的linux,安装和使用方法其他文档有很详细的介绍,在此不再赘述,具体可参考下面链接: iperf命令 2.iperf移植到ARM 这里关键点事交叉编译的问题,我是添加了一个Makefile文件,具体如下: CUR_DIR := $(shell pwd) OSDRV_CROSS ?= arm-himix100-linux ###################################

yyyljw的博客 1056

移植tslib到开发板及部分问题解决

qt的tslib的具体移植步骤和过程就不多讲了,我说说我按照手册移植好tslib后在开发板运行提示的错误以及我的解决方法,当然每个人的提示可能一样,解决方法就不一样,我也是个初学者,所以方法仅供大家参考! 问题一: Segmentation fault Could not read calibration: "/etc/pointercal" 解决方法: 编辑rootfs/usr/loc

学习是为了探索这个世界的本质 2104

Oracle数据库移植时字符集问题解决

Oracle数据库移植时字符集问题解决对于Oracle数据库之间的移植采用Oracle的导入导出工具(Import/Export)是一个比较好的策略。虽也可以利用第三方软件如Sybase 的Power designer中的Re...

cizn2013的博客 152

ARM平台下的Qt移植移植相关问题解决方法

一、Qt的qmake版本问题 在配置编译好Qt源码后,运行qmake -v来查看Qt的qmake版本,结果出错显示 qmake: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qmake': No such file or directory 解决方法为 ①由于我们是手动编译Qt库(或者是之前安装过Qt,并卸载残留),所以要手动修

qq_39564672的博客 1024

将开源libosmscout移植到QNX遇到的问题解决方法

大费周章将libosmscout在vs平台上编译成功了,虽然已经有了readme编译手册,但是其依赖的其他开源库较多,一点的差错都不能有。 若将libosmscout移植到QNX,一个新的平台上,发生什么意外都不奇怪了。所以libosmscout里几个工程,只选取最基本的,不依赖其他库的libosmscout工程进行移植。 这里总结下移植过程中遇到的问题: 1. 随时准备调整conf

viewcode的专栏 2239

cocos2dx使用了第三方库照样移植android平台-解决iconv库的移植问题

好记性不如烂笔头 cocos2dx使用了第三方库照样移植android平台-解决iconv库的移植问题 http://www.zaojiahua.com/iconv.html

qq_27627461的博客 209

转:移植tslib到开发板及部分问题解决

1.1. 移植QT到开发板1.1.1. tslib移植tar xvzf kergoth-tslib-1.0-89-g412d99d.tar.gzcd kergoth-tslib-412d99d./autogen.sh./configure --prefix=/usr/local/tslib --host=arm-linux ac_cv_func_malloc_0_non

glorin的专栏 1万+

Iperf使用教程、移植到ARM、移植时遇到的问题解决

iperf是一个基于Client/Server的网络性能测试工具,可以测试TCP、UDP和SCTP带宽质量,能够提供网络吞吐率信息,以及震动、丢包率,最大段和最大传输单元大小等统计信息,帮助我们测试网络性能,定位网络瓶颈。其中抖动和丢包率适应于UDP测试,二带宽测试适应于TCP和UDP。iperf的好处是纯粹发包和接收,防止硬盘拖后腿,影响测试结果。对于时延,iperf无能无力。但是iperf能够...

qq_31186123的博客 5332

STM32移植FreeRTOS出现的问题解决办法

# 问题:\FreeRTOS\queue.c(2761): error: #268: declaration may not appear after executable statement in block

4642

移植Freertos遇到的几个问题以及解决方法

以下使用的正点原子的HAL库程序源码里的跑马灯实验例程,总结的是自己遇到的问题以及解决方法,移植delay.c文件遇到的问题以及解决方法,是因为缺少 task.h头文件。1.类似以下这种无定义报错的情况。

tian123_123的博客 1000
上一篇: 0621
下一篇: 0627
mudboy
博客等级 码龄25年 15粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值