项目从tomcat向weblogic迁移遇到的一些问题

中间件 专栏收录该内容
1 篇文章 0 订阅
一、org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined
解决:将web.xml中
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/applicationContext*.xml
</param-value>
</context-param>
修改成:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value> classpath*:applicationContext.xml,classpath*:applicationContext_time.xml,classpath*:applicationContext-security.xml
</param-value>
</context-param>
原因:weblogic解析web.xml时不支持通配符
二、ClassNotFoundException: org.hibernate.hql.ast.HqlToken
解决:将antlr-2.7.6.jar放到C:\oracle\Middleware\jrockit_160_17_R28.0.0-679\jre\lib\ext下面
原因:Weblogic默认先加载EJB-QL parser,存在重名类.将antlr-2.7.6.jar放于weblogic所用jdk的lib/ext下
可先加载antlr-2.7.6.jar
三、报CSRF错误
解决:将以前web.xml关于dwr的servlet配置:
<servlet>
<servlet-name >dwr</servlet-name>
<servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
修改成
<servlet>
<servlet-name >dwr</servlet-name>
<servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>allowScriptTagRemoting</param-name>
<param-value>true</param-value>
</init-param> <load-on-startup>1</load-on-startup>
</servlet>
原因:dwr跨域访问的安全问题,weblogic加强了安全机制
四、因为用的struts2 convention 零配置,启动后运行报no action found error 错误,找不到action;
解决:这个问题比较麻烦:
首先要更新struts2.1.6到struts2.2.1.
另外:将struts.xml加入
<constant name="struts.convention.action.fileProtocols" value="jar,zip" />
<constant name="struts.convention.action.includeJars" value=".*?/_wl_cls_gen.*?jar(!/)?" />
最后:将src文件夹加入META-INF文件夹。里面放入任意文件,目的是让其它编译到classes文件夹下
原因:我也说不清楚,参考的网友的这篇文章:http://aaa5131421.iteye.com/blog/558463
最后,为了达到最好的性能,将以前的dbcp换成weblogic的数据源吧。
配置方法很简单:
weblogic中首先创建一个数据源例如:jndi名称为:jdbc/db301,数据源的连接池初始大小以最大数根据实际情况作出配置
然后在applicationContext.xml中加入
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/db301" />,替换以前的datasource配置
五、tomcat程序迁移到weblogic10.3出现的问题。
Unable to access the selected application. 
Exception in AppMerge flows' progression 
经过分析是web.xml文件的问题。如果将servlet的配置去掉就能正常部署。
每个servlet下面需要添加<load-on-startup>1</load-on-startup>
六、连接池配置问题
spring的datasource在tomcat里配置为:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/dsName</value>
</property>
</bean> 
在weblogic里需要配置为
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>dsName</value>
</property>
</bean> 
七、 getServletContext()
改为
getServletConfig().getServletContext()
八、NullPointerException in initSessionInfo()
仅在IE出现, 在FF里没有问题, 需要以下2步才能撤掉消除这个问题 
1. 设置Server, Protocols页面里的HTTP, 去掉Enable Keepalives的复选框
2. 在WEB-INF目录下新建一个 weblogic.xml 文件, 内容如下:
<?xml version="1.0" encoding="GBK"?>
<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90">
  <session-descriptor>
    <cookie-name>jsessionid1</cookie-name>
  </session-descriptor>
</weblogic-web-app>
九、围绕字符集的问题汇总
web.xml
问题描述:
文件本身是UTF-8格式时, Tomcat能够解析, Weblogic启动失败, 提示: VALIDATION PROBLEMS WERE FOUND 


解决方法:
用window的记事本打开web.xml,另存为ANSI格式( 由于当前是中文操作系统, 所以实际编码为GBK ) 
同时修改第一行字符集信息: <?xml version="1.0" encoding="UTF-8"?>
由UTF-8改为GBK, 否则Weblogic还是解析失败. 




