刚开始学jsp,一个关于bean的调用问题 分不多了就20分

时间:2022-10-21 19:06:01
//这个是名为MyBean的文件,编译后的class文件放在test文件夹下
package test;

public class MyBean{
private String str;
private int num;
//初始化
public MyBean(){
str="This is the initial value.";
num=0;
}
//设置str
public void setvalue(String avalue){
str=avalue;
}
//得到str
public String getvalue() {
return str;
}
//设置number
public void setnumber(int Number)
{
        num=Number;
}
//得到number
public int getnumber()
{
return num;
}

}
//这是调用bean的jsp文件名字:05_01.jsp
<html>
<head>
<title>一个简单的使用JavaBean的例子</title>
</head>
<%@page contentType="text/html; charset=gb2312"%>
<jsp:useBean id="mybean" class="test.MyBean" />
<body>
<h2>这是一个使用JavaBean的简单例子。</h2>
<%!
   String str1="这里调用了JavaBean中的方法。";
   String str2="不是吗?";
%>   
<%
   mybean.setValue(str1);
   str2=mybean.getValue()+str2;
%>
<h3>
  <%=str2%>
</h3>  
</body>
</html>

把test文件夹放在 网站文件目录/WEB-INF/classes/ 下和上面的05_01.jsp放到root目录下
输入地址http://localhost:8080/05_01.jsp出现如下的错误提示:
HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.apache.jasper.JasperException: Unable to load class for JSP
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:550)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:136)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:307)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause 

java.lang.ClassNotFoundException: org.apache.jsp._1._05_005f01_jsp
java.net.URLClassLoader$1.run(URLClassLoader.java:199)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:187)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:156)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:69)
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:548)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:136)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:307)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.
这个程序是一光盘教程上的,应该没有什么错误吧,到底是什么地方错了,我调试了n次,都这样。

8 个解决方案

#1


Unable to load class for JSP 这个意思应该是找不到CLASS文件!
你可以不用把TEST目录也拷过来,就只要把生成的CLASS文件拷到WEB工程目录下的CLASS里(例:D:\TOMCAT5\webapps\你的工作名\web_inf\class\) 就行,直接调用<jsp:useBean id="mybean" class="MyBean" />。 再试试!

#2


<%!
   String str1="这里调用了JavaBean中的方法。";
   String str2="不是吗?";
%>   
<%
   mybean.setValue(str1);
   str2=mybean.getValue()+str2;
%>
----------------------
改成
<%!
   String str1="这里调用了JavaBean中的方法。";
   String str2="不是吗?";
   mybean.setValue(str1);
   str2=mybean.getValue()+str2;
%>
代码好像没什么问题,不知道你的配置是否正确。

#3


jsp页面和你自己写的类放在一个工程里,怎么jsp放在root下,而你的类文件放在其他的目录里

把jsp页面放在 网站文件目录/,再把整个“网站文件目录”全都拷到 ./tomcat/webapps/下,重启容器
或者设置虚拟目录,方法有两种
1,修改tomcat/conf/server.xml文件,在最后</host>之上增加
<Context path="/虚拟目录名" docBase="目标目录位置" debug="0" reloadable="true" > </Context>
其中path的值是虚拟目录
docbase若是以或盘符开始 则是你的硬盘目录的绝对路径。 
2. 在conf/Catalina/localhost里面增加一个xml文件(文件名任意),内容为<Context path="/虚拟目录名" docBase="目标目录位置" debug="0" reloadable="true" > </Context>

#4


我发现一件很奇怪的事情,CSDN很多人看不懂异常或者根本不看,直接上来就问
java.lang.ClassNotFoundException: 已经告诉你了问题所在,找不到类文件,那你就应该去看看路径的问题,这是最常见的异常了

#5


顶一下楼上的,哈哈,没看仔细!的确,你把JSP放到ROOT里去了,那肯定找不到了!是应该放到你自己的网站文件目录下

#6


如果你的Bean没错的话,把调用文件改成:

//这是调用bean的jsp文件名字:05_01.jsp
<html>
<head>
<title>一个简单的使用JavaBean的例子</title>
</head>
<%@ page import="test.MyBean"%>  //注意加上这一句,不可缺少。
<%@page contentType="text/html; charset=gb2312"%>
<jsp:useBean id="mybean" class="test.MyBean" />
<body>
<h2>这是一个使用JavaBean的简单例子。</h2>
<%!
   String str1="这里调用了JavaBean中的方法。";
   String str2="不是吗?";
%>   
<%
   mybean.setValue(str1);
   str2=mybean.getValue()+str2;
%>
<h3>
  <%=str2%>
</h3>  
</body>
</html>

#7


