Websphere通用部署步骤及问题处理详细版

8 篇文章 1 订阅
3 篇文章 0 订阅

以下对Websphere部署步骤及问题处理进行了详细说明,包括SSL密钥库生成、HTTPS配置、解决同一个was服务中部署多个应用时session冲突问题、Websphere参数优化、session持久化、web.xml更新问题、在Websphere控制台中查看运行状态等。

1.  名词说明

was:WebSphere Application Server

ihs:IBM HTTP Server

服务:was中的Server

应用:was服务中部署的应用

单元:was中的Cell

节点:was中的Node

服务端口:was的server监听的端口

虚拟主机:was的应用可访问的端口,必须存在相同端口号的服务端口才能访问

上下文根:was的应用访问URL的最后一部分(不包含参数),如http://ip:port/context?arg中的/context

nd版was:Network Deploy,可使用was的软集群,不同服务器之间可实现会话复制。was控制台的进程与was Server的进程独立。一个Node可以安装多个Server。除了was Server的进程外,还包括node与dmgr的进程。

base版was:不可使用was的软集群,不同服务器之间不可实现会话复制。was控制台的进程与was Server的进程为同一个进程。一个Node只能安装一个Server。除了was Server的进程外,不包括node与dmgr的进程。

2.  was通用部署步骤

以下步骤在was base版本8.5测试,不同版本的was可能存在差异。修改了was的配置后,通常需要重启was Server才能生效。

2.1     说明

以下步骤中各项配置的值仅起说明使用,请以实际需要的值为准。

2.2     SSL密钥库生成

若应用使用HTTPS访问,需要先生成SSL密钥库,在应用所在的每台服务器执行以下操作(不同服务器使用相同命令生成的密钥库文件与密钥请求文件均不相同,因此需要在每台服务器均执行):

a.   使用was用户,进入was的java/bin目录,/was/IBM/WebSphere/AppServer/java/bin

b.   执行以下命令,在当前目录生成密钥库文件

参数

说明

-keystore

指定生成的keystore文件

-alias

密钥别名,固定为server(下同)

-storepass与-keypass

密码,需修改

-dname,CN=

使用HTTPS访问的域名(若使用IP访问则应为IP)

-validity

有效天数,7300约20年

命令如下:

keystore=keystore.jks

alias=server

pwd=xxxxxx

url=cscsr.szrcb.net

validity=7300

 

./keytool -genkey -alias $alias -keyalg RSA -keysize 2048 -keystore $keystore -storetype jks -storepass $pwd -keypass $pwd -dname "CN=$url, OU=srcb, O=srcb, L=sz, ST=gd, C=CN" -validity $validity

若执行成功,无提示;若提示“keytool 错误:java.lang.Exception: 未生成密钥对,别名 <server> 已经存在”,说明别名为server的密钥库文件已存在,需删除。

c.   执行以下命令,在当前目录生成证书请求文件certreq-xx.pem,xx为当前服务器的IP尾号,用于区分不同服务器生成的密钥请求文件

pem=certreq-xx.pem

alias=server

pwd=xxxxxx

 

./keytool -certreq -alias $alias -sigalg MD5withRSA -file $pem -keystore keystore.jks -keypass $pwd -storepass $pwd

若执行成功,无提示

d.   将生成的certreq-xx.pem发送给CA,生成每台服务器的证书,需要告知CA生成keystore文件时使用的域名

e.   将CA提供的每台服务器的证书文件xx.cer分别上传至对应服务器的/was/IBM/WebSphere/AppServer/java/bin目录,将CA的根证书也上传至该目录

f.   执行以下命令,将CA根证书root.cer导入密钥库,会提示“信任此证书吗?[no]:”,输入“y”并回车

keystore=keystore.jks

rootcer=root.cer

pwd=xxxxxx

 

./keytool -import -alias intermediate -keystore $keystore -trustcacerts -storepass $pwd -file $rootcer

若执行成功,提示“证书已添加到密钥库中”

g.   执行以下命令,将CA生成的服务器证书xx.cer导入密钥钥库,

keystore=keystore.jks

alias=server

pwd=xxxxxx

cert=xx.cer

 

