总结将SSH项目部署到weblogic遇到的坑。项目中是SSH,另外还用到了webservice、quartz等框架。在tomcat部署是可以的,现在总结部署到weblogic遇到的坑。

  在这里说一下前提工作,前提工作将项目的日志文件输出到指定位置,便于查看自己的项目的启动情况,结合wenlogic的日志可以快速的定位到错误所在地。另外项目中读取的外部文件 要查看好,比如properties文件的读取,数据源的配置。我在适配过程中由于数据源问题导致weblogic一直发生死锁。在适配之前确保数据库服务是启动的,账号密码的配置是对的。

1.jasper缺失报的错:

weblogic.management.DeploymentException: java.lang.ClassNotFoundException: org.apache.jasper.runtime.JspSourceDependent
at weblogic.application.internal.BaseDeployment.throwAppException(BaseDeployment.java:132)
at weblogic.application.internal.BaseDeployment.prepare(BaseDeployment.java:244)
at weblogic.application.internal.SingleModuleDeployment.prepare(SingleModuleDeployment.java:52)
at weblogic.application.internal.DeploymentStateChecker.prepare(DeploymentStateChecker.java:158)
at weblogic.deploy.internal.targetserver.AppContainerInvoker.prepare(AppContainerInvoker.java:65)
Truncated. see log file for complete stacktrace

解决办法:导入jasper.jar和jasper-el.jar

  这个最好不要瞎导入,后来我才知道是因为tomcat编译JSP文件依赖于jasper,也就是说如果我们的JSP是编译之后的class文件打成jar报的形式存放在项目中就会依赖于jasper,但是导入之后在之后访问JSP也会报错,建议JSP用weblogic自己编译。

  通过实践发现确实不能在weblogic中使用tomcat编译的JSP,解决办法就是将原来的JSP放到weblogic下进行编译。

2.active-mq报的错

weblogic.application.ModuleException: java.lang.ClassNotFoundException: org.apache.activemq.advisory.ConsumerListener
at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)
at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:233)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:228)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
Truncated. see log file for complete stacktrace

  项目中没有使用active-mq,可是在weblogic却报错,原因是我门使用了CXF,在这里我先将CXF模块去掉(webservice相关),切忌部可以引入activemq-all.jar。刚开始我引入activemq-all.jar,这个jar里面自带了spring模块,所以与项目的spring版本造成冲突,里面也自带了slf4j,与项目中的也冲突。所以部能引入activemq-all.jar。

  去掉CXF模块:删掉CXF相关jar包,web.xml去掉CXF的入口,application去掉定义的webservice与jaxws命名空间即可。

3.hibernate报的错

ctory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [dbContext.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Unable to get the default Bean Validation factory
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:671)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:401)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:261)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:192)

  网上说是启动之后会找validation-api-1.1.0.Alpha1.jar,但是我的项目中确实存在这个包。引用网上的一段总结:

javax.persistence.validation.mode默认情况下是auto的,就是说如果不设置的话它是会自动去你的classpath下面找一个bean-validation**包,但是找不到,所以beanvalitionFactory错误。 由于javax.persistence.validation.mode的属性值默认是auto,所以会出错。   在hibernate.cfg.xml里将javax.persistence.validation.mode设置为none,就可以避免出错了。     <!-- Disable the BeanValidation -->   <property name="javax.persistence.validation.mode">none</property>

  解决办法:在hibernate的sessionFactory中设置不检查:

        <property name="javax.persistence.validation.mode">none</property>

4.项目启动成功,但是访问不到struts的action,项目中的action被打包在jar中,而且使用通配符匹配

struts.xml中设置扫描的包

<constant name="struts.convention.action.includeJars" value=".*?/struts2-action*.*?jar(!/)?" />

原因是weblogic扫描不到通配符魔术的jar包,解决办法:

第一种:将struts的action解压放在WEB-INF/classes目录下(不建议这种)

