0

I have some problems with a Java servlet API with Tomcat 10.0.16. I try to understand how it works because it is way much harder than a JavaScript API or a Python API.

I try to make a simple application nothing too complicated but I cannot make my function work. More precisely, when I try to go to my servlet method. I have an error 500 saying that it cannot find my Java class. The structure of my project looks like this:

test
|-WEB-INF
|   |-classes
|   |     |-DemoServlet.java
|   |-web.xml
|-index.html

My index.html file is written like this:

<!DOCTYPE HTML><html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Demo</title>
    </head>
    <body>
        <h3>Demo</H3>
        <form action="demo" method="GET">
            <input type="text" size="20" name="dataname">
            <br> 
            <button>Click me!</button>
        </form>
    </body>
</html>

My web.xml file looks looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
                      https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
  version="5.0"
  metadata-complete="true">

    <servlet>
        <servlet-name>demo</servlet-name>
        <servlet-class>DemoServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>demo</servlet-name>
        <url-pattern>/demotest</url-pattern>
    </servlet-mapping>
</web-app>

Finally, my Java servlet class look like this:

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ResourceBundle;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class DemoServlet extends HttpServlet{

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
        ResourceBundle rb = ResourceBundle.getBundle("LocalStrings",request.getLocale());
        
        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");

        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE html><html>");
        out.println("<head>");
        out.println("<meta charset=\"UTF-8\" />");

        String title = rb.getString("demo.title");
        out.println("<title>" + title + "</title>");
        out.println("</head>");
        out.println("<body>");

        out.println("<h3>" + title + "</h3>");

        String dataName = request.getParameter("dataname");
        out.println("<p>");
        out.print("You entered: ");
        out.println(dataName);
        out.println("</p>");

        out.print("<form ");
        out.print("action=\"");
        out.print(response.encodeURL("demoPL"));
        out.print("\"");
        out.println("method=\"GET\">");
        out.println("<input type=\"text\" size=\"20\" name=\"dataname\">");
        out.println("<br>");
        out.println("<button>Click me!</button>");
        out.println("</form>");    
        

        out.println("</body>");
        out.println("</html>");
    }
}

I based my code on the examples folder in the Tomcat webapps directory. I am a beginner with Java API and if this kind of question has already been responded, just comment the link in the response.

VLAZ
  • 22,934
  • 9
  • 44
  • 60
  • 1
    If you're getting a 500 then you're finding the servlet. What are the details of the error you're getting? Tomcat has a full log file in `TOMCAT_HOME/logs/catalina.out.` – stdunbar Feb 15 '22 at 16:43

0 Answers0