./keytool -import -alias $alias -keystore $keystore -trustcacerts -storepass $pwd -file $cert

若执行成功,提示“证书应答已安装在密钥库中”

提示“keytool 错误:java.lang.Exception: 应答中的公用密钥与密钥库中的公用密钥不匹配”,说明CA提供的证书有问题

h.   将keystore.jks复制到保存密钥的目录,如/was/key

i.   执行以下命令,导出服务器证书(导出的证书与CA提供的相同,可不执行)

keystore=keystore.jks

alias=server

pwd=xxxxxx

exportcert=xx.cer

 

./keytool -export -alias $alias -keystore $keystore -file $exportcert -storepass $pwd

若导出成功,提示“证书存储在文件 <export-xx.cer> 中”

2.3     was通用部署步骤

2.3.1  上传数据库驱动程序至服务器

该步骤仅需在每台服务器执行一次。

将ojdbc6.jar上传至${WAS_INSTALL_ROOT}/lib目录下。

WAS_LIBS_DIR与WAS_INSTALL_ROOT定义在“环境->WebSphere 变量”中。

WAS_INSTALL_ROOT在Linux下一般为/was/IBM/WebSphere/AppServer,Windows下一般为D:\IBM\WebSphere\AppServer。

说明:

oracle 11g,JDK 1.6,需要使用驱动ojdbc6.jar,驱动程序与oracle及JDK版本的对应关系可在oracle官网查看。ojdbc6.jar可从测试环境oracle服务器获取,所在目录如“/soft/product/11.2.0.3/dbh/jdbc/lib”。

2.3.2  创建JDBC提供程序

该步骤仅需在每个Node执行一次。

a.   新建JDBC提供程序,作用域选择单元

b.   设置JDBC提供程序基本信息

c.   设置JDBC驱动程序文件的类路径,“类路径”此时不需修改,将“另存为WebSphere变量xxx的目录位置”修改为“${WAS_INSTALL_ROOT}/lib”。

d.   完成

e.   保存

f.   点击刚生成好的JDBC提供程序“Oracle JDBC Driver”

g.   修改类路径为“${WAS_INSTALL_ROOT}/lib/ojdbc6.jar”,保存。ojdbc6.jar驱动可用于10g与11g的oracle数据库。

2.3.3  创建J2C认证数据(存储数据库用户密码)

该步骤仅需为每个数据库执行一次。

a.   打开“J2C认证数据”

b.   新建

c.   设置“别名”等信息,“用户标识”为数据库用户名,密码为数据库密码,保存

建议填写描述,否则启动时日志会提示“找不到 ConnectionFactory 或 DataSource [数据源名字] 的 mappingConfigAlias。”。

2.3.4  创建数据源

a.   新建数据源,作用域选择单元

b.   设置数据源信息

c.   选择之前创建的JDBC提供程序

d.   设置数据源URL(域名需要在hosts文件中设置)

e.   选择对应的J2C认证信息,完成,保存

2.3.5  创建虚拟主机

a.   新建虚拟主机

b.   设置虚拟主机名字,保存

c.   点击刚创建的虚拟主机

d.   点击“主机别名”,新建

e.   设置需要的端口

2.3.6  服务端口设置

a.   选择需要设置的服务

b.   点击“端口”,新建

c.   设置端口属性。“指定端口名”为当前新建的端口名字,“主机”为*,不能使用localhost,否则无法访问。“端口”应与对应虚拟主机设置的端口相同。确定,保存。新增或修改端口后,需要重启was的server才能生效。

2.3.7  服务Web容器传输链设置(HTTP)

a.   选择需要设置的服务

b.   点击“Web容器传输链”,新建

c.   输入传输链名称,传输链模板选择“WebContainer”(HTTP)

d.   选择刚创建的端口,完成,保存

 

2.3.8  SSL配置

a.   将“SSL密钥库生成”步骤生成的keystore.jks文件从/was/IBM/WebSphere/AppServer/java/bin移动到/was/key目录中

b.   进入SSL的密钥库和证书配置界面

c.   选择“SSL密钥库”,新建

