有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Maven+JSF 2+Google AppEngine:404错误

我试图在appengine开发服务器上运行一个带有jsf的maven项目,对于每个托管bean,我都会得到一个404错误(未找到)。我编辑了来自http://www.mkyong.com/jsf2/jsf-2-0-hello-world-example/的文件以与GAE合作。以下是修改后的文件:

你好。爪哇

package com.mkyong.common;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import java.io.Serializable;

@ManagedBean
@RequestScoped
public class HelloBean implements Serializable {
 public String getName() {
  return "abc";
 }
}

网络。xml

<?xml version="1.0" encoding="utf-8"?>
 <web-app
 version="2.5"
 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_2_5.xsd">

 <context-param>
  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  <param-value>client</param-value>
 </context-param>

 <context-param>
  <param-name>javax.faces.PROJECT_STAGE</param-name>
  <param-value>Development</param-value>
 </context-param>

 <context-param>
  <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
  <param-value>.xhtml</param-value>
 </context-param>

 <context-param>
  <param-name>com.sun.faces.enableThreading</param-name>
  <param-value>false</param-value>
 </context-param>

 <!-- Faces Servlet -->
 <servlet>
  <servlet-name>Faces Servlet</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <!-- Faces Servlet Mapping -->
 <servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.jsf</url-pattern>
 </servlet-mapping>

 <!-- Welcome page -->
 <welcome-file-list>
  <welcome-file>index.jsf</welcome-file>
 </welcome-file-list>
</web-app>

索引。xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html">

  <h:head>
<title>JSF 2.0 Hello World</title>
</h:head>
 <h:body bgcolor="white">
 <h3>JSF 2.0 Hello World Example - welcome.xhtml</h3>
 <h4>Welcome #{helloBean.name}</h4>
</h:body>
</html>

还有pom。xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.mkyong.common</groupId>
 <artifactId>JavaServerFaces</artifactId>
 <packaging>war</packaging>
 <version>1.0-SNAPSHOT</version>
 <name>JavaServerFaces Maven Webapp</name>
 <url>http://maven.apache.org</url>

 <dependencies>
<!-- Google AppEngine -->
  <dependency>
   <groupId>com.google.appengine</groupId>
   <artifactId>appengine-api-1.0-sdk</artifactId>
   <version>1.8.5</version>
  </dependency>
  <!-- Servlet dependency -->
  <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>servlet-api</artifactId>
   <version>2.5</version>
   <scope>provided</scope>
  </dependency>
  <!-- JSF -->
  <dependency>
   <groupId>com.sun.faces</groupId>
   <artifactId>jsf-api</artifactId>
   <version>2.2.4</version>
  </dependency>
  <dependency>
   <groupId>com.sun.faces</groupId>
   <artifactId>jsf-impl</artifactId>
   <version>2.2.4</version>
  </dependency>    
</dependencies>

 <build>
  <finalName>JavaServerFaces</finalName>

  <plugins>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
     <source>1.7</source>
     <target>1.7</target>
    </configuration>
   </plugin>

   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.3</version>
    <configuration>
     <archiveClasses>true</archiveClasses>
     <webResources>
      <resource>
       <directory>${basedir}/src/main/webapp/WEB-INF</directory>
       <filtering>true</filtering>
       <targetPath>WEB-INF</targetPath>
      </resource>
     </webResources>
    </configuration>
   </plugin>

   <plugin>
    <groupId>com.google.appengine</groupId>
    <artifactId>appengine-maven-plugin</artifactId>
    <version>1.8.5</version>
    <configuration>
     <disableUpdateCheck>true</disableUpdateCheck>
    </configuration>
   </plugin>
  </plugins>
 </build>
</project>

其他文件:appengine web。xml和日志记录。属性不会更改

怎么了?JSF依赖项/配置


共 (1) 个答案

  1. # 1 楼答案

    您使用的是JSF 2.2.4,但您声称要使用JSF 2.0,您刚刚从教程中复制/粘贴了标题为JSF 2.0 hello world的hello world示例说明了这一点。请注意,JSF2.2至少需要Servlet3.0API才能工作,但您使用Servlet2.5API(在maven pom中有说明)。有两种方法可以解决这个问题:

    • 将JSF降级到2.0。我不建议这样做,但会解决问题
    • 将servlet API升级到3.0。注意,这取决于GAE支持的servlet版本