这可能是重复的,但我无法使用以下答案和互联网上的许多其他网站找到答案......
我的难题:
我试图(很差)在jsp中从jar运行一些类。我有效的是以下内容:
<%@page import="edu.cs242.hadoop.*" %>
<%
... do some stuff ...
MRSearcher ss = new MRSearcher();
... do some stuff ...
%>
但每次我尝试运行jsp时都会出现以下错误:
An error occurred at line: 32 in the jsp file: /hadoop.jsp
MRSearcher cannot be resolved to a type
我的webapp结构如下:
/
|hadoop.jsp
|lucene.jsp
|index.jsp
|WEB-INF/
|lib/
|lucene.jar
|hadoop.jar
|classes/
|*.java for our hadoop.jar
我试过调用jar本身并通过tomcat编译java,两者都产生相同的结果。
以下是MRSearcher课程的片段:
package edu.cs242.hadoop;
import java.io.*;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
/**
* Created by cloudera on 3/10/14.
*/
public class MRSearcher {
MRSearcher() {}
public String[] run(String arg1, String arg2) {
String[] things = new String[] {};
// do stuff
return things;
}
}
还有其他类,但是这个类允许我们与程序的其余部分进行交互。 main位于一个名为Main.java的文件中,它只执行命令行输出。语法是正确的,因为我们可以运行main和检索输出。
我并不是说听起来很无礼,但请不要评论在JSP中包含诸如JAR文件之类的东西的无用性和可怕性。这绝不是生产,它是一个不需要正确性的学校项目,它需要运作的必要性。如果我这样做是为了工作,我会做得对,但是现在我并不关心在JSP中分离逻辑和表示层的正确方法 - 我可以在其他语言中做到这一点并理解概念非常好。
我在查看之前已经查看并尝试使用以下解决方案,所有这些都失败了:
更多的是尝试解决这个问题。
答案 0 :(得分:0)
在WEB-INF/classes/
中,您必须拥有MRSearcher.class
个文件。请记住,JSP文件是在您第一次访问它时编译的,因此您的项目可以编译,尽管您的JSP不太好。
另一方面,您的MRSearcher()
构造函数必须是public
,如果省略此项,默认情况下构造函数将为package
,并且无法从其他包访问。检查您的Main.java
课程是否与MRSearcher
相同。如果是,这就是它可以调用MRSearcher
构造函数的原因。
我希望这会对你有所帮助。
此致