d.   输入密钥库的名称,“路径”填入jks文件的路径,输入jks文件密码,类型选择“JKS”

e.   进入SSL配置界面

f.   新建SSL配置

g.   输入SSL配置名称,“信任库名称”与“密钥库名称”选择上一步骤新建的密钥库,点击“获取证书别名”,“缺省服务器证书别名”与“缺省客户机证书别名”全自动变成密钥库的别名(即创建密钥库时-alias的参数值)

h.   更新证书文件后,若未修改密码,重启was服务即可生效,不需重新进行配置

2.3.9  服务Web容器传输链设置(HTTPS)

与配置HTTP的传输链相比,有以下区别:

a.   输入传输链名称,传输链模板选择“WebContainer-Secure”(HTTPS)

b.   保存之后,点击刚配置了传输链,点击“SSL入站通道(SSL_X)”

c.   “特定于此端点”选择上一步骤新建的SSL配置。

完成以上配置后,需在客户端安装SSL根证书,重启was服务,可使用HTTPS链接登录。

2.3.10     生成war包

cd 到需要打包的目录,即“WEB-INF”目录所在的目录,执行以下命令打包

jar -vcf xxx.war *

2.3.11     上传war包至服务器

将生成的war包上传到服务器指定目录,如/was/publish

2.3.12     部署应用

a.   安装应用

b.   选择需要部署的war包

c.   选择“快速路径”

d.   设置“安装应用程序的目录”

e.   将模块映射至服务器

f.   选择需要的JNDI名称

g.   选择需要的虚拟主机

h.   设置上下文根,完成,保存

2.3.13     更新应用

使用“更新”功能即可使用新的war包部署应用,不需要先卸载再重新安装

2.4     解决同一个was服务中部署多个应用时session冲突问题

若同一个was服务中若部署了多个应用,由于应用的默认session名字均为JSESSIONID,当使用浏览器登录同一was服务(使用相同的IP或域名)的不同应用时,可能产生session冲突的问题,导致服务器无法正确判断浏览器的登录状态。可通过网络层面与应用层面解决。

2.4.1  网络层面解决

为同一个was服务的不同应用申请不同的域名,每个应用使用不同的域名访问,session不会出现冲突,可解决上述问题。

新呼叫中心采用该方法解决上述问题。

2.4.2  应用层面解决

为同一个was服务的不同应用设置不同的session名字,可解决上述问题,步骤如下:

a.   打开“WebSphere企业应用程序”,打开需要设置的应用

b.   打开“会话管理”

c.   钩选“覆盖会话管理”,打开“启用cookie”

d.   修改“cookie名”,如使用应用简称作为前缀或后缀,使其不与同一个was服务中的其他应用的冲突。完成以上修改后,不需重启was服务即可生效。

2.5     修改或移除访问was时返回的HTTP头中的Server字段

默认配置下,访问was控制台或was部署的应用时,返回的HTTP头中会包含Server字段,内容为“WebSphere Application Server/[was版本号]”,如“Server: WebSphere Application Server/8.0”。

若需要修改或移除上述Server字段,需要在was应用所使用的Web容器传输链的HTTP入站通道新增定制属性,如下图所示(假设was应用所使用的Web容器传输链名称为“csr_chain”)。

当需要移除上述Server字段时,需要添加的属性名称为“RemoveServerHeader”,值为“true”。

当需要修改上述Server字段时,需要添加的属性名称为“ServerHeaderValue”,值为所需返回的HTTP头中的Server字段值。如将值设为“xxx”,返回的Server字段内容为“Server: xxx”。

修改访问was时返回的HTTP头中的Server字段,可判断浏览器当前访问的服务器,便于定位会话丢失与会话保持问题。

2.6     was参数优化

2.6.1  JAVA虚拟机堆大小设置

a.   选择需要设置的服务

b.   打开“Java和进程管理”“进程定义”

c.   打开“其他属性”“Java虚拟机”

d.   设置“初始堆大小”与“最大堆大小”,点击“确定”“保存”

2.6.2  Web容器线程池设置

a.   选择需要设置的服务

b.   打开“其他属性”“线程池”

c.   打开“WebContainer”

