org.apache.jasper.JasperException: Unable to compile class for JSP:

174,501

Solution 1

This maybe caused by jar conflict. Remove the servlet-api.jar in your servlet/WEB-INF/ directory, %Tomcat home%/lib already have this lib.

Solution 2

The problem is caused because you need to import the pageNumber.Member class in your JSP. Make sure to also include another packages and classes like java.util.List.

<%@ page import="pageNumber.*, java.util.*" %>

Still, you have a major problem by using scriptlets in your JSP. Refer to How to avoid Java Code in JSP-Files? and start practicing EL and JSTL and focusing more on a MVC solution instead.

Share:
174,501
Martin Yang
Author by

Martin Yang

Updated on December 20, 2021

Comments

  • Martin Yang
    Martin Yang over 2 years

    Hi I'm trying to compile a simple jsp file with tomcat but I kept having this error message

    org.apache.jasper.JasperException: Unable to compile class for JSP: 
    
    An error occurred at line: 13 in the jsp file: /WebContent/test.jsp
    Member cannot be resolved to a type
    10: <body>
    11: <%  
    12:     //MyBatisDao myDao = new MyBatisDao();
    13:     List<Member> list; // = myDao.func("test");
    14:     //out.println("Result list= " + list);
    15: %>
    16: </body>
    

    test.jsp (at Webcontent)

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="pageNumber.*, java.util.*, java.io.*" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html> 
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <%  
        List<Member> list;
    %>
    </body>
    </html> 
    

    Member.java

    package pageNumber;
    public class Member {
     private String id;
     private String pw;
     private int point;
     private int lvl;
    
     public Member() {}
     public Member(String id, String pw, int point, int lvl) {
      this.id = id;
      this.pw = pw;
      this.point = point;
      this.lvl = lvl;
     }
    
     public String getId() { return id; }
     public void setId(String id) { this.id = id; }
     public String getPw() { return pw; }
     public void setPw(String pw) { this.pw = pw; }
     public int getPoint() { return point; }
     public void setPoint(int point) { this.point = point; }     
     public int getLvl() { return lvl; }
     public void setLvl(int lvl) { this.lvl = lvl; }
     public String toString() {
      return "ID= " + id + ", PW= " + pw + ", POINT= " + point + ", LVL= " + lvl;
     }
    

    }

    As far as I can tell, I am having this problem because my tomcat cannot locate the class file, so I have placed my class files at

    • build/classes/pageNumber (where pageNumber is my package name)
    • WEB-INF/classes/pageNumber
    • tomcat\work\Catalina\localhost_\org\apache\jsp\pageNumber

    but none of it worked out. Any help?


    Edit: After I change my import declaration from

    <%@ page import="pageNumber.*, java.util.*, java.io.*" %>
    

    to

    <%@ page import="java.util.List, pageNumber.Member" %>
    

    It actually gave me a new type of error:

    org.apache.jasper.JasperException: Unable to compile class for JSP: 
    
    An error occurred at line: 15 in the generated java file
    Only a type can be imported. pageNumber.Member resolves to a package
    
    An error occurred at line: 12 in the jsp file: /WebContent/test.jsp
    Member cannot be resolved to a type
    9: </head>
    10: <body>
    11: <%  
    12:     List<Member> list; // = myDao.func("test");
    13: %>
    14: </body>
    15: </html>