Weblogic 10.3 - Servlet因异常而失败

时间:2010-10-29 07:12:03

标签: servlets weblogic weblogic-10.x

我正在尝试将我的应用程序从Weblogic 8.1 SP 6升级到Weblogic 10.3。为此,我安装了Weblogic 10.3并创建了一个域。 WLS 10.3从我的域名成功启动。 我重新编写了Java 1.6中的代码,并成功部署了代码更改。

我已部署应用程序并尝试启动应用程序欢迎(登录)页面。

然后我看到以下错误:

Predefined Constants Object: com.abc.xyz272.businessclasses.PredefinedConstants@3d80183
DataSourceName='null'
sessionTimeOutLimit='36000'
00:39:31==>Servlet:  getRemoteUser=null
00:39:31==>Servlet:  getHeader=null
00:39:31==>count=0
<Oct 29, 2010 12:39:31 AM MDT> <Error> <HTTP> <BEA-101020> <[weblogic.servlet.internal.WebAppServletContext@2e28f75 - appName: 'mbqccrpt', name: 'xyzControllerServlet', context-path: '/xyzControllerServlet', spec-version: 'null'] Servlet failed with Exception
java.lang.NullPointerException
        at com.abc.xyz272.servlets.xyzControllerServlet.processRequest(Unknown Source)
        at com.abc.xyz272.servlets.xyzControllerServlet.doPost(Unknown Source)
        at com.abc.xyz272.servlets.xyzControllerServlet.doGet(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        Truncated. see log file for complete stacktrace

我还有一个问题。在Weblogic 8.1上运行的应用程序也使用apache服务器来启动静态页面。要在weblogic 10.3中升级应用程序,我们是否需要apache服务器?

3 个答案:

答案 0 :(得分:5)

我可以回答你问题的第二部分。

通常用于面向Weblogic的Apache服务器的主要目的是将静态内容(如图像,HTML,JS,CSS文件)卸载到Apache Web服务器。只有动态请求才会传递给Weblogic,从而减少流量,尤其是跨越防火墙时。

这是一项架构决策,不依赖于Weblogic的版本。相反,这取决于某些问题,例如群集App服务器(使用Apache作为负载均衡器),静态数据量,因为Apache非常快速地提供静态数据 - 所以为什么要将这种负载推送到Weblogic上。

关于你的NullPointerException,似乎是因为你的数据源没有正确定义(它显示为null),但你正在调用它上面的一些操作

答案 1 :(得分:2)

几个星期回来了,我也在这个页面上,过滤掉互联网,为这个同样的问题寻找合适的解决方案 spec-version:&#39; null&#39;] Servlet因异常而失败,直到除了我经过大量努力后找到的解决方案之外其他所有工作都没有用的时候。

我在将一个应用程序从Oracle的10g App Server迁移到 Weblogic 10.3.5 时遇到此问题。

根据传说中的做法,在进行迁移时,我们在 / WEB-INF / 文件夹中放置了一个 weblogic.xml 文件,这就是实际问题。我刚用我自己版本的 weblogic.xml 文件替换了不正确的weblogic.xml 文件,并且工作正常。

即使有缺陷的weblogic.xml 文件在根元素中有许多其他元素,原因是最初放置它的人最熟悉的原因,在我的 DD <的版本中/ strong> file我只有root元素。最后问题得到了解决。因此,考虑到这一点是值得的。

答案 2 :(得分:1)

  

getRemoteUser()返回null:

由于在Weblogic 10.3中不推荐使用getRemoteUser()方法,因此当用户访问应用程序时,它将返回null。要避免此问题,请使用getRemoteUser()方法替换getHeader(“proxy-remote-user”),以将远程用户作为字符串返回。

String usr= request.getHeader("proxy-remote-user");

Servlet路径映射问题:

  

我们在web.xml中有以下Servlet映射,它正在运行   在Weblogic 8.1中很好

<servlet-mapping> in web.xml 
  <servlet>
      <servlet-name>ServletName</servlet-name>
      <servlet-class>com.abc.servlets.servletname</servlet-class>
  </servlet>
   <servlet-mapping>
      <servlet-name> ServletName </servlet-name>
      <url-pattern>/*.*</url-pattern>
  </servlet-mapping>

但是在迁移到10.3之后,当启动应用程序主页时请求进入无限循环时,相同的Servlet映射不起作用。由于Web应用程序使用Servlet作为控制器,其中所有请求都命中控制器,然后转发到相应的JSP。为了避免这个问题,我们在servlet-mapping中将url-pattern“/ *”替换为“/”,如下所示。

 <servlet-mapping>
      <servlet-name> ServletName </servlet-name>
      <url-pattern>/ServletName </url-pattern>
 </servlet-mapping>