我有一个jsp proyect作为表示层来显示来自java类函数的结果(一个简单的字符串)。该类位于src目录中。
当我尝试跑步时,我得到了这个错误:
org.apache.jasper.JasperException:无法为JSP编译类:
然后:
解析器无法解析为类型
我的jsp代码是:
<%
String input="ebnf a{non terminal A;}";
Symbol tree=null;
parser p=null;
InputStream entrada=null;
analex analizador;
try{
entrada=new ByteArrayInputStream(input.getBytes("UTF-8"));
analizador=new analex(entrada);
p=new parser(analizador);
tree=p.parse();
}catch(Exception e){
out.println("ERROR");
}
finally{}
out.println("CORRECTO");
ConDiaCClass cdc=Singleton.getInstance();
out.println(cdc);
%>
实际上我也遇到了与ConDiaCClass和analex类相同的问题。
我没有用Eclipse创建这些类。它们来自另一个项目,但它们都放在src目录中(java类所在的目录)。似乎jsp无法识别它们。
答案 0 :(得分:6)
你应该在jsp的开头add the necessary import statement。样本:
<%@ page import="java.util.List" %>
<%@ page import="yourpackage.parser, yourpackage.analex" %> //and on
建议:让您的课程遵循Java Code Conventions proposed by Oracle。这是一个很好的指南,可以帮助其他人轻松阅读您的代码(当您想要查看/改进代码时,它会帮助您自己。)
答案 1 :(得分:2)
最后,只是类没有获得可见性属性。我没有他们的公共属性所以他们不能被解析为一个类型虽然jsp知道他们在哪里。
这是一个JFlex / CUP问题:JFlex&amp; CUP创建没有可见性属性的类(analex和解析器)。
谢谢你的回答。下次我会尝试更具体地解答我的问题。
答案 2 :(得分:1)
只需在上面的答案中添加更多内容。
JasperException
是JSP Engine抛出的所有异常的超类。当您运行JSP时,第一次Tomcat引擎编译您的JSP并可能抛出您正在获得的编译时错误。
了解更多JasperException
将java类置于
您的课程应位于/WEB-INF/classes
目录下。默认情况下,/WEB-INF/classes
和/WEB-INF/lib
(第三方API)目录位于CLASSPATH
所以,如果您在foo.bar
目标下有src
个包,那么您的课程将在/WEB-INF/classes/foo/bar/