第二种:使用全名匹配struts的action所在的包,在struts.xml加下main两句话:

    修改struts.xml配置(第一句是添加,第二句的struts2-action-test1是jar包的名字)
<constant name="struts.convention.action.fileProtocols" value="jar,zip" />
<constant name="struts.convention.action.includeJars" value=".*struts2-action-test1.*,.*?/_wl_cls_gen.*?jar(!/)?"/>

5.不能加载struts的PrepareFilter---项目中是分别配置的struts的PrepareFilter和ExecuteFilter

<2018-9-16 下午04时57分57,731秒 CST> <Error> <HTTP> <BEA-101165> <Could not load user defined filter in web.xml: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.
java.lang.NoClassDefFoundError: org/apache/catalina/connector/ClientAbortException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetPublicMethods(Class.java:2902)
at java.lang.Class.getMethods(Class.java:1615)
at org.apache.struts2.convention.PackageBasedActionConfigBuilder.getActionAnnotations(PackageBasedActionConfigBuilder.java:877)

解决办法:添加catalina.jar

6.EL表达式报错:

JSP页面如下:

<%@ page pageEncoding="GBK" contentType="text/html; charset=GBK" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<c:set var="baseurl" value="${pageContext.request.contextPath}"></c:set>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${baseurl}
</body>
</html>

访问报错:

forward.jsp:3:22: 静态属性必须为字符串文字, 指定表达式是不合法的。
<c:set var="baseurl" value="${pageContext.request.contextPath}"></c:set>
^---^
forward.jsp:3:22: 静态属性必须为字符串文字, 指定表达式是不合法的。
<c:set var="baseurl" value="${pageContext.request.contextPath}"></c:set>

解决办法:修改头顶引入的uri:

<%@taglib uri = "http://java.sun.com/jsp/jstl/core" prefix="c" %> 

7.启动终于没错了,可是在访问项目的时候又报错:

javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class org.apache.jasper.runtime.TagHandlerPool
at weblogic.servlet.internal.StubSecurityHelper.initServletInstance(StubSecurityHelper.java:102)
at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:87)
at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:71)
at weblogic.servlet.internal.StubLifecycleHelper.(StubLifecycleHelper.java:57)
at weblogic.servlet.internal.StubLifecycleHelper.(StubLifecycleHelper.java:31)
at weblogic.servlet.internal.ServletStubImpl.initStubLifecycleHelper(ServletStubImpl.java:673)
at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:612)
at weblogic.servlet.internal.ServletStubImpl.getServlet(ServletStubImpl.java:414)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:304)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:631)
at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:287)
at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:164)
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:191)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:372)

weblogic的日志报如下错误:

java.lang.ClassCastException: weblogic.servlet.jsp.ELContextImpl cannot be cast to org.apache.jasper.el.ELContextImpl
at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:946)
at org.apache.jsp.error_jsp._jspService(error_jsp.java:91)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:247)
at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:630)
at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:287)
at weblogic.servlet.internal.ServletResponseImpl.sendError(ServletResponseImpl.java:866)
at weblogic.servlet.internal.ServletResponseImpl.sendError(ServletResponseImpl.java:713)
at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:158)
at org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler.sendErrorResponse(DefaultDispatcherErrorHandler.java:80)
at org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler.handleError(DefaultDispatcherErrorHandler.java:59)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:920)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:587)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)
at org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter.doFilter(StrutsExecuteFilter.java:93)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:91)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)

项目中的错误:

javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class org.apache.jasper.runtime.TagHandlerPool
at weblogic.servlet.internal.StubSecurityHelper.initServletInstance(StubSecurityHelper.java:102)
at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:87)
at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:71)
at weblogic.servlet.internal.StubLifecycleHelper.(StubLifecycleHelper.java:57)
at weblogic.servlet.internal.StubLifecycleHelper.(StubLifecycleHelper.java:31)
at weblogic.servlet.internal.ServletStubImpl.initStubLifecycleHelper(ServletStubImpl.java:673)
at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:612)
at weblogic.servlet.internal.ServletStubImpl.getServlet(ServletStubImpl.java:414)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:304)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)
at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:631)
at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:287)
at org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:164)
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:191)
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:372)

  是因为jsp是tomcat的jasper编译之后打包引起的,虽然引入了tomcat的一些包,但是weblogic在编译JSP的时候采用自己的一套编译机制,所以导致访问JSP错误,但是如果是JSP是webloic自己编译的话不会报错。

  解决办法:用weblogic编译JSP。不能用tomcat编译的JSP,tomcat与weblogic使用完全不同的编译机制。

8.JSP el与ognl的问题与解决方法

  在解决了上面所有的bug之后发现weblogic不能编译一些struts的#标签。

  报错:语法错误,expect "{",但是遇到"#"....

在使用Webwork或Struts2标签写JSP时,经常会用到如下写法:

<ww:radio name="gender" list='#{"1":"Male", "2":"FeMale"}' />
<ww:select name="yes" list='#{"1":"YES","2":"NO"}' />

  这是ognl的写法,list里的表达式将解释成成一个Map,实际上是一个LinkedHashMap。

  这种写法在Tomat下部署是没有任何问题的,但部署到Weblogic 10下问题就来了,这里web.xml的version声明为3.0,编译JSP时报表达式错误。如果声明为2.3是不会报错的,因为servlet 2.3(即jsp 1.2)是不支持EL的,使用Weblogic 9同样也不会报错。据此可以推测原因为编译JSP时Weblogic? JSP编译器将OGNL的表达式误认为是EL表达式。

解决办法:

1、禁用EL。在web.xml上加上

<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>

2、更改web.xml的version为2.3。

3、因为大量页面用到EL,如${someValue},所以1和2基本行不通的,所以从OGNL的表达式入手,最终写成list='#@java.util.LinkedHashMap@{"1":"Male","2":"FeMale"}'?, 显式指定使用LinkedHashMap来构建Map。问题解决。(亲测有用)

9.在换掉JDK之后weblogic找不到环境变量

  今天在装好weblogic之后将JDK从1.8.121换到1.8.181之后启动weblogic报错,说是找不到环境变量。解决办法:

    修改%weblogic%\user_projects\domains\base_domain\bin\setDomainEnv.cmd

    大概在45行左右:  将下面标红的地方换成新的JDK位置,或者直接换成%JAVA_HOME%也可以。

        

  打印信息发现走的是最后一个else,也就是第三个标红的地方,是Oracle的java版本。(默认的JDK版本,如果想走sun的路线可以在环境变量中配置一个环境变量为JAVA_VEBDOR,值为Sun。。。没有这个环境变量的时候默认就是Oracle)

