Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jetty 7.6不编译JSP文件_Java_Maven_Jsp_Embedded Jetty_End Of Life - Fatal编程技术网

Java Jetty 7.6不编译JSP文件

Java Jetty 7.6不编译JSP文件,java,maven,jsp,embedded-jetty,end-of-life,Java,Maven,Jsp,Embedded Jetty,End Of Life,我是Jetty和JSP的新手。我现在正试图创建一个简单的服务器,它带有嵌入式Jetty和JSP,用于生成html 我首先要提到的是,我受到Jetty版本的限制。我必须使用的版本是Jetty 7.6.x.x 我需要创建几个servlet,在这里我可以将请求/响应发送到JSP文件。问题是JSP文件似乎没有被编译,它没有计算表达式,而是将整个脚本作为纯文本在浏览器中抛出。让我们看看 public void start() throws Exception { server = new Serv

我是Jetty和JSP的新手。我现在正试图创建一个简单的服务器,它带有嵌入式Jetty和JSP,用于生成html

我首先要提到的是,我受到Jetty版本的限制。我必须使用的版本是Jetty 7.6.x.x

我需要创建几个servlet,在这里我可以将请求/响应发送到JSP文件。问题是JSP文件似乎没有被编译,它没有计算表达式,而是将整个脚本作为纯文本在浏览器中抛出。让我们看看

public void start() throws Exception {
    server = new Server();
    SelectChannelConnector connector = new SelectChannelConnector();
    connector.setPort(port);
    server.addConnector(connector);

    // Base URI to webapp, where jsp files are located
    URI baseUri = getWebRootResourceUri();

    // Create Servlet context
    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath("/");
    context.setResourceBase(baseUri.toASCIIString());

    // Default Servlet (always last, always named "default")
    ServletHolder holderDefault = new ServletHolder("default", DefaultServlet.class);
    holderDefault.setInitParameter("resourceBase", baseUri.toASCIIString());
    holderDefault.setInitParameter("dirAllowed", "true");
    context.addServlet(holderDefault, "/");
    server.setHandler(context);

    server.start();

}
这是JSP文件

    <!DOCTYPE html>
<html>
    <head>
        <title>Coin Flipper</title>
    </head>
    <body>
        <h1>Coin Flipper</h1>
        <p>Flipping a coin...</p>
        <% if(Math.random() < .5){ %>
            <p>Heads!</p>
        <% }
        else{ %>
            <p>Tails!</p>
        <% } %>
        <hr />
        <p>Refresh to flip again.</p>
    </body>
</html>

投币器
投币器
掷硬币

尾巴


刷新以再次翻转

这就是结果:

我没有使用web.xml,但如果它能解决我的问题,我不介意使用它

这里还有我的maven依赖项:

<dependencies>
        <!-- Embedded web server -->
        <!-- https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-server -->
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>7.6.21.v20160908</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-servlet -->
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlet</artifactId>
            <version>7.6.21.v20160908</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/org.glassfish.web/jsp-impl -->
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jsp-impl</artifactId>
            <version>2.1.3-b10</version>
        </dependency>

    </dependencies>

org.eclipse.jetty
jetty服务器
7.6.21.v20160908
org.eclipse.jetty
码头servlet
7.6.21.v20160908
org.glassfish.web
jsp impl
2.1.3-b10
来自

在7.5.0之前的Jetty版本中,JSP基础设施使用了EclipseJava编译器(ecj.jar),该编译器以$Jetty_HOME/lib/JSP格式提供。对于jetty-7.5.0,我们将JSP版本升级为JSP-impl-2.1.3.b10(来自Glassfish)。在这个版本中,如果Java的版本是1.6或更高,JSP基础设施总是试图从JVM获取Java编译器。因此,如果您使用的是JRE,JSP无法编译,因此必须使用完整的JDK。或者,您可以预编译JSP(在任何情况下,在生产部署中都更可取)。Jetty JSPC Maven插件有助于预编译


这听起来和你的问题一模一样。无论是使用JDK还是预编译您的JSP,如上面的链接所指示的。

,考虑升级到当前和支持的版本。JETTY 9从GalasFISH JSP移到Apache JaspJSP,因为GLASISFISH实现中有太多未合并/未解决的bug。@ JoakimErdfelt“我首先要提到的是,我受Jetty版本的限制。我必须使用的版本是Jetty 7.6.x.x。“继续使用Jetty 7的第一个原因是Android,如果是的话,你必须使用Jetty的
jspc
和Jetty的glassfish实现,并在部署前预编译你的JSP。还要注意的是,由于Jetty 7是EOL,针对它的现有/已知/公共漏洞没有修复。@JoakimErdfelt是的,我知道。这应该是b在这里,我需要一个临时的东西来完成我的实际项目预编译,这一点很重要。当WEB-INF/WEB.xml被更新为包含对新servlet的静态引用(预编译JSP的结果)时,你就会知道你是否做对了.他还缺了一个@eis我在用JDK@vnkid好的,那么您至少需要添加JSPServlet设置为Joakim链接,但最好是预编译。