比较奇怪的是UltraEdit竟然也能识别encoding设置,如果文件是ANSI格式,而encoding设置为UTF-8,则中文显示为乱码! 设成GBK就好了


提示: Eclipse里所有xml格式默认为UTF-8, 并且不支持encoding设置, 所以打开GBK的web.xml还是乱码
所以Weblogic不支持web.xml为UTF-8格式是个缺陷?


这个问题也许与web.xml的version="2.4"有关? 可以把相关的配置改成Servlet2.3的格式试试(待测试)
总之用Weblogic有小麻烦




jsp, include, 与 pageEncoding
问题描述:
在main.jsp中include另外一个part.jsp页面, 这些文件都是UTF-8格式的, 
并且设置 <%@ page contentType="text/html;charset=UTF-8" %> ,则pageEncoding应该默认与contentType里的charset相同, 为UTF-8


如果被include的part.jsp的文件格式是UTF-8的, 则不管是哪种include方式, 都会导致最终输出的页面里多出"FF FE"字节,
这些不能显示的字符后面如果是<div> <table> 等html的块元素, 会导致IE等浏览器先换行处理, 再显示<div> <table>
最终的效果就是页面多出一些奇怪的空行.


2个问题在Tomcat和Weblogic里都有.


解决方法:
把被include的part.jsp文件改为GBK格式的(用记事本打开,另存为,指定ANSI即可)
但是这样会引起中文乱码的问题, 需要设置 part.jsp 的 pageEncoding="GBK" 才行!




设置pageEncoding又会引起下面的问题:
main.jsp和part.jsp在Weblogic里, 有些情况(还不太明确)不能同时配置 pageEncoding
十、使用log4j的问题
 tomcat应用直接发布到weblogic上出现错误:Cannot set web app root system property when WAR file is not expanded。
 WebLogic自身也包含对Log4j的支持,在打包部署(.war)的时候,会和Spring的org.springframework.web.util.Log4jConfigListener有冲突。
 解决方法之一就是把log4j的配置直接放到classpath下,log4j在web.xml下的相关配置,由于系统需要webAppRootKey这个参数,
 所以web.xml中需要加入:
  <context-param> 
 <param-name>webAppRootKey</param-name> 
 <param-value>webapp.root</param-value> 
  </context-param> 
 十一、struts、ibatis等开源软件的配置文件中的相对路径问题。
 比如ibatis中的配置: 
 <sqlMap resource="../../WEB-INF/config/ibatis/ibatis-common.xml"/> 
 类似于这样的相对路径写法在tomcat下是没有任何问题的,但是weblogic是不认的,会报找不到文件。
 简单的解决办法就是配置文件放到classpath下。 
 十二、页面默认编码问题
 我们都知道在页面上写类似于下面这样的代码来设置浏览器编码:
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  十三、部署web项目到weblogic中,启动weblogic出现异常: 
  <2011-9-7 上午06时05分24秒 GMT> <Error> <J2EE> <BEA-160197> <Unable to load descriptor D:\bea\user_projects\domains\base_domain\.\autodeploy\dataSwitching/WEB-INF/web.xml of module dataSwitching. The error is weblogic.descriptor.DescriptorException: Unmarshaller failed 
at weblogic.descriptor.internal.MarshallerFactory$1.createDescriptor(MarshallerFactory.java:147) 
at weblogic.descriptor.DescriptorManager.createDescriptor(DescriptorManager.java:280) 
at weblogic.descriptor.DescriptorManager.createDescriptor(DescriptorManager.java:248) 
at weblogic.application.descriptor.AbstractDescriptorLoader2.getDescriptorBeanFromReader(AbstractDescriptorLoader2.java:749)


