java - 按照 gradle 指南构建 Java Web 应用程序会在打开 jsp 文件时引发许多错误

标签 java gradle jetty gradle-plugin gretty

我正在尝试使用 Java、eclipse 插件 Gradle 和 Gradle 的插件“war”和“gretty”(使用 gretty 的默认网络服务器 Jetty)启动一个网络应用程序

Web 服务器通常可以正常工作,但打开 jsp 文件会导致 500 错误。

我只尝试重建本教程:https://guides.gradle.org/building-java-web-applications/

Gradle - Building Java Web Applications 中所述, 该指南不是最新的。 因此,我尝试使用每个插件的最新版本,但以下错误并没有消失。

build.gradle 包含以下内容:

plugins {
    id 'war'
    id 'org.gretty' version '2.3.1' //most current version according to gradle site

    //https://plugins.gradle.org/plugin/org.akhikhl.gretty
    //another version, but does not work neither
    //id "org.akhikhl.gretty" version "2.0.0"

    //from guides.gradle.org but outdated
    //id 'org.gretty' version '2.2.0'
}

repositories {
    // Use jcenter for resolving dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}

dependencies {
   //from guides.gradle.org, but outdated
   //providedCompile 'javax.servlet:javax.servlet-api:3.1.0' 

   //current version
   //https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api
   providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1'

   testCompile 'junit:junit:4.12'
}

我已经尝试了评论插件/依赖项的所有可能组合。

HelloServlet 的简化版:

package wtest;

import javax.servlet.annotation.*;
import javax.servlet.http.*;
import javax.servlet.ServletException;
import java.io.IOException;

@WebServlet(name = "HelloServlet", urlPatterns = {"hello"}, loadOnStartup = 1) 
public class HelloServlet extends HttpServlet 
{
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {
        if (request.getParameter("id") == null) {
            response.getWriter().print("ID not specified"); //does work
            return;
        }
        request.getRequestDispatcher("response.jsp").forward(request, response); //response.jsp throws errors
    }
}

response.jsp的内容

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Hello Page</title>
    </head>
    <body>
        <h2>Hello, JSP!</h2>
    </body>
</html>

我尝试在 Windows 和 Mac 上设置它。一旦我使用了默认的 gradle 包装器,其中 gradle 不是最新的。还有一次我尝试使用更新的本地 gradle 发行版 (5.5.1)。 我使用的是 OpenJDK 12.0.2——不是 Java EE 版本。

调用response.jsp时报错:

HTTP ERROR 500
Problem accessing /wtest/hello. Reason:

    Server Error
Caused by:
org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP

PWC6199: Generated servlet error:
source value 7 is obsolete and will be removed in a future release

PWC6199: Generated servlet error:
target value 7 is obsolete and will be removed in a future release

PWC6199: Generated servlet error:
To suppress warnings about obsolete options, use -Xlint:-options.

PWC6199: Generated servlet error:
package org.apache.jasper.runtime does not exist

PWC6199: Generated servlet error:
package org.apache.jasper.runtime does not exist

PWC6199: Generated servlet error:
cannot find symbol
  symbol:   class JspFactory
  location: class org.apache.jsp.response_jsp

PWC6199: Generated servlet error:
package org.glassfish.jsp.api does not exist

PWC6199: Generated servlet error:
cannot find symbol
  symbol:   class HttpServletRequest
  location: class org.apache.jsp.response_jsp

PWC6199: Generated servlet error:
cannot find symbol
  symbol:   class HttpServletResponse
  location: class org.apache.jsp.response_jsp

PWC6199: Generated servlet error:
cannot find symbol
  symbol:   class ServletException
  location: class org.apache.jsp.response_jsp

PWC6199: Generated servlet error:
package javax.servlet does not exist

PWC6199: Generated servlet error:
package javax.servlet.http does not exist

PWC6199: Generated servlet error:
package javax.servlet.jsp does not exist

PWC6199: Generated servlet error:
cannot find symbol
  symbol:   variable JspFactory
  location: class org.apache.jsp.response_jsp

PWC6199: Generated servlet error:
cannot find symbol
  symbol:   class PageContext
  location: class org.apache.jsp.response_jsp

PWC6199: Generated servlet error:
cannot find symbol
  symbol:   class HttpSession
  location: class org.apache.jsp.response_jsp

PWC6199: Generated servlet error:
cannot find symbol
  symbol:   class ServletContext
  location: class org.apache.jsp.response_jsp

PWC6199: Generated servlet error:
cannot find symbol
  symbol:   class ServletConfig
  location: class org.apache.jsp.response_jsp

PWC6199: Generated servlet error:
cannot find symbol
  symbol:   class JspWriter
  location: class org.apache.jsp.response_jsp

PWC6199: Generated servlet error:
cannot find symbol
  symbol:   class JspWriter
  location: class org.apache.jsp.response_jsp

PWC6199: Generated servlet error:
cannot find symbol
  symbol:   class PageContext
  location: class org.apache.jsp.response_jsp

PWC6199: Generated servlet error:
package org.glassfish.jsp.api does not exist

PWC6199: Generated servlet error:
cannot find symbol
  symbol:   class SkipPageException
  location: class org.apache.jsp.response_jsp

PWC6199: Generated servlet error:
cannot find symbol
  symbol:   class ServletException
  location: class org.apache.jsp.response_jsp


    at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:129)
    at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:299)
    at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:392)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:453)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:625)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
    at org.eclipse.jetty.jsp.JettyJspServlet.service(JettyJspServlet.java:103)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:595)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:191)
    at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:72)
    at wtest.HelloServlet.doGet(HelloServlet.java:18)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
    at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:201)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
    at org.eclipse.jetty.server.Server.handle(Server.java:499)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:258)
    at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
    at java.base/java.lang.Thread.run(Thread.java:835)

我能做些什么来解决这个问题?我没有想法了。

提前致谢!

最佳答案

我遇到了同样的问题,我很难解决。因此,以防将来其他人遇到此问题,请遵循以下一些步骤来使此示例正常工作:

  • 在 HelloServlet 中,使用 urlPatterns = {"/hello"} 而不是 urlPatterns = {"hello"}
  • 创建文件夹“main/webapp”
  • 使用这个 build.gradle 文件:

    plugins {
        id 'war'
        id "org.gretty" version "2.3.1"
    }
    
    gretty{
        servletContainer = 'tomcat9'
    }
    
    repositories {
        jcenter()
    }
    
    dependencies {
        providedCompile 'javax.servlet:javax.servlet-api:4.0.1'
        testCompile 'junit:junit:4.12'
    }
    
    sourceCompatibility = 1.12     // You can probably specify another value
    targetCompatibility = 1.12
    version = '1.0'
    

我用 Java 12 测试了它。

关于java - 按照 gradle 指南构建 Java Web 应用程序会在打开 jsp 文件时引发许多错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57409285/

相关文章:

java - 从 Tomcat7 迁移到 Jetty (Catalina.base)

java - Jetty 9 和 GzipHandler

java - reSTLet 引擎中带有长字符串的 Pattern.match 的 StackoverflowError

java - 为什么会出现 Invalid keywords : PROPERTY error in orientdb?

java - 无法转换 Hibernate 查询的对象

java - Pentaho SDK,如何定义文本文件输入

android - 从 apk 中排除 abi

java - 我们如何保存文件作为临时基础

java - 在Eclipse中包含带有gradle的Maven项目

android - gradle设置:找不到com.google.android.gms.internal.zzbgl