org.apache.jasper.JasperException:无法为 JSP 编译类:

Posted

技术标签:

【中文标题】org.apache.jasper.JasperException:无法为 JSP 编译类:【英文标题】:org.apache.jasper.JasperException: Unable to compile class for JSP: 【发布时间】:2013-07-05 06:40:58 【问题描述】:

您好,我正在尝试使用 tomcat 编译一个简单的 jsp 文件,但我一直收到此错误消息

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(在 Web 内容上)

<%@ 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> 

会员.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;
 

据我所知,我遇到了这个问题,因为我的 tomcat 找不到类文件, 所以我把我的类文件放在了

build/classes/pageNumber(其中 pageNumber 是我的包名) WEB-INF/classes/pageNumber tomcat\work\Catalina\localhost_\org\apache\jsp\pageNumber

但都没有成功。 有什么帮助吗?


编辑: 在我从

更改我的进口声明之后
<%@ page import="pageNumber.*, java.util.*, java.io.*" %>

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

它实际上给了我一种新类型的错误:

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> 

【问题讨论】:

您在“Member.java”中有package 声明吗? 如果您使用外部 .jar;保存在WEB-INF/lib中 【参考方案1】:

将您的成员类包含到您的 jsp 中:

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

【讨论】:

【参考方案2】:

无需手动将类文件放到 Tomcat 上。只需确保 Member 的包声明正确定义为

package pageNumber;

因为,这是您在 JSP 中导入的唯一应用程序包。

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

【讨论】:

【参考方案3】:

问题是因为你需要在你的JSP 中导入pageNumber.Member 类。确保还包含其他包和类,例如 java.util.List

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

不过,在您的 JSP 中使用 scriptlet 仍然存在一个主要问题。参考 How to avoid Java Code in JSP-Files? 并开始练习 EL 和 JSTL 并更多地关注 MVC 解决方案。

【讨论】:

我不确定你的观点,Luiggi。我说我已经添加了 pageNumber.Member 和 java.util.List 但这仍然给了我错误。 @MartinYang 我试图通过使用pageNumber.Member 类来重现您的确切问题,其中pageNumber 是包名称,然后在主网页文件夹中创建test.jsp 页面(例如WebContent)和一个带有&lt;% List&lt;Member&gt; list; %&gt;. I added &lt;%@ page import="pageNumber.Member, java.util.List" %&gt; before the `的scriptlet(违背我的喜好),构建项目并部署它,就像一个魅力一样工作。可能还有更多你没有告诉我们的事情。尝试清理您的环境,重建您的项目并进行部署。 您是否为 Eclipse 或 tomcat 设置了“特殊”配置? b/c 无论我做什么,它似乎都没有在我的 comp 中编译。 @MartinYang 不,只是一个带有实际配置的干净 Java Web 项目。可能您还有其他未在问题中显示的内容。我建议您创建一个新的 Web 项目并复制此行为。如果您遇到问题,请编辑您的问题以获得进一步的指导。 我创建了一个新的动态 Web 项目,创建了两个文件 Member.java 和 test.jsp 并将 Member.java 导入到 test.jsp,但我仍然得到完全相同的错误消息。【参考方案4】:

你的这行:

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

% 之前需要一个@ 符号,如下所示:

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

【讨论】:

【参考方案5】:

这可能是由 jar 冲突引起的。去掉你的servlet/WEB-INF/目录下的servlet-api.jar,%Tomcat home%/lib已经有了这个lib。

【讨论】:

删除 servlet-api.jar 后,Tomcat 停止工作。更换后它工作但发生同样的错误 真的帮帮我:)【参考方案6】:

请从 web 项目中删除 servlet jar,无论如何,应用程序/web 服务器已经有。

【讨论】:

【参考方案7】:

我遇到了这个问题,我发现 Apache Tomcat 目录中存在旧的 ecj 库 1)从 Apache Tomcat 库中删除旧 jar 2)清理项目 3)构建它。 它开始按预期工作。

【讨论】:

【参考方案8】:

转到项目 -> 属性 -> 项目方面

检查 Java 版本,确保它应该与您的 JDK 版本相同。 重启服务器。

【讨论】:

以上是关于org.apache.jasper.JasperException:无法为 JSP 编译类:的主要内容,如果未能解决你的问题,请参考以下文章