......原来是web.xml中web-app版本的原因,改回2.4即可 
十四、Caused by: java.lang.ClassNotFoundException:org.joda.time.LocalDate
原因:缺少joda-time-2.1.jar
   这个包在tomcat下不需要加载,在weblogic下会报缺少这个文件,把这个jar包加进去即可
   十五、Caused by: java.lang.ClassNotFoundException:org.apache.el.ExpressionFactoryImpl
   原因:缺少jasper-el.jar
   由于项目在tomcat下运行时,默认会加载tomcat的lib的jar包,因此运行正常,迁移到weblogic下后,就会报缺少el的jar包,加进去即可;
   十六、classnotfoundexception:org.hibernate.hql.ast.hqltoken


这是由于hibernate3的antlr-2.7.6.jar和weblogic自带的antlr.jar冲突了,在hibernate3以前的解决方案里,多是在配置文件里增加一个property或者在startWebLogic.cmd文件里增加一个set配置,我试了后,均报错,最后采用的解决方案是在WEB-INF里增加一个weblogic.xml文件,设置为默认采用项目里的antlr.jar来执行。
weblogic.xml配置文件:
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-web-app
PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN"
"http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
<container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>
十七、java.lang.outofmemoryerror:permgen space
原因:内存溢出,PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。
weblogic默认给出的内存太小,解决方案是加大内存,找到D:\oracle\Middleware\user_projects\domains\base_domain\bin\ setDomainEnv.cmd文件,打开后将
set MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=128m
修改为set MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=256m
十八、WebLogic基础知识
一个域可以包括多个服务器,应用程序依赖于某个服务器,通过部署-〉某应用程序-〉目标 来配置
wl_server是weblogic默认域,通过开始菜单-〉Bea products->tools->Weblogic Server来启动
要创建自己的域,则可以通过开始菜单-〉Bea products->tools->Configuration wizard来创建
登录地址:http://localhost:7001/console/login/LoginForm.jsp
登录用户密码:weblogic/weblogic


1.部署war之后,测试时发生错误:
Error   503--Service   Unavailable   
From   RFC   2068   Hypertext   Transfer   Protocol   --   HTTP/1.1: 
.....
解决办法:一般是在刚刚激活更改后,就进行测试,还需要将该应用程序启动,状态为“活动”之后再测试就可以了。


2.连接池测试时出错:
Warning! Connectivity to backend database not verified. This is either because required connection pool attribute &quot;TestConnectionsOnReserve&quot; has not been enabled, or an invalid value has been specified for attribute &quot;TestTableName&quot;. Please check the server log for more details..
配置连接缓冲池,在“高级”中选中“保留时测试连接”即可。此时需要先激活更改再进行测试。否则还会报错。


3.jdbc jndi错误:
javax.naming.NameNotFoundException: Unable to resolve 'jdbc_fbysss. Resolved ''; remaining name 'jdbc_fbysss'
首先要在控制台中点击左边的控制栏中的服务->JDBC新建一个数据源,数据源名称无所谓,jndi name一定要注意,比如取名叫jdbc_fbysss,而且,jdbc源必须依赖于一个server。否则无法启动。
对于Spring项目,修改applicationContext.xml的dataSource,(Tomcat的连接池在这里就不需要了)。
<!-- 数据源缓冲池 --> <bean id=&quot;dataSource&quot;   class=&quot;org.springframework.jndi.JndiObjectFactoryBean&quot;>    
        <property name=&quot;jndiName&quot; value=&quot;jdbc_fbysss&quot;/><!--两者要一样-->
        <property name=&quot;resourceRef&quot;> 
           <value>false</value>
        </property>   
        </bean>


4.xml校验错误
(1)hbm.xml
org.dom4j.DocumentException: unknown protocol: platform. Nested exception: unknown protocol: platform 
这个经检查是workshop导出时 ,hbm.xml文件生成错误。修改过来就好了


