我正在尝试使用 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/