1

情報をご覧ください

目的: 両方ともTomcatサーバー上にあるJavaクラスを呼び出すJSPページを実行する

•<strong>環境
サーバー環境: Linux
サーバー: Tomcat7.0.27
IDE:なし

•<strong>JSP(文字列を表示するだけです)

<%@page import="HelloWorld.HelloWorld" %>  
<HTML>  
<HEAD>  
<TITLE>Hello World/TITLE>  
</HEAD>  
<BODY>  
<H1>Hello World</H1>  
String is: <%= HelloWorld.HelloWorld.display() %>  
</BODY>  
</HTML>  

•<strong>JSPの場所:TOMCAT / webapps / hello / hello.jsp

•<strong>Javaクラス(文字列を返すだけです)
パッケージHelloWorld;

public class HelloWorld {  
public static String display() {  
 return "Hello World!"; // Display the string.  
   }  
}  

•<strong>Javaクラスの場所:TOMCAT / webapps / hello / WEB-INF / classes / HelloWorld /HelloWorld.class•<strong>Javaクラスのコンパイルアクション:javac -classpath TOMCAT / lib/servlet-api.jar:。-d /home/user/ HelloWorld.java

•WEB.XML

<?xml version="1.0" encoding="Cp1252"?>  
<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'>  
<web-app>  
<display-name>hello</display-name>  
<description>no description</description>  
<servlet>  
<servlet-name>hello</servlet-name>  
<display-name>hello</display-name>  
<description>no description</description>  
<jsp-file>/hello.jsp</jsp-file>  
</servlet>  
<session-config>  
<session-timeout>30</session-timeout>  
</session-config>  
</web-app>  

•<strong>アクション:oJavaクラスをディレクトリにコピーしますoTOMCAT/作業ディレクトリをクリーンアップしますoTOMCATをシャットダウンしますoTOMCATを起動しますoサーバーを開きます:8080 / hello / hello.jsp

•<strong>問題:HTTPステータス500 org.apache.jasper.JasperException:JSPのクラスをコンパイルできません:生成されたJavaファイルの行:14でエラーが発生しましたインポートHelloWorldを解決できません行:8でエラーが発生しましたjspファイル:/hello.jsp HelloWorldを解決できません5: </HEAD> 6: <BODY> 7: <H1>Hello World</H1> 8: String is : <%= HelloWorld.HelloWorld.display() %> 9: </BODY> 10: </HTML> Stacktrace:org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)

JSPでPackageName.ClassName.StringReturningMethod()を呼び出す際に構文エラーはありません。クラスはパッケージフォルダーにあります。

何が原因ですか?

ありがとう、

4

1 に答える 1

0

この問題は、クラス名がパッケージ名と同じであることに関連しているようです。パッケージをインポートしていて、display()メソッドを呼び出すときにクラスの fqn も使用しているため、名前の衝突があります。

したがって、 HelloWorld.HelloWorldをインポートしてから、 HelloWorld.HelloWorld.display()を実行しようとしました。Java は、HelloWorld .HelloWorld.displayの最初の部分をインポートしたクラスとして取得し、そのクラスでHelloWorldという静的メンバーを検索しようとします。

簡単に言えば、インポートを削除するか(fqnを使用しているため)、display()を呼び出すときにfqnを使用しないでください。

よろしくお願いします、

于 2012-11-01T20:13:24.987 に答える