I am trying to get a web application started using Java, the eclipse plugin Gradle and Gradle's plugins "war" and "gretty" (using gretty's default webserver Jetty)
The web server generally works but opening a jsp file results in a 500 Error.
I only try to rebuild this tutorial: https://guides.gradle.org/building-java-web-applications/
As mentioned in Gradle - Building Java Web Applications, the guide is not up to date. Hence, I tried using the most current version of each plugin, but the following error does not disappear.
build.gradle has the following content:
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'
}
I have tried all possible combinations of the commented plugins / dependencies.
The simplified version of 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
}
}
The content of 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>
I tried to get it set up on Windows and on Mac. Once I used the default gradle wrapper in which gradle was not up to date. Another time I tried to use a newer local distribution of gradle (5.5.1). And I am using OpenJDK 12.0.2 - not the Java EE version.
The error when calling 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)
What could I do to solve the problem? I ran out of ideas.
Thank you in advance!
I faced the same problem, and it was difficult for me to resolve it. So, in case someone else will have this problem in the future, here are some steps to follow to make this example work:
urlPatterns = {"/hello"}instead ofurlPatterns = {"hello"}Use this build.gradle file:
I tested it with Java 12.