2

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?

raw-bin hood
  • 5,839
  • 6
  • 31
  • 45

0 Answers0