weblogic中部署SSH项目遇到的坑的更多相关文章

  1. weblogic中部署项目通常有三种方式

    在weblogic中部署项目通常有三种方式:第一,在控制台中安装部署:第二,将部署包放在domain域中autodeploy目录下部署:第三,使用域中配置文件config.xml 进行项目的部署. 控 ...

  2. 在Linux系统中部署NodeJS项目

    在Linux系统中部署NodeJS项目 安装NodeJS 首先进入 Node 官网,下载对应的 Node包 下载下来后是一个后缀为 xz 的压缩包,我们把这个包上传到 Linux 系统中的 /usr/ ...

  3. 在Tomcat中部署Web项目的操作方法,maven项目在Tomcat里登录首页报404

     maven项目在Tomcat里登录首页报404, 解决:编辑conf/server.xml进行配置<Host>里的<Context>标签里的path. <Context ...

  4. 在Tomcat中部署web项目的三种方式

    搬瓦工搭建SS教程 SSR免费节点:http://www.xiaokeli.me 在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Man ...

  5. linux 环境下tomcat中部署jfinal项目

    tomcat中部署jfinal项目 问题现象如下图 问题描述: 我在自己的windows7系统上tomcat下面跑这个项目没有任何问题吗,但是当我把项目上传到linux服务器上的tomcatwebap ...

  6. 记录一次使用iisnode部署node项目遇到的坑!

    前言:最近因为项目原因,需要在IIS下部署node项目,在此之前,曾经部署过类似的项目,因此在这次部署还算比较顺利,只是在其中遇到了几个比较坑的问题,所以这次使用博客记录下来,如有园友遇到过类似问题, ...

  7. java程序监控tomcat中部署的项目的状态以及控制某些项目的启动停止

    原文:http://blog.csdn.net/liuyuqin1991/article/details/49280777 步骤如下: ①:首先授权用户使获得这些权限 You can find the ...

  8. docker中部署django项目~~Dockfile方式和compose方式

    1.  背景:   本机win10上,后端django框架代码与前端vue框架代码联调通过. 2.  目的:   在centos7系统服务器上使用docker容器部署该项目. 3.  方案一:仅使用基 ...

  9. 在裸机centos7系统中部署django项目的过程

    概要 本文用一台安装了centos7.5系统的裸奔Linux机器(当然是虚拟机)详细讲解从无到有部署django项目的过程. 安装必要的工具 配置yum源 至于什么是yum源大家请自行百度,本人用的是 ...

随机推荐

  1. Python 面向对象 - 内置类方法

    内置方法  内置方法  说明  __init__(self,...)  初始化对象,在创建新对象时调用  __del__(self)  释放对象,在对象被删除之前调用  __new__(cls,*ar ...

  2. Python爬虫:HTTP协议、Requests库

    HTTP协议: HTTP(Hypertext Transfer Protocol):即超文本传输协议.URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源. HTTP协议 ...

  3. 【LOJ#572】Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛)

    [LOJ#572]Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛) 题面 LOJ \[ans=\sum_{i=1}^n\sum_{j=1}^n f(gcd(i,j))^k\ ...

  4. [hgoi#2019/3/3]赛后总结

    T1--最长公共前缀(lcp) 定义两个字符串S,T 的最长公共前缀lcp(S,T)为最长的字符串R,满足R 既是S 的前缀又是T 的前缀. 给定一个字符串S,下标从1 开始,每次询问给出四个正整数a ...

  5. 3分钟上手log4net

    1. config里 <log4net> <appender name="ConsoleAppender" type="log4net.Appender ...

  6. ffmpeg 在ubuntu上编译环境搭建和开发

    步骤如下: 1. 下载 官网永远是王道,呵呵:http://ffmpeg.org/download.html 或者 svn checkout svn://svn.mplayerhq.hu/ffmpeg ...

  7. yiming

      关于双城 专家团队 总裁专栏 双城荣誉 诚聘英才 双城著作移民服务 移民专题 移民专刊 移民百科 成功案例 联系我们   澳大利亚 匈牙利 美国 加拿大 欧洲 瓦努阿图 双城集团 双城地产 君益诚 ...

  8. CF 991

    843名... 正规比赛肯定要掉分了...... 就算C没WA也是765名...为什么会这么菜呢? A,水.我加了两个特判. B,水.以 n * 4.5 为目标即可. C,裸二分,可耻的WA了一次是为 ...

  9. .net跨防火墙链接oracle连接池链接长时间无通讯数据被断开后报错问题解决

    环境: .net 4.0以上使用Oracle.ManagedDataAccess组件链接oracle数据库,应用程序与数据库之间存在硬件防火墙. 症状:应用程序启动后正常访问,如果出现长时间无数据库请 ...

  10. Java:判断当前操作系统界面采用的主题是windows经典样式还是xp样式

    想起两三年前,发现写Java界面的时候,如果将当前界面的layout设为null,由于windows的不同主题界面下,标题栏的高度不一致,导致当前界面表现也不一致. 当时就想找到一个办法先判断当前用户 ...