【问题标题】:JSP Using Custom Classes from WEB-INFJSP 使用来自 WEB-INF 的自定义类
【发布时间】:2018-03-01 11:16:17
【问题描述】:

我在尝试在 JSP Web 应用程序 (tomcat) 中使用我的一个 Java 类时遇到了一些问题。

我的班级位于 WEB-INF 目录中(也已编译)

/approot/WEB-INF/classes/c_myclass.java
/approot/WEB-INF/classes/c_myclass.class

package myclass;

public class c_myclass {

    // class variable
    String classvar;

    // constructor
    public c_myclass(String arg) {
        // do stuff
    }

    // class function
    public void classfunc(String arg) {
        // do stuff
    }

}

我的 index.jsp 位于我的应用程序目录的根目录中

/approot/index.jsp

// these seems to work
<%@ page import = "java.io.*" %>
<%@ page import = "myclass.*" %>

<!DOCTYPE html>
<html>

<head>
    <title>Nothing</title>
</head>

<body>
<%!
    // global var for testing
    // this fails
    public static c_myclass myClass;
%>
</body>

</html>

我在常规 Java 中做了一些非常相似的事情并且它有效,但是在这里我遇到了一个错误并且不知道为什么

c_appclasses cannot be resolved to a type

【问题讨论】:

    标签: java class jsp import


    【解决方案1】:

    如果您将 Java 源代码文件粘贴到 WEB-INF 目录中,它将不起作用,因为源代码实际上并未在您的机器上运行。

    首先,您必须将 java 文件编译成一个类文件 - 由您的 java 虚拟机解释的字节码。


    AFAIK,你不能在 JSP 文件中使用像 publicstatic 这样的关键字。 JSP 不是一个类定义,而只是您的 servlet 引擎在运行时解释的源代码。您在这样的 JSP 块中编写的所有内容实际上都在方法上下文中。


    换句话说,也许您应该考虑查看 Java WEB MVC 的指南/教程。您的设置是非常糟糕的做法。

    【讨论】:

    • 感谢您的回复,您有什么推荐的吗?
    • 我个人更喜欢使用 Spring web mvc。除了官方指南之外,还有很多教程。我不能推荐任何,但我相信谷歌会帮助你。
    • 即使在编译类之后它仍然无法工作。表示无法解决
    【解决方案2】:

    我找到了它不起作用的原因,它与WEB-INF目录有关。需要根据包的名称来布局所以我的情况。

    package myclass;
    
    public class c_myclass {
    
        // class variable
        String classvar;
    
        // constructor
        public c_myclass(String arg) {
            // do stuff
        }
    
        // class function
        public void classfunc(String arg) {
            // do stuff
        }
    
    }
    

    包名是 myclass,所以它需要在一个名为 myclass 的目录中

    package myclass;
    /approot/WEB-INF/classes/myclass/c_myclass.java
    /approot/WEB-INF/classes/myclass/c_myclass.class
    

    如果包名有额外的停靠点,那么 WEB-INF 将需要额外的子目录。

    package com.myclass;
    /approot/WEB-INF/classes/com/myclass/c_myclass.java
    /approot/WEB-INF/classes/com/myclass/c_myclass.class
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      相关资源
      最近更新 更多