d.   设置最小与最大线程数,点击“确定”“保存”

2.6.3  数据源连接池设置

a.   打开“资源”“JDBC”“数据源”

b.   打开需要修改的数据源

c.   打开“其他属性”“连接池属性”

d.   修改最大与最小连接数,点击“确定”“保存”

2.6.4  日志参数设置

a.   进入服务的日志设置界面

b.   打开“JVM日志”界面

c.   System.out与System.err均设为最大大小:20MB,历史日志文件最大数:10

2.7     session持久化

2.7.1  was配置

a.   打开需要配置session持久化的应用的会话管理界面

b.   钩选“覆盖会话管理”以及“启用cookie”并保存,否则会使用对应的Server的会话管理设置,session持久化设置不会生效。再点击“分布式环境设置”。

c.   点击“数据库”;

d.   在“数据源JNDI名称”处写入was应用所使用的数据源JNDI名称,在“用户标识”处写入对应数据库用户名,在“密码”处写入对应数据库用户的密码,“DB2行大小”选择“ROW_SIZE_4KB”,“表空间名”处写入用于保存 session的数据库表对应的表空间,“使用多行模式”需钩选,使session信息在数据库中按多行保存。

e.   打开对应的was Server配置;

f.   点击“Web容器设置”,“Web容器”;

g.   点击“定制属性”;

h.   点击“新建”,创建名称为“UseOracleBLOB”,值为“true”的属性。

若不设置UseOracleBLOB属性,当session中有值超过2000字节时(保存session的表中的SMALL字段长度为2000),System.out日志中会出现以下报错

[15-5-3 14:43:16:792 CST] 0000006f WASSession    E DatabaseHashMapMR handlePropertyHits SESN0057E: 将应用程序数据更改存储到数据库时出错。

[15-5-3 14:43:16:793 CST] 0000006f WASSessionCor E DatabaseHashMapMR handlePropertyHits 异常为:

                                 java.sql.SQLException: ORA-01460: 转换请求无法实施或不合理

 

    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)

    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)

    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:590)

    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1973)

    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1119)

    at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2191)

    at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:2064)

    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2989)

    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:658)

    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecuteUpdate(WSJdbcPreparedStatement.java:1185)

    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeUpdate(WSJdbcPreparedStatement.java:802)

    at com.ibm.ws.session.store.db.DatabaseHashMapMR.handlePropertyHits(DatabaseHashMapMR.java:262)

    at com.ibm.ws.session.store.db.DatabaseHashMap.persistSession(DatabaseHashMap.java:2123)

    at com.ibm.ws.session.store.common.BackedHashMap.updateSession(BackedHashMap.java:469)

    at com.ibm.ws.session.store.common.BackedHashMap.put(BackedHashMap.java:543)

    at com.ibm.ws.session.store.common.BackedSession.flush(BackedSession.java:240)

    at com.ibm.ws.session.store.common.BackedSession.flush(BackedSession.java:225)

    at com.ibm.ws.session.store.common.BackedHashMap.doTimeBasedWrites(BackedHashMap.java:992)

    at com.ibm.ws.session.store.common.BackedStore.runTimeBasedWrites(BackedStore.java:125)

    at com.ibm.ws.session.WsTBWSessionStorer.alarm(WsTBWSessionStorer.java:118)

    at com.ibm.ejs.util.am._Alarm.run(_Alarm.java:133)

    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1783)

2.7.2  数据库配置

IBM提供的数据库脚本如下:

CREATE TABLE SESSIONS  (

  ID               VARCHAR(128) NOT NULL ,

  PROPID           VARCHAR(128) NOT NULL ,

  APPNAME          VARCHAR(128) NOT NULL,

  LISTENERCNT      SMALLINT ,

  LASTACCESS       INTEGER,

  CREATIONTIME     INTEGER,

  MAXINACTIVETIME  INTEGER ,

  USERNAME         VARCHAR(256) ,

  SMALL            RAW(2000),

  MEDIUM           BLOB,

  LARGE            RAW(1)

  )

was会自己执行添加索引的语句,将表空间修改为实际表空间后(以cc_session为例),实际建表语句如下:

DROP TABLE sessions CASCADE CONSTRAINTS;

 

CREATE TABLE sessions

(

  ID               VARCHAR2(128 CHAR)           NOT NULL,

  propid           VARCHAR2(128 CHAR)           NOT NULL,

  appname          VARCHAR2(128 CHAR)           NOT NULL,

  listenercnt      INTEGER,

  lastaccess       INTEGER,

  creationtime     INTEGER,

  maxinactivetime  INTEGER,

  username         VARCHAR2(256 CHAR),

  small            RAW(2000),

  medium           BLOB,

  LARGE            RAW(1)

)

TABLESPACE cc_session

PCTUSED    0

PCTFREE    10

INITRANS   1

MAXTRANS   255

STORAGE    (

            INITIAL          64 k

            NEXT             1 m

            MINEXTENTS       1

            MAXEXTENTS       UNLIMITED

            PCTINCREASE      0

            BUFFER_POOL      DEFAULT

           )

LOGGING

NOCOMPRESS

LOB (medium) STORE AS

      ( TABLESPACE  cc_session

        ENABLE      STORAGE IN ROW

        CHUNK       8192

        PCTVERSION  0

        NOCACHE

        STORAGE    (

                    INITIAL          64 k

                    NEXT             1 m

                    MINEXTENTS       1

                    MAXEXTENTS       UNLIMITED

                    PCTINCREASE      0

                    BUFFER_POOL      DEFAULT

                   )

      )

NOCACHE

NOPARALLEL

MONITORING;

 

 

CREATE UNIQUE INDEX sess_index ON sessions

(ID, propid, appname)

LOGGING

TABLESPACE cc_session

PCTFREE    10

INITRANS   2

MAXTRANS   255

STORAGE    (

            INITIAL          64 k

            NEXT             1 m

            MINEXTENTS       1

            MAXEXTENTS       UNLIMITED

            PCTINCREASE      0

            BUFFER_POOL      DEFAULT

           )

NOPARALLEL;

3.  was重要目录与文件

下文中的AppSrv01应为对应服务的实际名称。

3.1     was日志目录

应用中通过System.out,System.err输入的日志以及was服务启停日志的存储目录:

/was/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/server1

3.2     jsp缓存目录

/was/IBM/WebSphere/AppServer/profiles/AppSrv01/temp/[was的节点名字]/[was的服务名字]/[应用名字]/[应用war包名字]

3.3     应用的WEB-INF目录被拷贝的目录

was应用部署时,WEB-INF目录会被拷贝生成一个目录。更新应用的WEB-INF目录下的文件时,需将以下目录中的文件同时修改,因此应尽量将WEB-INF目录的文件移动到WEB-INF的子目录中去,方便后期维护。拷贝生成的目录路径如下:

/was/IBM/WebSphere/AppServer/profiles/AppSrv01/config/cells/[was单元名字]/applications/[应用ear名字]/deployments/[应用war包名字]/[应用名字]/WEB-INF/

当使用增量更新方式更新web.xml文件时,应用部署目录的WEB-INF目录以及应用的WEB-INF目录被拷贝的目录中的web.xml文件都需要替换。

3.4  web.xml文件说明

3.4.1  应用读取的web.xml

当应用读取web.xml时,从应用的WEB-INF被拷贝的目录(见上文)中读取web.xml,而不是从应用部署目录的WEB-INF目录中读取web.xml。

3.4.2  web.xml的web-app节点的version值的影响

a.   web.xml的web-app节点的version值为2.4(或2.3)时

<web-app version="2.4" 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">

当web.xml的web-app节点的version值为2.4时,即文件头如上文所示时,应用部署目录的WEB-INF目录以及应用的WEB-INF目录被拷贝的目录中会出现ibm-datasource-ext.xml、ibm-web-bnd.xmi、ibm-web-ext.xmi、web.xml。

若在web.xml文件中使用<resource-ref>字段定义了数据源引用,应用部署目录的WEB-INF目录以及应用的WEB-INF目录被拷贝的目录中的web.xml文件的<resource-ref>字段可能被was修改为类似“<resource-ref id="ResourceRef_xxx">”的形式。若通过替换web.xml文件进行更新,会导致web.xml文件中的数据源对应关系丢失,因此不能通过替换web.xml进行更新。