哦,对不住各位老大,我把错误代码付错了,应该是这个,不好意思!~
HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

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

An error occurred at line: 13 in the jsp file: /05_01.jsp
Generated servlet error:
E:\Tomcat\work\Catalina\localhost\_\org\apache\jsp\_05_005f01_jsp.java:64: cannot resolve symbol
symbol  : method setValue (java.lang.String)
location: class test.MyBean
   mybean.setValue(str1);
         ^


An error occurred at line: 13 in the jsp file: /05_01.jsp
Generated servlet error:
E:\Tomcat\work\Catalina\localhost\_\org\apache\jsp\_05_005f01_jsp.java:65: cannot resolve symbol
symbol  : method getValue ()
location: class test.MyBean
   str2=mybean.getValue()+str2;
              ^
2 errors



org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:84)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:332)
org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:412)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:472)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.0.28

#8


看看两个方法,getvalue/getValue.setvalue/setValue
BEAN中和.JSP中不一样。

#1


Unable to load class for JSP 这个意思应该是找不到CLASS文件!
你可以不用把TEST目录也拷过来,就只要把生成的CLASS文件拷到WEB工程目录下的CLASS里(例:D:\TOMCAT5\webapps\你的工作名\web_inf\class\) 就行,直接调用<jsp:useBean id="mybean" class="MyBean" />。 再试试!

#2


<%!
   String str1="这里调用了JavaBean中的方法。";
   String str2="不是吗?";
%>   
<%
   mybean.setValue(str1);
   str2=mybean.getValue()+str2;
%>
----------------------
改成
<%!
   String str1="这里调用了JavaBean中的方法。";
   String str2="不是吗?";
   mybean.setValue(str1);
   str2=mybean.getValue()+str2;
%>
代码好像没什么问题,不知道你的配置是否正确。

#3


jsp页面和你自己写的类放在一个工程里,怎么jsp放在root下,而你的类文件放在其他的目录里

把jsp页面放在 网站文件目录/,再把整个“网站文件目录”全都拷到 ./tomcat/webapps/下,重启容器
或者设置虚拟目录,方法有两种
1,修改tomcat/conf/server.xml文件,在最后</host>之上增加
<Context path="/虚拟目录名" docBase="目标目录位置" debug="0" reloadable="true" > </Context>
其中path的值是虚拟目录
docbase若是以或盘符开始 则是你的硬盘目录的绝对路径。 
2. 在conf/Catalina/localhost里面增加一个xml文件(文件名任意),内容为<Context path="/虚拟目录名" docBase="目标目录位置" debug="0" reloadable="true" > </Context>

#4


我发现一件很奇怪的事情,CSDN很多人看不懂异常或者根本不看,直接上来就问
java.lang.ClassNotFoundException: 已经告诉你了问题所在,找不到类文件,那你就应该去看看路径的问题,这是最常见的异常了

#5


顶一下楼上的,哈哈,没看仔细!的确,你把JSP放到ROOT里去了,那肯定找不到了!是应该放到你自己的网站文件目录下

#6


如果你的Bean没错的话,把调用文件改成:

//这是调用bean的jsp文件名字:05_01.jsp
<html>
<head>
<title>一个简单的使用JavaBean的例子</title>
</head>
<%@ page import="test.MyBean"%>  //注意加上这一句,不可缺少。
<%@page contentType="text/html; charset=gb2312"%>
<jsp:useBean id="mybean" class="test.MyBean" />
<body>
<h2>这是一个使用JavaBean的简单例子。</h2>
<%!
   String str1="这里调用了JavaBean中的方法。";
   String str2="不是吗?";
%>   
<%
   mybean.setValue(str1);
   str2=mybean.getValue()+str2;
%>
<h3>
  <%=str2%>
</h3>  
</body>
</html>

#7


哦,对不住各位老大,我把错误代码付错了,应该是这个,不好意思!~
HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

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

An error occurred at line: 13 in the jsp file: /05_01.jsp
Generated servlet error:
E:\Tomcat\work\Catalina\localhost\_\org\apache\jsp\_05_005f01_jsp.java:64: cannot resolve symbol
symbol  : method setValue (java.lang.String)
location: class test.MyBean
   mybean.setValue(str1);
         ^


An error occurred at line: 13 in the jsp file: /05_01.jsp
Generated servlet error:
E:\Tomcat\work\Catalina\localhost\_\org\apache\jsp\_05_005f01_jsp.java:65: cannot resolve symbol
symbol  : method getValue ()
location: class test.MyBean
   str2=mybean.getValue()+str2;
              ^
2 errors



org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:84)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:332)
org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:412)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:472)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.0.28

#8


看看两个方法,getvalue/getValue.setvalue/setValue
BEAN中和.JSP中不一样。