8

我有一个 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无法识别它们。

4

4 回答 4

7

您应该在 jsp 的开头添加必要的 import 语句。一个样品:

<%@ page import="java.util.List" %>
<%@ page import="yourpackage.parser, yourpackage.analex" %> //and on

一个建议:让你的类遵循Oracle 提出的 Java 代码约定。这是一个很好的指南,可以帮助其他人轻松阅读您的代码(当您想要查看/改进代码时,它会帮助您自己)。

于 2012-05-21T03:09:31.103 回答
6

清理项目,并重新加载 JRE,如下所示:Java Build Path -> Libraries -> Add Library -> JRE System Library

于 2017-05-04T03:44:05.857 回答
3

最后只是类没有得到可见性属性。我没有它们的公共属性,因此尽管 jsp 知道它们在哪里,但它们无法被解析为一种类型。

这是一个 JFlex/CUP 问题:JFlex 和 CUP 创建没有可见性属性的类(分析器和解析器)。

谢谢你的回答。下次我会尝试更具体地回答我的问题。

于 2012-05-30T16:06:48.780 回答
1

只是在上面的答案中添加更多内容。

JasperException是 JSP Engine 抛出的所有异常的超类。当您第一次运行 JSP 时,Tomcat 引擎会编译您的 JSP,并且可能会抛出您得到的编译时错误。

阅读更多

java类应该在哪里

您的课程应该在/WEB-INF/classes目录下。默认情况下 /WEB-INF/classes/WEB-INF/lib(第三方 API)目录位于CLASSPATH

因此,如果您在目录foo.bar下有包src,那么您的课程将在/WEB-INF/classes/foo/bar/

于 2012-05-21T04:05:14.740 回答