怎么在jsp中调用java类中的方法呢?
使用的是tomcat6.0
在jsp中能创建类的实例,可是却不能调用类的方法,太诡异了。。
java文件是:
package text;public class PWD
{
void qq()
{
System.out.println("I am a Good Guy");
}
}在jsp里:
<%@page import="text.*"%>
<%
PWD p = new PWD();
p.qq();
%>出现错误:
The method qq() from the type PWD is not visible如果去掉p.qq()那句就可以运行了。。
使用的是tomcat6.0
在jsp中能创建类的实例,可是却不能调用类的方法,太诡异了。。
java文件是:
package text;public class PWD
{
void qq()
{
System.out.println("I am a Good Guy");
}
}在jsp里:
<%@page import="text.*"%>
<%
PWD p = new PWD();
p.qq();
%>出现错误:
The method qq() from the type PWD is not visible如果去掉p.qq()那句就可以运行了。。
要想使用,加个public即可
你在方法前 没给出方法的状态 java 默认是一个都保护状态 不是public 也不是private 是protected
你要写 public void qq();
总共有4种访问权限符:public,protected,默认权限访问符,private.其中,当我们方法前面什么都没写是,默认是包访问权限,意思是当前包中的所有类可以访问此方法,而对于现在这个类所在包以外的类来说,它们是看不到这个方法的。(2)那么为什么楼主你的JSP中无法访问这个方法呢,原因分析如下:
首先楼主你应该知道我们的JSP最终是被编译成Servlet类,也就是说,JSP也是Servlet类,所以JSP里面调用另一个类的方法这种情况与 平常在一个类里面调用另一个类里面的方法是同种情况。那么我们的jsp被编译成的.java文件以及其.class文件在哪里呢?
那么请楼主看你的Tomcat安装目录,下面有个叫work的文件夹,其结构是 work/Catalina/localhost然后,在localhost下面就是我们的项目,假如楼主你的项目名字叫project,而且你在项目中有一个叫test的文件来存你的全部jsp文件,而且现在test文件夹里面有一个jsp页面叫做jtest.jsp内容如下:<%@page import="org.apache.jsp.test.*"%>
<%
PWD p = new PWD();
p.qq();
%>
(而既然在一个包中,那么也可以不用import了,你也可以先加上)
也就是你所说的内容。那么现在jtest.jsp被编译得到的的java文件就应在如下路径中:
Tomcat安装目录/work/Catalina/localhost/project/org/apache/jsp/test/jtest_jsp.java
你打开这个java文件,你就可以看到,其第一句是 package org.apache.jsp.test;所以如果你想让你的 void qq()能够在JSP中调用(其实就是能让 jtest_jsp.java调用),你就应当把你的PWD类的PWD.class文件放到此目录下面(不过注意:你应当在你的PWD类的第一句写成:
package org.apache.jsp.test;也就是把PWD类放到包org.apache.jsp.test下面
)这样,就算你的qq()方法是默认的包权限 ,一样可被访问。我也在电脑上试过,结果正如上面所说,能够执行。总结:楼主,你要对待jsp文件与对待java文件一样,这样你就可以不被jsp表面所蒙蔽,要知道,jsp就是java文件,在它里面调用方法就如同在一个java类文件里面调用另一个java类文件里面的方法一样。要铭记啊!加油!!!多学习,多看书,多去找最基本的东西,多去研究原理,祝 你好运!
如果你想在jsp页面输出的话,不妨试试public class PWD{
public String qq(){
a="I am a Good Guy";
}
return a
}
<%
PWD p = new PWD();
String a=p.qq();
out.println(a);
%>
改为public void qq()
就可以了!