在was控制台查看应用的部署描述符,如下图所示:

b.   web.xml的web-app节点的version值为2.5时

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

当web.xml的web-app节点的version值为2.5时,即文件头如上文所示时,应用部署目录的WEB-INF目录以及应用的WEB-INF目录被拷贝的目录中会出现ibm-datasource-ext.xml、ibm-metadata.xml、ibm-web-bnd.xml、ibm-web-ext.xml、web.xml、web_merged.xml。

web.xml与web_merged.xml内容类似,经验证,应用会读取web.xml而不是web_merged.xml。

若在web.xml文件中使用<resource-ref>字段定义了数据源引用,应用部署目录的WEB-INF目录以及应用的WEB-INF目录被拷贝的目录中的web.xml文件的<resource-ref>字段不会被修改,因此可以通过替换web.xml文件进行更新。

无论web.xml的web-app节点的version值为2.3、2.4或2.5,应用安装后,应用部署目录的WEB-INF目录以及应用的WEB-INF目录被拷贝的目录中的web.xml文件的web-app节点均会被修改为“web-app id="WebApp_xxx"”的形式。若通过替换web.xml文件进行更新时,将“web-app id="WebApp_xxx"”的形式中的 id="WebApp_xxx"删除,不影响应用运行。

在was控制台查看应用的部署描述符,如下图所示:

c.   结论

web.xml的web-app节点的version值应设置为2.5,而不是2.3或2.4,否则使用增量更新方式时,更新了web.xml会导致数据源对应关系丢失。

3.4.3  web.xml与web_merged.xml

应用读取web.xml时,若存在web_merged.xml,会从应用的WEB-INF被拷贝的目录(见上文)中读取web_merged.xml的内容;若不存在web_merged.xml,会读取web.xml的内容。

4.  在was控制台中查看运行状态

4.1     查看已加载的类

4.2     性能查看

需先启动监视(查看完后停止监视),打开页面后,在左侧选择需要查看的信息,可查看线程池、JDBC连接池、页面访问情况等,点击“查看模块”后会在右侧显示

4.3     查看session情况

查看was的session情况的链接为:http://[was服务器IP]:9080/servlet/com.ibm.ws.webcontainer.httpsession.IBMTrackerDebug

必须安装并启动DefaultApplication.ear应用,若被卸载,可使用服务器中的安装文件“/was/IBM/WebSphere/AppServer/installableApps/DefaultApplication.ear”再次安装。

示例如下:

4.4     手工产生core文件

在was控制台点击“故障诊断”“Java转储和核心”

点击“堆转储”,会产生文件heapdump;点击“Java核心”,会产生javacore文件;点击“系统转储”,会产生core文件。

以上文件生成目录一般为:/was/IBM/WebSphere/AppServer/profiles/AppSrv01,AppSrv01与was Server有关。以上文件可使用jca工具(IBM Thread and Monitor dump analyzer for Java)进行分析。

5.  was其他说明

5.1     was应用更新功能说明

“替换整个应用程序”:将整个应用进行更新。

“替换或添加单个模块”:不详。

“替换或添加单个文件”:替换单个文件,当用于替换web.xml文件时,会将应用部署目录与WAS拷贝的WEB-INF目录中的web.xml文件全部替换,但不会像重新部署时修改web.xml的内容。

“替换、添加或删除多个文件”:说明同上。

5.2  nd版本启动顺序

nd版was在启动was服务前需要先启动dmgr与node。

服务

原始启动脚本

原始停止脚本

查看进程

dmgr

/was/IBM/WebSphere/AppServer/profiles/Dmgr01/bin/startManager.sh

同目录stopManager.sh

ps -ef|grep dmgr

node

/was/IBM/WebSphere/AppServer/profiles/AppSrv01/bin/startNode.sh

同目录stopNode.sh

ps -ef|grep nodeagent

5.3     was帮助文档

https://was服务器IP:9043/ibm/help/index.jsp

IBM Knowledge Center

5.4  将控制台显示语言改为中文

