JSP没有看到我的java类?

时间:2016-01-07 09:03:27

标签: java jsp classnotfoundexception

我正在尝试在jsp中创建我自己的java类的对象。参见下面的

目录结构

enter image description here

jsptest是我的项目名称

的index.jsp

<%@page import="java.util.Date"%>

<body>
    Hi Today is 
    <%out.println(new Date());%>
    <% Test t;%>
</body>

Test.java

public class Test
{
    public static void main(String[] args) {
        System.out.println("hi");
    }
}

没有行<% Test t;%>它可以工作并打印

 Hi Today is Thu Jan 07 14:30:00 IST 2016

当我添加它时,这就是我得到的

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

An error occurred at line: 7 in the jsp file: /index.jsp
Test cannot be resolved to a type
4: <body>
5:  Hi Today is 
6:  <%out.println(new Date());%>
7:  <% Test t;%>
8: </body>

堆栈跟踪:

org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:198)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:450)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:361)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:585)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:363)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

3 个答案:

答案 0 :(得分:0)

我认为Test.java文件不应该在Classes文件夹中。它应放在src文件夹中。使用package

您没有导入您的Test类。您必须导入它。添加以下行。

<%@page import="your.package.name.Test"%> //Replace with your package name

P.S。:最好使用库而不是仅使用JSP。尝试了解它们。

Find out about JSTL

答案 1 :(得分:0)

如果使用tomcat作为servlet容器,index.jsp将转换为名为index_jsp.java的servlet,并编译为名为index_jsp.class的类文件,该文件位于$ TOMCAT_HOME / work /目录中Catalina / localhost / _ / org / apache / jsp。

他们两个类文件不在同一个包(目录)中,所以你应该像

一样导入Test
<%@page import="java.util.Date,Test"%>

使用逗号作为分隔符,或编写两个页面指令,如

<%@page import="java.util.Date"%>
<%@page import="Test"%>

P.S。:为什么在WEB-INF / classes目录中有Test.java?

答案 2 :(得分:0)

首先,您应该将您的课程放在一个包中:例如foo.bar.Test 在JSP文件中导入您的类后:<%@page import="foo.bar.Test"%>

然后如您的代码中所提到的,您在Test calss(用于桌面应用程序)中使用主要方法,而不是在JSP文件中调用它: 所以,你必须在Test类中创建一个静态Methode,然后从JSP中调用它。

index.jsp

<%@page import="java.util.Date"%>
<%@page import="foo.bar.Test"%>

<body>
    Hi Today is 
    <%out.println(new Date());%>
    <% Test.myMethode();%>
</body>

Test.java

package foo.bar;


public class Test{

    public static void myMethode() {
        System.out.println("hi");
    }
}