【问题标题】:Weblogic: The servlet is referenced in servlet-mapping but not defined in web.xmlWeblogic:servlet 在 servlet-mapping 中被引用,但未在 web.xml 中定义
【发布时间】:2017-08-28 09:33:44
【问题描述】:

得到这个错误为什么要在 weblogic 中部署战争

原因:weblogic.management.DeploymentException: [HTTP:101170]The servlet Web Rest Services 在 servlet-mapping /myrest/* 中被引用 但未在 web.xml 中定义。 在 weblogic.servlet.internal.WebAppServletContext.verifyServletMappings(WebAppServletContext.java:1465) 在 weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:2809) 在 weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1661) 在 weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:822) 在 weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:360)

我的 web.xml:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
    <display-name>REST</display-name>
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>rest.apis</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Web Rest Services</servlet-name>
        <url-pattern>/myrest/*</url-pattern>
    </servlet-mapping>
</web-app>

如果需要,我可以粘贴其余资源的代码,但不确定是否重要。

我担心什么,weblogic会不会有问题?

注意:最近app server升级到weblogic 12.1.2

【问题讨论】:

  • &lt;servlet-name --&gt; Jersey Web Application != Web Rest Services
  • 您认为名称标签应该匹配吗?很快就会尝试...
  • 是的,这就是错误的原因。您正在使用未附加 servlet 的 servlet 映射。这是因为名称不同。这是否会让你跑步,我不确定。您可能还有更多问题
  • man... 检查 weblogic 的日志,它似乎通过了失败的那一点(它几乎立即失败),大约需要 10 分钟,如果它有效,你是个天才: )
  • :) 你可以写一个答案 :) (明天会接受)浪费了 3 个小时。谢谢

标签: rest jersey weblogic


【解决方案1】:

&lt;servlet-name --&gt; Jersey Web Application != Web Rest Services

&lt;servlet-mapping&gt; 中的&lt;servlet-name&gt; 应对应于&lt;servlet&gt; 定义中的&lt;servlet-name&gt;。因此错误

servlet-mapping /myrest/* 中引用了 servlet Web Rest Services,但未在 web.xml 中定义

【讨论】:

    【解决方案2】:

    为您的 web.xml 文件尝试此配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="3.0" 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_3_0.xsd">
    <display-name>NAME</display-name>
    <servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
            <init-param>
               <param-name>jersey.config.server.provider.packages</param-name>
               <param-value>YOUR REST CLASS PACKAGE</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>jersey-serlvet</servlet-name>
            <url-pattern>/resources/*</url-pattern>
        </servlet-mapping>
    </web-app>
    

    并在同一文件夹(web-app\WEB-INF)中创建一个 weblogic.xml 文件,如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
    <library-ref>  
        <library-name>jax-rs</library-name>  
        <specification-version>2.0</specification-version>
        <implementation-version>2.5.1</implementation-version>  
        <exact-match>false</exact-match>
    </library-ref>
    <container-descriptor>
        <prefer-application-packages>
            <package-name>org.glassfish.jersey.media.*</package-name>
            <package-name>org.glassfish.jersey.client.*</package-name>
            <package-name>org.glassfish.jersey.servlet.*</package-name> 
            <package-name>org.glassfish.jersey.jaxb.internal.*</package-name>   
            <package-name>com.sun.research.ws.wadl.*</package-name>
            <package-name>org.glassfish.hk2.*</package-name>
            <package-name>org.jvnet.hk2.*</package-name>
            <package-name>jersey.repackaged.org.objectweb.asm.*</package-name>
            <package-name>org.objectweb.asm.*</package-name>
            <package-name>com.sun.ws.rs.ext.*</package-name>
            <package-name>org.aopalliance.*</package-name>
            <package-name>javax.annotation.*</package-name>
            <package-name>javax.inject.*</package-name>
            <package-name>javax.ws.rs.*</package-name>
            <package-name>jersey.repackaged.com.google.common.*</package-name>
            <package-name>javassist.*</package-name>
        </prefer-application-packages>
    </container-descriptor>
    <context-root>YOUR_ROOT</context-root>
    </weblogic-web-app>
    

    【讨论】:

    • 会做,你能解释一下原因吗?另外,url-pattern 应该是我所拥有的吧?
    • 这是什么原因?
    • 为什么需要加载这些类?
    • 我可以确认(检查)上述在以前的 weblogic 版本中有效
    • 现在我得到:nresolved Webapp Library references for "WebAppModule(restful)",定义在 weblogic.xml [Extension-Name: jax-rs, Specification-Version: 2, Implementation-Version: 2.5 .1,完全匹配:假
    猜你喜欢
    • 2014-05-24
    • 2012-08-22
    • 1970-01-01
    • 2011-03-16
    • 2012-09-18
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    相关资源
    最近更新 更多