(2)struts-config.xml
正式部署时出现异常:
ERROR Digester        []: Parse Error at line 2 column
15: Document root element &quot;struts-config&quot;, must match DOCTYPE root &quot;null&quot;.
org.xml.sax.SAXParseException: Document root element &quot;struts-config&quot;, must match
DOCTYPE root &quot;null&quot;.
需要在struts-config.xml中第二行加入<!DOCTYPE   struts-config   PUBLIC   &quot;-//Apache   Software   Foundation//DTD   Struts   Configuration   1.2//EN&quot;   &quot;http://struts.apache.org/dtds/struts-config_1_2.dtd&quot;>


5.ServletApi实现不一致情况
发现一个奇怪的现象,tomcat中,一个servlet的子类,如果没有声明init方法,会自动执行父类的init方法,而weblogic不会。
解决办法是显式声明init,super.init();


6.莫名其妙空指针错误
完整错误信息:
java.io.FileNotFoundException: F:\bea\wlserver_10.0\samples\domains\workshop\servers\cgServer\tmp\_WL_user\prj_fbysss\mlh5uz\war (拒绝访问。)
        at java.io.FileInputStream.open(Ljava.lang.String;)V(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at workshop.util.filesystem.file.WlFileSystem.getInputStream(WlFileSyste
m.java:148)
        at workshop.util.filesystem.FS.getInputStream(FS.java:262)
        at javelin.jsp.JspParser.readStaticInclude(JspParser.java:3261)
        at javelin.jsp.JspParser.parseStaticInclude(JspParser.java:3198)
        at javelin.jsp.JspParser.processImplicitIncludes(JspParser.java:3289)
        at javelin.jsp.JspParser.jspParse(JspParser.java:703)
        at javelin.jsp.JspParser._parse(JspParser.java:504)
        at javelin.jsp.JspParser.parse(JspParser.java:497)
        at javelin.jsp.JspAnalyzer.parseFile(JspAnalyzer.java:113)
        at javelin.jsp.JspAnalyzer.parse(JspAnalyzer.java:101)
        at javelin.ProxySourceFile.parse(ProxySourceFile.java:117)
        at javelin.SourceFile.getAst(SourceFile.java:542)
        at javelin.SourceFile.getAst(SourceFile.java:516)
        at javelin.ProxySourceFile.codeGen(ProxySourceFile.java:215)
        at javelin.SourceFile.codeGen(SourceFile.java:310)
        at javelin.client.ClientUtilsImpl$CodeGenJob.run(ClientUtilsImpl.java:11
05)
        at javelin.client.Job.performJob(Job.java:81)
        at javelin.client.ThreadPool$WorkerThread.run(ThreadPool.java:215)
<2008-8-23 下午07时15分11秒 CST> <Error> <HTTP> <BEA-101017> <[weblogic.servlet.
- appName: prj_fbysss, name: 'prj_fbysss', context-path: '/prj_fbysss] Root cause of ServletException.
java.lang.NullPointerException
        at javelin.jsp.JspAnalyzer.parse(JspAnalyzer.java:104)
        at javelin.ProxySourceFile.parse(ProxySourceFile.java:117)
        at javelin.SourceFile.getAst(SourceFile.java:542)
        at javelin.SourceFile.getAst(SourceFile.java:516)
        at javelin.ProxySourceFile.codeGen(ProxySourceFile.java:215)
        Truncated. see log file for complete stacktrace
>
最后发现是web.xml中<include-coda/>一句不对,去掉就好了,很怪异。
   <taglib>
   <taglib-uri>http://www.sss.com/select</taglib-uri>
   <taglib-location>/WEB-INF/tlds/select.tld</taglib-location> 
     </taglib>
   <taglib>
   <taglib-uri>http://www.sss.com/tree</taglib-uri>
   <taglib-location>/WEB-INF/tlds/tree.tld</taglib-location> 
     </taglib>     
   <!--web 项目配置-->
   <jsp-property-group>
    <description>
     WEB项目配置
    </description>
    <display-name>JSPConfiguration</display-name>
    <url-pattern>*.jsp</url-pattern>
    <el-ignored>false</el-ignored>
    <page-encoding>gbk</page-encoding>
    <scripting-invalid>false</scripting-invalid>
    <!--这句居然引起webloic错误!!!! include-coda/-->
   </jsp-property-group>
</jsp-config>


7.类冲突问题
(1)JSTL解析失败
index.jsp:1:1: validator 类 &quot;org.apache.taglibs.standard.tlv.JstlCoreTLV&quot; 失败,出现如下异常: &quot;java.lang.ClassCastException: weblogic.xml.jaxp.RegistrySAXParserFactory&quot;。
< contentType=&quot;text/html;charset=gbk&quot; language=&quot;java&quot;%>
项目属性-〉项目构面中的设置将记录在.setting/org.eclipse.wst.common.project.facet.core.xml文件中。
最后是把prefer-web-inf-classes设置为false就可以了。
(2)HQL语句执行失败
org.springframework.orm.hibernate3.HibernateQueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken 
这种情况是包版本冲突,必须设置prefer-web-inf-classes设置为true。
这样一来,有的包需要true,有的需要false,怎么办?Weblogic的确够恶心的。JSTL的包都已经放webapp下了,设置prefer-web-inf-classes设置为ture还不行,只好采取以下稍显麻烦的方法:
在workshop开发环境下,启动的服务器目录是
F:\bea\wlserver_10.0\samples\domains\workshop\bin
修改启动脚本startWebLogic.cmd
找到set CLASSPATH=%SAVE_CLASSPATH%,在后面加入
@REM sss added 
set PRE_CLASSPATH=%WL_HOME%\server\lib\antlr-2.7.6rc1.jar;
set CLASSPATH=%PRE_CLASSPATH%;%CLASSPATH%
其中,antlr-2.7.6rc1.jar包需要拷贝到F:\bea\wlserver_10.0\server\lib下。
正式发布的时候,需要修改对应域目录下的启动脚本
比如f:\bea\user_projects\domains\fbysssDomain\bin\startWebLogic.cmd


8.部署问题
部署时出现如下错误:
<2008-8-23 下午07时37分42秒 CST> <Warning> <Deployer> <BEA-149124> <
Failures were detected while initiating redeploy task for application 'prj_fbysss'. Error is: '
[Deployer:149163]The domain edit lock is owned by another session in non-exclusi
ve mode - this deployment operation requires exclusive access to the edit lock a
nd hence cannot proceed.'>
解决:进入http://localhost:7001/console,释放配置,再次部署即可。


注:更新war:必须在删除该应用,并激活更改之后才能覆盖。
但是用war方式,获取资源路径的方法和tomcat不同,存在臭名昭著的getRealPath等问题,移植困难,所以用目录方式部署比较好。
具体方法:先把war解压,然后在weblogic控制台里面选择目录部署。
十九、用XmlHttp获取xml,responseXml为空
  解决方法:
   在web.xml中加入
   <mime-mapping>
      <extension>xml</extension>
      <mime-type>text/xml</mime-type>
   </mime-mapping>
   <mime-mapping>
      <extension>xsl</extension>
      <mime-type>text/xml</mime-type>
   </mime-mapping>
   二十、用SmartUpload下载文件时出错    
      出错信息:
   java.io.IOException: 文件名、目录名或卷标语法不正确。
        at java.io.WinNTFileSystem.canonicalize0(Native Method)
        at java.io.Win32FileSystem.canonicalize(Win32FileSystem.java:395)
        at java.io.File.getCanonicalPath(File.java:531)
        at weblogic.servlet.internal.WebAppServletContext.getRealPath       


        (WebAppServletContext.java:666)
        at com.jspsmart.upload.SmartUpload.isVirtual(SmartUpload.java:1180)
        Truncated. see log file for complete stacktrace
        解决方法:自己写了一个Servlet来下载文件,代码如下:
   在tomcat下,浏览器读取该页面时会自动编码设置为unicode,
   但是weblogic不行,必须在web.xml中设置:
    <mime-mapping>
     <extension>html</extension> 
     <mime-type>text/html;charset=UTF-8</mime-type>
    </mime-mapping>
   十三、读取当前应用的资源文件问题
  
 另外,在应用中使用IO来读取本应用中的文件时,tomcat下是没有任何问题的,但是在weblogic下会有些问题,要尽量使用ServletContext.getResourceAsStream来读取文件。
 十四、 Tomcat和WebLogic在使用连接池处理CLOB字段的诡异问题 
 为了符合业务部门的要求,需要将一些数据存储到CLOB字段中,当然,在日常的生产系统上当然是使用ConnectionPool来连接数据库的了,代码段如下:
     public Connection getJdbcConnection(){
      Connection conn = null;
      try {
   conn = getJdbcTemplate().getDataSource().getConnection();
    } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   }
      return  conn;
     }
处理代码段如下:
......    
oracle.sql.CLOB clobtt = null;
    if(rs.next()){ 
        clobtt = (oracle.sql.CLOB)rs.getClob(1);
        Writer wr = clobtt.getCharacterOutputStream();
        char[] b = obj.getValue1().toCharArray();
......
运行结果:
ClassCastException
奇怪了,难道是我的Driver用错了(这时我使用的是Tomcat DataSource),查看了common/lib下的driver,classes12.jar!没错呀。。等一下,好像不对,怎么才1.04MB,这个是Oracle9i R1的Driver,当然是不包括oracle.sql.CLOB对象的,更换(classes12.jar是1.14MB的)
写了一段测试,代码如下(连接方式采用DriverManager方式测试):
 public Connection getConnectionDB(){
  Connection conn = null;
  try {
   Class.forName("XXXXXXXXXXXXXXXXX");
   conn = DriverManager.getConnection("XXXXXXX","XXXXX","XXXXX");
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SQLException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  }
  return conn;
 }
哈哈,结果是成功的,然后更换到生产机上运行。。。晕,使用DataSource还是ClassCastException,查找了一翻。。还是一样的问题,难道是tomcat不支持CLOB方式?更换至weblogic,同样问题。。。
我有点晕了,通过如下方式进行Debug捕捉,看看到底对象中是什么:
Object o = rs.getClob(1);
结果是oracle.sql.CLOB,晕了。。那怎么会在使用DataSource的情况下就ClassCastException呢?使用DriverManager却不会发生?查看一下WEB-INF\lib下的包,没有任何问题
考虑再三,首先先要解决问题,由于项目开发中使用tomcat(开发人员的机器太烂,没办法在开发环境也用weblogic),QA和现场均使用weblogic DataSource,而且客户现场不可以在配制文件中出现密码明文、考虑到performance,所以使用DriverManager是不现实的
实现代码如下:
......
   //获取J2EE服务器类型 1-tomcat 0-weblogic
   String r = ((Gparam)getParamByCode("1050")).getValue1();
   
   Connection conn = null;
   if("1".equals(r)){//tomcat
    conn = jdbcManager.getConnectionDB();
   }else if("0".equals(r)){//weblogic
    conn = jdbcManager.getJdbcConnection();
   }
   conn.setAutoCommit(false);
   ResultSet rs = null;
   
   String sql=getLparamSQL(obj,editMode);
   PreparedStatement stmt = conn.prepareStatement(sql);
 
   stmt.executeUpdate();
   sql = "SELECT VALUE1,VALUE2 FROM LPARAM WHERE KEY = "+obj.getKey()+" AND USERID="+obj.getUserid()+" FOR UPDATE";
   stmt = conn.prepareStatement(sql);
   rs= stmt.executeQuery();
   if("1".equals(r)){//tomcat
    oracle.sql.CLOB clobtt = null;
    if(rs.next()){ 
        clobtt = (oracle.sql.CLOB)rs.getClob(1);
        Writer wr = clobtt.getCharacterOutputStream();
        char[] b = obj.getValue1().toCharArray();
        wr.write(b);
        wr.flush();
        wr.close();
        
        clobtt = (oracle.sql.CLOB)rs.getClob(2); 
        wr = clobtt.getCharacterOutputStream();
        b = obj.getValue2().toCharArray();
        wr.write(b);
        wr.flush();
        wr.close();
     } 
   }else if("0".equals(r)){//weblogic
    weblogic.jdbc.vendor.oracle.OracleThinClob clobtt = null;
    if(rs.next()){ 
        clobtt = (weblogic.jdbc.vendor.oracle.OracleThinClob)rs.getClob(1);
        Writer wr = clobtt.getCharacterOutputStream();
        char[] b = obj.getValue1().toCharArray();
        wr.write(b);
        wr.flush();
        wr.close();
        
        clobtt = (weblogic.jdbc.vendor.oracle.OracleThinClob)rs.getClob(2); 
        wr = clobtt.getCharacterOutputStream();
        b = obj.getValue2().toCharArray();
        wr.write(b);
        wr.flush();
        wr.close();
     } 
   }
   rs.close();
   stmt.close();
   conn.commit();
   conn.close();
......
在weblogic环境下使用weblogic.jdbc.vendor.oracle.OracleThinClob专用方式来进行处理,在tomcat环境下使用driverManager,然后通过系统配置文件进行开关式配置,用来解决2个矛盾的问题
通过以上处理来看,解决事情还是要多动脑精,不能死钻。。。
关于JDBC Driver的这个疑问还有待深入研究。。。等待下文
十四、Servlet 规范使用2.5,不能使用3.0
十五、Spring配置文件不能使用通配符,有多个配置文件必须分成多个来写。(web.xml中contextConfigLocation的配置)
十六、Struts2 Convention插件的配置要添加以下两项:
<constant name="struts.convention.action.fileProtocols" value="jar,zip" />
<constant name="struts.convention.action.includeJars" value=".* /_wl_cls_gen.* jar(!/) " />
二十七、在源码的根路径添加一个名为“META-INF”的目录,里面随便添加一个文件。
二十八、使用CXF时,注意web.xml的开头部分只能如下,去除xmlns:xsi、xsi:schemaLocation等声明。
<web-app xmlns="">
二十九、使用CXF时,删除以下包:
jaxb-impl-*.jar
xml-apis-*.jar


## serializer-*.jar
## xalan-*.jar
三十、字符集问题
在Jsp中pageEncoding选择GBK,但是content中的charset一定是utf-8。然后原有的工程的WEB-INF下建立weblogic.xml文件。文件头可以到安装目录的例子里去找。然后加上
<wls:charset-params>


<wls:input-charset>


<wls:resource-path>/*</wls:resource-path>


<wls:java-charset-name>utf-8</wls:java-charset-name>


</wls:input-charset>


</wls:charset-params>


并且将web.xml中spring的转码设为GBK


<filter-name>encodingFilter</filter-name>


<filter-class>


org.springframework.web.filter.CharacterEncodingFilter


</filter-class>


<init-param>


<param-name>encoding</param-name>


<param-value>utf-8</param-value>


</init-param>


</filter>


<filter-mapping>


<filter-name>encodingFilter</filter-name>


<url-pattern>/*</url-pattern>


</filter-mapping>


如果这样,可能出现一些js文件失效的情况,可以将js文件用记事本打开,然后另存为utf-8编码,就能解决了。
三十一、加载HIbernate文件时,出现错误。HqlToken的错误。


原因是antlr-2.7.6.jar与weblogic的自带的冲突引起的。解决办法在weblogic.xml里加入


<wls:container-descriptor>


<wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>


</wls:container-descriptor>


让weblogic优先使用工程自带的包,这个方法要加在字符集之前。
三十二、系统集成了DWR,会在使用时报CSRF错误。
需要在web.xml文件里关于dwr的配置修改为如下


<servlet>


<servlet-name>dwr-invoker</servlet-name>


<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>


<ini
  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值