1

请看一下信息

目标: 运行一个调用java 类的JSP 页面,两者都驻留在tomcat 服务器上

•<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>操作: o 将 java 类复制到目录 o 清理 TOMCAT/work 目录 o 关闭 TOMCAT o 启动 TOMCAT 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 回答