【问题标题】:IntelliJ JSF basic project doesn't work in TomcatIntelliJ JSF 基本项目在 Tomcat 中不起作用
【发布时间】:2017-03-30 23:45:50
【问题描述】:

我使用 Tomcat 9 在 IntelliJ IDEA 中创建了一个新的 JSF-PrimeFaces 项目,但它不起作用。

index.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://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:p="http://primefaces.org/ui">
   <h:body>
      <h:form>
         <p:panel header="Keyboard Demo">
            <p:keyboard value="#{keyboardBean.value}"/>
         </p:panel>
         <p:commandButton value="Submit"/>
      </h:form>
   </h:body>
</html>

KeyBoardBean.java

package main;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class KeyBoardBean {

    private String value;

    public String getValue() {
        System.out.println("KeyboardBean::reading value: " +value);
        return value;
    }

    public void setValue(String value) {
        System.out.println("KeyboardBean::setting value: " +value);
        this.value = value;
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <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>
</web-app>

当我运行 Tomcat 时,这是我得到的:

我错过了什么?我的 IDEA 安装是否损坏?

编辑:我尝试使用 Tomcat 8,我使用 Primefaces 模板创建了一个新的默认项目,运行并出现上述相同的错误,这是服务器输出:

"C:\Program Files\Apache Software Foundation\apache-tomcat-8.5.8\bin\catalina.bat" run
Using CATALINA_BASE:   "C:\Users\Antonio\.IntelliJIdea2016.2\system\tomcat\Tomcat_8_5_8_untitled"
Using CATALINA_HOME:   "C:\Program Files\Apache Software Foundation\apache-tomcat-8.5.8"
Using CATALINA_TMPDIR: "C:\Program Files\Apache Software Foundation\apache-tomcat-8.5.8\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk1.8.0_111"
Using CLASSPATH:       "C:\Program Files\Apache Software Foundation\apache-tomcat-8.5.8\bin\bootstrap.jar;C:\Program Files\Apache Software Foundation\apache-tomcat-8.5.8\bin\tomcat-juli.jar"
17-Nov-2016 19:03:27.101 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.8
17-Nov-2016 19:03:27.102 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Nov 3 2016 21:14:13 UTC
17-Nov-2016 19:03:27.102 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.5.8.0
17-Nov-2016 19:03:27.102 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Windows 10
17-Nov-2016 19:03:27.103 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            10.0
17-Nov-2016 19:03:27.103 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
17-Nov-2016 19:03:27.103 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             C:\Program Files\Java\jdk1.8.0_111\jre
17-Nov-2016 19:03:27.103 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.8.0_111-b14
17-Nov-2016 19:03:27.103 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
17-Nov-2016 19:03:27.103 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         C:\Users\Antonio\.IntelliJIdea2016.2\system\tomcat\Tomcat_8_5_8_untitled
17-Nov-2016 19:03:27.103 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         C:\Program Files\Apache Software Foundation\apache-tomcat-8.5.8
17-Nov-2016 19:03:27.103 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote=
17-Nov-2016 19:03:27.104 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.port=1099
17-Nov-2016 19:03:27.104 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.ssl=false
17-Nov-2016 19:03:27.104 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote.authenticate=false
17-Nov-2016 19:03:27.104 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.rmi.server.hostname=127.0.0.1
17-Nov-2016 19:03:27.104 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
17-Nov-2016 19:03:27.104 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
17-Nov-2016 19:03:27.104 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=C:\Users\Antonio\.IntelliJIdea2016.2\system\tomcat\Tomcat_8_5_8_untitled\conf\logging.properties
17-Nov-2016 19:03:27.104 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
17-Nov-2016 19:03:27.104 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=C:\Users\Antonio\.IntelliJIdea2016.2\system\tomcat\Tomcat_8_5_8_untitled
17-Nov-2016 19:03:27.104 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=C:\Program Files\Apache Software Foundation\apache-tomcat-8.5.8
17-Nov-2016 19:03:27.104 INFORMAZIONI [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=C:\Program Files\Apache Software Foundation\apache-tomcat-8.5.8\temp
17-Nov-2016 19:03:27.104 INFORMAZIONI [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library 1.2.10 using APR version 1.5.2.
17-Nov-2016 19:03:27.104 INFORMAZIONI [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
17-Nov-2016 19:03:27.104 INFORMAZIONI [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
17-Nov-2016 19:03:27.952 INFORMAZIONI [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized (OpenSSL 1.0.2j  26 Sep 2016)
17-Nov-2016 19:03:28.016 INFORMAZIONI [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
17-Nov-2016 19:03:28.057 INFORMAZIONI [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
17-Nov-2016 19:03:28.058 INFORMAZIONI [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
17-Nov-2016 19:03:28.059 INFORMAZIONI [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
17-Nov-2016 19:03:28.059 INFORMAZIONI [main] org.apache.catalina.startup.Catalina.load Initialization processed in 1134 ms
17-Nov-2016 19:03:28.073 INFORMAZIONI [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina
17-Nov-2016 19:03:28.073 INFORMAZIONI [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.8
17-Nov-2016 19:03:28.079 INFORMAZIONI [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [http-nio-8080]
17-Nov-2016 19:03:28.084 INFORMAZIONI [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [ajp-nio-8009]
17-Nov-2016 19:03:28.086 INFORMAZIONI [main] org.apache.catalina.startup.Catalina.start Server startup in 26 ms
17-Nov-2016 19:03:38.080 INFORMAZIONI [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory C:\Program Files\Apache Software Foundation\apache-tomcat-8.5.8\webapps\manager
17-Nov-2016 19:03:38.267 INFORMAZIONI [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory C:\Program Files\Apache Software Foundation\apache-tomcat-8.5.8\webapps\manager has finished in 187 ms
[2016-11-17 07:03:54,997] Artifact untitled:war exploded: Server is not connected. Deploy is not available.
Connected to server
[2016-11-17 07:03:55,018] Artifact untitled:war exploded: Artifact is being deployed, please wait...
[2016-11-17 07:03:55,073] Artifact untitled:war exploded: Artifact is deployed successfully
[2016-11-17 07:03:55,074] Artifact untitled:war exploded: Deploy took 56 milliseconds

Project.rar

【问题讨论】:

    标签: java tomcat web-applications http-status-code-404


    【解决方案1】:

    您应该指定 Web 应用程序的上下文根。 默认情况下,如果未指定,它将使用 war 的文件名,但如果您的 war 由于版本更改而更改,则为应用程序客户端更改应用程序的 url 很笨拙。因此,最佳做法是配置应用程序的上下文根。

    不是localhost:8080/index.html,而是localhost:8080/yourApp/index.html

    部署战争时,您的战争的META-INF 文件夹中的context.xml 文件应该存在。如果您的项目源中有一个META-INF 文件夹,它可能会完成这项工作。
    否则,您应该详细说明如何构建您的战争。

    在此文件中,以这种方式指定作为根上下文的文档库:

    <?xml version='1.0' encoding='utf-8'?>
    <Context
      docBase="yourApp">
    </Context>
    

    来自official doc

    在应用程序内 /META-INF/context.xml 的单个文件中 文件。可选(基于主机的 copyXML 属性)这可能是 复制到 $CATALINA_BASE/conf/[enginename]/[hostname]/ 并重命名为 应用程序的基本文件名加上“.xml”扩展名。

    此外,由于默认欢迎文件页面之一是 index.html,因此不需要在浏览器中指定 index.html

    【讨论】:

    • 此处不允许元素“context-root”
    • META-INF 在哪里?我只有WEB-INF
    • 在我想之前你应该先了解基础
    • 运行IDEA默认创建的默认基础项目需要什么基础?如果我使用 Primefaces 创建一个新的简单 Hello Workd 项目,它会发生同样的情况,它总是说找不到资源,无论我在浏览器中输入什么 URL
    • 在您的帖子中添加服务器输出。需要的信息可以在这里找到。
    【解决方案2】:

    这里有一个总结哦,你需要做什么。

    下载tomcat 10 tomcat.apache.org/download-10.cgi

    我下载了 64 位 Windows zip 文件,因此我可以轻松地从 intellij dlcdn.apache.org/tomcat/tomcat-10/v10.0.14/bin/apache-tomcat-10.0.14-windows-x64 重新启动服务器.zip

    将文件夹解压到一个容易记住的位置

    在 intellij 中创建一个新项目,然后选择“Java Enterprise”-> 命名项目-> 在项目模板下:选择 Web 应用程序-> 在应用程序服务器下选择 Tomcat(如果 Tomcat 不是一个选项,您可以单击新建并导航到您提取 tomcat zip 的根目录。如果您在设置应用程序服务器之前已经构建了项目,那么我在下面有详细说明,说明如何将 tomcat 服务器添加到您的 Java Enterprise 项目。如果您的项目不是 Java Enterprise,则开始过)

    语言:Java

    构建系统:Maven

    测试框架:JUnit

    为最后 3 个选项选择您想要的任何内容,然后单击“下一步”

    根据规格,我个人选择了完整平台,但我认为您只需选择 Server Faces、Servlet 和 Enterprise Java Beans (EJB) 即可摆脱困境

    在 Implementations 下,我选择了所有标记为 Apache 和 Mojarra Server Faces

    点击完成

    允许项目构建,然后您需要对一些文件进行一些添加

    *在执行下一步之前,我强烈建议添加一个快速按钮来干净安装您的项目。你需要做很多。要在 intellij 窗口的右上角添加 then 按钮,您将看到一个下拉窗口。它可能会说“编辑配置”或 Tomcat...(如果您在项目创建阶段添加了 tomcat)。点击下拉菜单,选择Edit Configurations,点击弹出窗口左上角的加号,选择“Maven”。您可以在命令行字段中将其命名为 Build(项目名称)(可能标记为命令行或在“运行”一词下,灰色“命令行”字样(其相同的字段))。键入“干净安装”,不带引号。只需清理“空间”安装,然后单击应用,然后单击确定。现在您需要做的就是单击下拉菜单旁边的绿色三角形进行全新安装。

    在你的 pom.xml 文件中添加以下依赖项

    <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- This dependency is here but its the wrong version so deleted it or comment it out -->
    <!--<dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>jakarta.faces</artifactId>
            <version>2.3.16</version>
        </dependency> -->
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>jakarta.faces</artifactId>
        <version>4.0.0-M1</version>
    </dependency>
    

    接下来导航到位于 src-> main-> webapp-> WEB-INF 中的 web.xml 文件,并将所有文本替换为以下内容

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="jakarta.ee/xml/ns/jakartaee"
             xmlns:xsi="w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="jakarta.ee/xml/ns/jakartaee 
             jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
             version="5.0"
             metadata-complete="true">
    
    <context-param>
        <param-name>javax.faces.CONFIG_FILES</param-name>
        <param-value>/WEB-INF/faces-config.xml</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>
    </web-app>
    

    现在刷新您的 Maven,以便它可以下载新的依赖项。为此,请单击 intellij 窗口最右侧的 Maven 选项卡,然后单击刷新按钮。 “看起来有点像回收符号”或两个相互环绕的箭头。现在全新安装您的项目。如果您没有设置按钮,那么您将需要打开 Maven 选项卡,然后展开共享您的项目名称的文件,然后展开 Lifecycle,在完成双击“安装”后双击“清理”(这就是为什么它更好让构建按钮变得烦人)

    最后启动你的 tomcat 服务器。部署服务器后,它应该打开一个浏览器窗口并运行默认的 index.jsp 文件,它显示“Hello World!”并且有一个链接说“Hello Servlet”

    由于您正在处理 *.xhtml 文件,我相信您会希望实际使用 .xhtml 文件而不是 .jsp 以确保您的项目可以使用 .xhtml 文件,请在 webapp 目录中创建一个。最简单的方法是右键单击 webapp 文件夹并选择 New -> JSF/Facelets。然后让你的 hello world 文件快速简单。最后两件事,导航到您的 .xhtml 文件,关闭 tomcat 服务器,全新安装项目,重新部署 tomcat 服务器,并在 URL 的末尾键入您创建的文件名,包括 .xhtml 扩展名。这应该会将您带到您的 Hello World 文件。

    如果您想更改在部署 Tomcat 服务器时加载哪个页面,只需将这个附加标签添加到您的 web.xml 文件中即可。

    欢迎文件可以是您想要链接的任何文件。您也可以在此列表中包含多个文件,因此如果缺少一个文件,服务器将向下移动列表,直到找到确实存在的文件。

    <welcome-file-list>
        <welcome-file>hello-world.xhtml</welcome-file>
    </welcome-file-list>
    

    在 intellij 中转到“运行/调试配置”,单击窗口左上角的 + 符号,选择 tomcat local。命名服务器,然后单击应用程序右侧的“配置...”按钮server: 字段。在弹出的 Application Servers 窗口中单击 Tomcat Home: 并导航到您提取 Tomcat 10 zip 文件的根目录。示例 C:\tomcat\apache-tomcat-10.0.14。如果其余的字段填充然后你做对了。点击确定

    下一步单击服务器名称下方的部署选项卡。单击+ 并选择工件。然后点击以战争结束的神器爆炸(实际上它与任何一个都有效,但这是我选择的那个)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-18
      • 2016-01-07
      • 2014-06-21
      • 2018-02-20
      • 2022-08-09
      • 2019-09-08
      • 2013-05-11
      • 2015-08-30
      相关资源
      最近更新 更多