I'm new to Apache Tomcat and JSP. I am possibly taking a strange approach to hosting a simple jsp form on a Tomcat server, but it is only for testing purposes. How can I properly import the Log4J library? I'm not asking the syntax to import the library, I'm asking why the class is not found.
I have installed Java, JavaC and Tomcat on an Ubuntu 20 server as so:
# Install java
apt update && upgrade
apt install -y openjdk-11-jre-headless
apt install -y default-jre
# Install tomcat9
apt install -y tomcat9 tomcat9-admin tomcat9-docs tomcat9-examples
systemctl enable tomcat9
# Create a jsp file:
nano /var/lib/tomcat9/webapps/ROOT/index.jsp
I downloaded the Log4J.jar files and placed them in the /var/lib/tomcat9/webapps/ROOT/WEB-INF/lib
folder as instructed by these articles [1] and [2]:
cd /var/lib/tomcat9/webapps/ROOT/lib
wget https://archive.apache.org/dist/logging/log4j/2.12.2/apache-log4j-2.12.2-bin.tar.gz
tar -xvzf apache-log4j-2.12.2-bin.tar.gz
cd apache-log4j-2.12.2-bin
mv * ..
I created the index.jsp file and added this contents:
<%@ page language="java" contentType="text/html"%>
<%@ page import="java.text.*,java.util.*" %>
<%@page import="org.apache.log4j.Logger;"%>
<%! static Logger logger = Logger.getLogger(jsppagename_jsp.class); %>
<% logger.info("This is page load log."); %>
<html>
<head>
<title>Log4J Example Page - JSP</title>
</head>
<% SimpleDateFormat sdf=new SimpleDateFormat("MM/dd/yyyy");
String date = sdf.format(new Date());
%>
<body>
<h1>Welcome to Tomcat! Today is <% out.print(date);%></h1>
<form action"" type="get" name="form">
<input type="text" name="input">
<input type="submit">
</form>
<%
String input = request.getParameter("input");
%>
<h2>Input Var: <% out.print(input);%></h2>
<% logger.info(input); %>
</body>
</html>
The file is accessible browser via the server IP address and filename: I get the two different error outputs that seem to go back and forth randomly:
The first:
Message org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
org.apache.jasper.JasperException: org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:605)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:423)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:198)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:414)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
The second:
Exception
org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to compile class for JSP
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:605)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:423)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
org.apache.jasper.JasperException: Unable to compile class for JSP
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:621)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
java.lang.IllegalArgumentException: Page directive: invalid value for import
org.apache.jasper.compiler.Node$PageDirective.validateImport(Node.java:619)
org.apache.jasper.compiler.Node$PageDirective.addImport(Node.java:599)
org.apache.jasper.compiler.Parser.parsePageDirective(Parser.java:366)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:478)
org.apache.jasper.compiler.Parser.parseFileDirectives(Parser.java:1797)
org.apache.jasper.compiler.Parser.parse(Parser.java:141)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
org.apache.jasper.compiler.ParserController.parseDirectives(ParserController.java:127)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:202)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:386)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:362)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:346)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:605)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
How can I properly import the Log4J library?