代码之家  ›  专栏  ›  技术社区  ›  Ahmed Gamal

IBM BlueMix |添加jsf时:未找到此请求的应用程序或上下文根:./?

  •  0
  • Ahmed Gamal  · 技术社区  · 9 年前

    我有一个在IBMBluemix上运行的简单JSF应用程序,它与以下J2EE依赖项配合良好。

    <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
    </dependency>
    

    用JSF依赖项替换它时

    <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.2.2</version>
    </dependency>
    <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.2.2</version>
    </dependency>
    

    我得到以下错误

    找不到此请求的应用程序或上下文根:/

    有什么帮助吗?

    我的网站.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app 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"
        version="3.0">
    
      <display-name>Java DB Web Starter</display-name>
      <servlet>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <url-pattern>/api/*</url-pattern>
      </servlet-mapping>
    
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
      </welcome-file-list>
    
        <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <!-- Map these files with JSF -->
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>/faces/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>*.jsf</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>*.faces</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>*.xhtml</url-pattern>
        </servlet-mapping>
    
      <persistence-context-ref>
        <persistence-context-ref-name>openjpa-todo/entitymanager</persistence-context-ref-name>
        <persistence-unit-name>openjpa-todo</persistence-unit-name>
      </persistence-context-ref>
    
      <resource-ref>
        <!-- The cloudAutowiring-1.0 Liberty feature will resolve this to whatever 
             the database service name is -->
        <!-- When running locally without this feature, create a datasource with 
             the JNDI name "jdbc/mydbdatasource" in server.xml -->
        <!-- If using MySQL locally then use the "url" property and append "?relaxAutoCommit=true", for example: 
             <dataSource id='mysql-datasource' jdbcDriverRef='mysql-driver' jndiName='jdbc/mydbdatasource'> 
             <properties user='root' password='password' url="jdbc:mysql://localhost:3306/db?relaxAutoCommit=true"/> 
             </dataSource> -->
        <res-ref-name>jdbc/mydbdatasource</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
      </resource-ref>
    </web-app>
    
    2 回复  |  直到 9 年前
        1
  •  1
  •   v.bontempi    9 年前

    正在检查您的网站。应该使用xml调用应用程序

    https://[your_application_URL]/faces/

    而不是

    https://[your_application_URL]/

    因为Faces Servlet根据

    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    

    与jax-rswebservice侦听/api路径的方式相同

    <servlet-mapping>
       <servlet-name>javax.ws.rs.core.Application</servlet-name>
       <url-pattern>/api/*</url-pattern>
    </servlet-mapping>
    

    聊天后编辑问题:

    问题在于使用的jsf依赖项,这使得应用程序使用jsf impl-xxx。jar包含java包com.sun下的类。faces,而不是包javax下的类。加载了jsfapixxx的面。jar(使用j2ee web api依赖项时使用) 最后一个jar中的类是JSF规范定义的标准API的实现。

    如果您只想添加对JSF的依赖,而不想带走整个j2ee web api,那么可以使用工件 jsf api xxx作为依赖项

    它会解决你的问题

        2
  •  0
  •   Community CDub    8 年前

    我找到了答案 Here

    短暂地 :

    如果您使用Maven,您可以在下面找到必要的坐标:

    Java EE容器(WildFly、JBoss、TomEE、Payara、GlassFish、WebSphere等)

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version><!-- 7.0 (JSF 2.2) or 6.0 (JSF 2.0/2.1) --></version>
        <scope>provided</scope>
    </dependency>
    

    请注意,JavaEE版本必须与服务器自己的JavaEE版本匹配。当目标为JavaEE6服务器时,不能将其设置为7.0。

    Servletcontainers(Tomcat、Jetty等)

    莫贾拉

    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.faces</artifactId>// jsf-imp and jsf-api were been mereged into one jar 
        <version><!-- Check http://javaserverfaces.java.net --></version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    

    您还可以查看org.glassfish:javax。面向当前最新Mojarra发布版本(目前为2.2.13)的存储库。

    我的脸

    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-api</artifactId>
        <version><!-- Check http://myfaces.apache.org --></version>
    </dependency>
    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-impl</artifactId>
        <version><!-- Check http://myfaces.apache.org --></version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>