将IE选项的[语言]设置中,将中文设为首位,如下图。

6.  使用was部署的应用开发相关

6.1     URL中包含中文时的处理

若URL中包含了中文,需在java中调用URLEncoder.encode(xxx,"utf-8");,或在js中调用encodeURI(xxx),对URL进行编码,否则中文会乱码。

在jsp或Servlet中处理进行了编码的URL时,需调用URLDecoder.decode(request.getParameter("xxx"), "utf-8");对进行了编码的参数进行解码。使用was部署时,在调用request.getParameter()之前需要先调用request.setCharacterEncoding("UTF-8");,否则获取到的中文会乱码。

在以弹出下载框形式返回待下载文件内容时,需对attachment;filename字段调用URLEncoder.encode(xxx,"utf-8");否则浏览器显示的下载框中文件名会乱码。

6.2     SRVE0199E错误

报错如下:

[15-1-27 13:37:29:197 CST] 00000111 servlet       E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: 应用程序 [csr_war] 中 servlet [action] 的其中一个服务方法抛出异常。创建的异常:[java.lang.IllegalStateException: SRVE0199E: 已获取了 OutputStream

    at com.ibm.ws.webcontainer.srt.SRTServletResponse.getWriter(SRTServletResponse.java:780)

    at com.sunyard.struts.RequestProcessor.process(RequestProcessor.java:91)

    at com.sunyard.struts.ActionServlet.process(ActionServlet.java:76)

    at com.sunyard.struts.ActionServlet.doGet(ActionServlet.java:81)

Servlet1.2规定OutputStream只能获取一次,was8.5遵守此规定,tomcat未遵守此规定,因此代码中一次HTTP通信过程中,OutputStream不能获取多于一次。

6.3     通过servlet请求无法下载附件时的处理

通过servlet请求下载附件时,必须通过以下代码指定下载类型与文件名,否则可以打开下载提示框,但点击保存会失败。需增加下代码:

            response.setHeader("Content-Disposition","attachment; filename=\"" + outFilename + "\"");

            response.setContentType("application/x-msdownload");

使用HTTPS访问时,还需调用以下代码。若不调用以下代码,IE会提示无法下载,使用chrome可以下载,与IE的特性有关。

                response.setHeader("Pragma","public");

                response.setHeader("Cache-Control","max-age=30");

6.4     WEB-INF目录

WEB-INF目录中的文件最好只保存一个web.xml文件,其他配置文件均需保存在WEB-INF目录的子目录中。

使用Websphere部署应用时,WEB-INF目录中的文件会在应用部署目录之外的其他目录产生拷贝,在替换文件进行版本时,需要将两个目录中的文件都进行替换,不便于版本更新,因此WEB-INF目录中的文件最好只保存一个web.xml文件。

6.5     web.xml文件

web.xml文件中最好只保存不会修改的应用配置,若有应用配置可能需要经常修改,最好不要保存在web.xml文件中,而是保存在WEB-INF子目录中的其他配置文件内。

web.xml文件中的web-app节点的version值应为2.5,即web.xml文件的文件头应如下:

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

web.xml文件中的web-app节点的version值不应为2.4,即web.xml文件的文件头不应如下:

<web-app version="2.4" 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">

若不按照以上配置,可能会导致web.xml文件无法进行增量更新。具体原因见本文“5.4.2 web.xml的web-app节点的version值的影响”。

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 搭建集群环境 1.1 安装软件 Websphere Application Server Network Deployment v6.0,简称WAS ND。 1.2 搭建环境说明 本文将介绍如何在一台主机上安装集群管理端和一个节点,在另外一台机器上安装一个节点作为一个集群,当然可以在每台机器上安装多个节点,一个节点对应一个Windows Service,每个节点有独立的端口号。 1.3 安装集群管理端 将光盘插入光驱,回自动运行光盘根目录下的launchpad.bat,将会启动一个ND启动安装页面,点击“启动Websphere ApplicationServer的安装指南”,如果ND启动页面不能运行,也可以进入光盘的WAS目录,双点install.exe来启动安装向导: (1)出现第一个安装向导界面,点“下一步”按钮。 (2)出现“软件许可协议”的窗口,当然是选择“我接受许可协议中的全部条款”的单选按钮,然后点“下一步”。 (3)系统运行“系统先决条件检查”,点“下一步”。 (4)如果本机安装websphere,则出来一个“检测到一个现有的Websphere Application Server产品”,点“下一步”。 (5)出现一个窗口提示你安装Websphere的路径,输入你指定的安装路径,例如d:spherend,点“下一步”。 (6)出现的窗口中有应用程序服务器样本和javadoc的checkbox选项,你可以都选中,也可以不选,我安装时选择了javadoc选项,然后点此窗口的“下一步”按钮。 (7)下一个窗口显示安装所需要的磁盘空间,继续点“下一步”。 (8)出现软件的安装窗口,等待安装完毕。。。 (9)安装完毕,出现安装完成窗口,这个窗口的“启动概要表创建向导”按钮要选中,点下一步。 (10)出现新窗口(欢迎使用v6概要表创建向导),点“下一步”。 (11)出现的新窗口是“概要表创建向导”窗口,这个窗口有三个radio button选项,因为我们要先装一个集群管理端,所以要选择第一个选项,即创建Deployment Manager概要表选项,然后点下一步。顺便在这里说一下,如果只装一个节点,不装集群管理,则选择第二个选项(创建应用服务器程序概要表)。 (12)下一步的窗口要你输入一个概要表名,默认是Dmgr01,注意如果是集群管理的概要表,最好以dmgr开头,这样从安装后的文件夹一看就能明白dmgr目录是用于集群管理的概要表。 (13)下一步的窗口要你输入一个默认的安装路径,可以使用系统提示的安装路径。 (14)下一个窗口是输入节点、主机、单元名,可使用系统默认值,主机名不能自己随便改。点下一步。 (15)下一步是概要表的端口值指定窗口,系统会默认分配,但两个端口一定要记住,因为启动应用服务器控制台和添加节点要用到,所以要一定记住两个端口:管理控制台端口,如9060,SOAP连接器端口,如8879,每安装一个节点,端口值都不会重复,你可以在此窗口中修改这两个端口值。点下一步。 (16)然后出来“Windows服务定义端口”,如果你愿意将应用程序服务器作为windows服务运行,则选中“将应用服务器进程作为windows服务运行”的checkbox,建议选中,这样启动方便,否则要到安装后的程序目录启动程序。Checkbox下面是“作为本地系统帐户登录”的radiobox,输入登录windows的有超级用户身份的用户帐号和口令(因为需要安装windows service),启动类型可选择“手工”或“自动”都可以。点下一步 (17)出现一个“概要表摘要”的窗口,点下一步。系统出现安装概要表的窗口,等待安装完毕。。。安装完毕后,出现“概要表安装完成”窗口,选中此窗口的“启动第一步控制台”,然后点下一步,出现一个新的窗口,先不要点“安装验证”,因为点了安装验证后会启动应用服务器,在启动前我得换一个系统jar包,就是jdom1.0.jar,这个jar包是改进的合并和 (18)将jdom-1.0.jar和xercers.jar复制到d:spherendlib目录下,并将此目录下的jdom.jar更名为jdom.ja(只要不是jar的扩展名就行),然后点17步有安装验证的窗口的“安装验证”,实际上是启动了集群管理的服务。 如果启动正常的话,安装验证的输出窗口最后是:VTL00801:安装验证完成。也可通过命令行启动集群管理服务:cmd.exe /c “D:spherendprofilesdmgr01instartmanager.bat” –profileName Dmgr01 (19)在桌面的我的电脑图标右键选择“管理”打开计算机管理窗口,检查集群服务是否运行,服务的名称为:IBM Websphere Application Server V6 – 机器名CellManager01,此时应为启动状态,打开浏览器,输入http://192.168.6.79:9060/admin,点登录按钮,这里的ip是我安装的主机的IP地址,端口9060是我安装时设定的端口,或输入http://localhost:9060/admin, 如出现了用户标识的登录页面则说明安装成功,此时页面用户标识右面的输入框不用输入内容,直接点登录,可进入集群管理的页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值