Building a Java Web App as in gradle guide throws many errors opening jsp file

1k Views Asked by At

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!

1

There are 1 best solutions below

0
Flpe On

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:

  • In HelloServlet, use urlPatterns = {"/hello"} instead of urlPatterns = {"hello"}
  • Create the folder "main/webapp"
  • Use this build.gradle file:

    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'
    

I tested it with Java 12.