Java Can';在tomcat中部署JSF2应用程序时,无法看到欢迎页面
我想使用Java Can';在tomcat中部署JSF2应用程序时,无法看到欢迎页面,java,jsf,maven,tomcat,jsf-2,Java,Jsf,Maven,Tomcat,Jsf 2,我想使用mvntomcat:run在tomcat上部署我的JSF2应用程序。我以前使用mvn clean install命令正确编译了它。 Tomcat对我说信息:在HTTP-8080上启动Coyote HTTP/1.1 我想知道我是否正确配置了欢迎页面。 这是我的web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmln
mvntomcat:run
在tomcat上部署我的JSF2应用程序。我以前使用mvn clean install
命令正确编译了它。
Tomcat对我说信息:在HTTP-8080上启动Coyote HTTP/1.1
我想知道我是否正确配置了欢迎页面。
这是我的web.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_2_5.xsd"
version="2.5">
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>home.xhtml</welcome-file>
</welcome-file-list>
</web-app>
更新
我通过从pom.xml中删除servlet api依赖项来消除异常
<dependency> <groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId> <version>2.5</version>
</dependency>
此示例与oracle官方JSF教程中的示例几乎相同:
我包括了1
,但仍然没有在控制台或页面中看到消息。
也许配置仍然有问题。
有什么想法吗
更新
我刚刚在WEB-INF
下包含了faces config.xml
文件,但仍然不起作用:
<?xml version="1.0" encoding="UTF-8"?>
<!-- This file is not required if you don't need any extra configuration. -->
<faces-config version="2.1"
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-facesconfig_2_1.xsd">
<!-- Write your navigation rules here. -->
<application>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>en</supported-locale>
</locale-config>
</application>
</faces-config>
EN
EN
您基本上有两个问题:
web.xml
声明符合Servlet2.3(兼容Tomcat4)。您应该将web.xml
声明为与servletcontainer兼容的最高版本。假设它是Tomcat6,它是一个Servlet2.5容器,那么将其声明为Servlet2.5
(是的,没有doctype!)
@ManagedBean
在Tomcat和Jetty上不起作用,因为在注释扫描代码中意外插入了Glassfish特定代码。另见。您需要至少升级到Mojarra 2.1.1(或仅升级到当前可用的2.1.17)。另一种方法是在faces config.xml
中手动注册托管bean,但这显然很笨拙与具体问题无关,
@ManagedBean(eager=true)
仅适用于@ApplicationScoped
。省略它。我刚刚修复了web.xml
以使用该代码(没有doctype)。问题依然存在。这是我运行的tomcat版本,使用的是mvn
ApacheTomcat/6.0.29是的,我很想使用JBoss,也许我会回到它。不管怎么说,知道不起作用的确切原因是很好的。我不明白的一件事是我如何升级mojarra?这是我应该在pom.xml
中添加的内容吗?感谢您的帮助,BalusC。您可以在maven提供的几乎所有库的下载页面中找到maven坐标。在Mojarra的例子中,就是这个页面:将API和impl的两个条目替换为单个条目org.glassfish javax.faces 2.1.17
。在我删除的答案中,我说使用与容器自己的servlet版本相匹配的web.xml
servlet版本。对于Tomcat6,它是Servlet2.5。你说它不起作用,我认为这是一个专业的东西。但是现在您已经将问题更新为将web.xml
编辑为Servlet3.0而不是2.3。但它应该是Servlet2.5,正如我在删除的答案中解释的那样。如果您使用的是不受支持的servlet版本,则容器将以与最低支持的servlet版本相匹配的回退模式运行。@BalusC我刚刚更新了问题,我更改为版本2.5,但我看到一些与servlet相关的异常。我不确定我是否正确更改了版本。例外情况肯定会有帮助。JSF的初始化现已成功触发,但由于类路径损坏,最终失败。你的Maven构建肯定是腐败的。我不做Maven,但最终,Maven生成的WAR文件/结构的/WEB-INF/lib
文件夹应该只包含jsf api
、jsf impl
、jstl api
、jstl impl
JARs,而不是其他的,绝对不是异常似乎建议的servlet api
。我猜您必须在提供的
范围内声明Servlet API(例如,它已经由目标容器Tomcat提供)。@BalusC我很困惑,我的WEB-INF
不包含库
文件夹。我应该创建它吗?目前我的WEB-INF
中只有一个名为classes
的文件夹(其中包含beans.xml
)和WEB.xml
file@BalusC我想我快到了。我从pom.xml
javax.servlet servlet api 2.5
中删除了以下依赖项。现在没有例外,页面似乎已加载,但消息未显示。我将使用Java类更新
HTTP status 500
In the url I notice I had a typo. Now I enter the correct URL but the problem is:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Class javax.faces.webapp.FacesServlet is not a Servlet
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:662)
root cause
java.lang.ClassCastException: javax.faces.webapp.FacesServlet cannot be cast to javax.servlet.Servlet
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:662)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.29 logs.
<dependency> <groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId> <version>2.5</version>
</dependency>
package org.bogus;
import javax.faces.bean.ManagedBean;
@ManagedBean(name = "welcome", eager = true)
public class WelcomeBean {
public WelcomeBean() {
System.out.println("WelcomeBean instantiated");
}
public String getMessage() {
return "I'm alive!";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- This file is not required if you don't need any extra configuration. -->
<faces-config version="2.1"
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-facesconfig_2_1.xsd">
<!-- Write your navigation rules here. -->
<application>
<locale-config>
<default-locale>en</default-locale>
<supported-locale>en</supported-locale>
</locale-config>
</application>
</faces-config>