JSP调用Java中的类为什么总是调用不了呢?

lingbin 2006-05-31 10:03:31
DB.java文件:

package my;

import java.sql.*;
import javax.naming.*;
import javax.sql.DataSource;
//一个用于查找数据源的工具类。
public class DB
{
private Connection con=null;
private Statement stmt=null;
ResultSet rs=null;

public ResultSet executeQuery(String sql) throws Exception
{
rs=null;
try
{
Context initCtx = new javax.naming.InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env/jdbc/test");
DataSource ds = (DataSource)envCtx.lookup("jdbc/test");
con=ds.getConnection();
stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery (sql);
}
catch(SQLException e){throw e;}
catch(NamingException e){throw e;}

return rs;
}
}


Page.jsp文件:
<%@ page language="java" import="java.sql.*,my.*" pageEncoding="GBK"%>
<jsp:useBean id="pagi" class="my.pagi" scope="page"/>

那个my根本就找不到?????


出错信息:
org.apache.jasper.JasperException: /Page.jsp(3,0) The value for the useBean class attribute my.pagi is invalid.
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

...全文
2095 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
guanggan123 2006-06-02
  • 打赏
  • 举报
回复
检查一下大小写先
java是区分大小写的,要是哪个方法名大小写搞错了,就一下跨掉了,
上次我在JSP中搞程序查得累死了,最后就是个l和L没区分搞出来的错
moverfan 2006-06-02
  • 打赏
  • 举报
回复
程序写的有点烂啊~你得好好修改~

你先写一个确定没有错误的HELLO JSP程序,测试一下看看运行环境是否存在问题?
johnhzjx 2006-06-02
  • 打赏
  • 举报
回复
Pagirs=db.executeQuery(Pagisql); //#获取执行分页的结果集。
仔细看看DB的方法,根本没有实现分页查询的方法...执行的仅仅是SELECT * FROM..

因此在
JSP
ResultSet rs = mypagi.querySql(CountQuery, query, request);
上获取的结果集其实并没有所谓的分页结果集...

你先学会SQL的取一段记录的方法,不同的数据库取的类型不同,有TOP,ORACLE 的ROWID 等等,然后再根据这原来代码的思路自己写一个带有分页的SQL,扔进db.executeQuery处理.

你一开始的错误也许就是你最简单的错误,比如你好JAVA,没有编译成CLASS,没有放到调用页面对应的路径,如果是在一个WEB的应用,应该把CLASS放到WEB-INF的class下
路径名要与PACKAGE名相同,如果 WEB-INF\my\pagi.class
如果是单一的测试,则只要把相应CLASS放在对应的JSP目录下,目录结构和上面的类似

再建议先看些JAVA命名规范文档-_-..你的命名实在不敢恭维..
haizhi8410293 2006-06-01
  • 打赏
  • 举报
回复
public void pagi() //定义初始化每页显示的主题数和数据库的连接。
{
intPageSize=4; //每页显示的记录数目
db = new DB();
}


构造器,不要void

ZJQ100 2006-06-01
  • 打赏
  • 举报
回复
看看类文件的路径是否有错,不行重做一遍
削死壹狼 2006-05-31
  • 打赏
  • 举报
回复
先将你的类文件编译好 确定没有错误后 将生成my文件夹放到web程序的WEB-INF的classes下 之后才能像上面那样用
lingbin 2006-05-31
  • 打赏
  • 举报
回复
什么工具类啊?
我是初学者来的不懂,是不是要用java来编译成.class文件的啊????
wmgpwb 2006-05-31
  • 打赏
  • 举报
回复
是你的工具类在tomact中的位置放错了~
请仔细检查以下~
lingbin 2006-05-31
  • 打赏
  • 举报
回复
Page.jsp文件:
<%@ page language="java" import="java.sql.*" pageEncoding="GBK"%>
<%@ page import="my.*" %>
<jsp:useBean id="pagi" class="my.Pagi" scope="page"/>
lingbin 2006-05-31
  • 打赏
  • 举报
回复
还是不行啊,我有两个Java类来的。
Pagi.java文件:
package my;

import java.util.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import my.DB.*;

public class Pagi
{
ResultSet CountTopicrs=null; //初始化总记录数Rs变量
ResultSet Pagirs=null; //初始化分页时Rs变量
public int intCountTopic=0; //主题总数
public int intPageSize; //每页显示主题数
public int intPageCount; //总页数
public int intPage=1; //当前页数
public String nowPage; // int i;
public String HttpFile; //初始化当前页intPage变量,以准确便获取当前页。 //当前的地址栏的文件
DB db; //定义Linkdb类的一个对象。
...........
}

DB.java文件:
package my;

import java.sql.*;
import javax.naming.*;
import javax.sql.DataSource;
//一个用于查找数据源的工具类。
public class DB
{
private Connection con=null;
private Statement stmt=null;
ResultSet rs=null;
.......
}

Page.jsp文件:
<%@ page language="java" import="java.sql.*" pageEncoding="GBK"%>
<%@ page import="my.Pagi.*" %>
<jsp:useBean id="pagi" class="my.Pagi" scope="page"/>

出错信息:
org.apache.jasper.JasperException: /Page.jsp(4,0) The value for the useBean class attribute my.Pagi is invalid.

org.apache.jasper.JasperException: Unable to load class for JSP
两种错误??????????
boyu_song 2006-05-31
  • 打赏
  • 举报
回复
嘿嘿,再改一下
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<%@ page import="my.DB" %>
<%@ pageEncoding="GBK"%>
<jsp:useBean id="pagi" class="my.DB" scope="page"/>

boyu_song 2006-05-31
  • 打赏
  • 举报
回复
<%@ page language="java" %>
<%@ page import="import="java.sql.*" %>
<%@ page import="import="my.DB" %>
<%@ pageEncoding="GBK"%>
<jsp:useBean id="pagi" class="my.DB" scope="page"/>
boyu_song 2006-05-31
  • 打赏
  • 举报
回复
<%@ page language="java" %>
<%@ page import="import="java.sql.*" %>
<%@ page import="import="my.DB" %>
<%@ pageEncoding="GBK"%>
<jsp:useBean id="pagi" class="DB" scope="page"/>

这么写整齐点
lingbin 2006-05-31
  • 打赏
  • 举报
回复
改成:
<jsp:useBean id="pagi" class="my.DB" scope="page"/>
也不行啊!!!!!
boyu_song 2006-05-31
  • 打赏
  • 举报
回复
<jsp:useBean id="pagi" class="my.DB" scope="page"/>
36397 2006-05-31
  • 打赏
  • 举报
回复
哈哈!——,这位老兄,怎么和我的代码一样呢。

我的代码是直接写在JSP中的,这样不好,我现在都在想写在javabean中了。

但我还没有成熟的代码,不好意思发了
lingbin 2006-05-31
  • 打赏
  • 举报
回复
Page.jsp文件:
<body>

<table align="center" border=1>
<%
String CountQuery="select count(*) from custom";
String query = "select * from custom";
ResultSet rs = mypagi.querySql(CountQuery, query, request);
String footer = mypagi.PageFooter();
%>
</table>
lingbin 2006-05-31
  • 打赏
  • 举报
回复
DB.java文件:

package my;

import java.sql.*;
import javax.naming.*;
import javax.sql.DataSource;

//一个用于查找数据源的工具类
public class DB
{
private Connection con=null;
private Statement stmt=null;
ResultSet rs=null;

public ResultSet executeQuery(String sql) throws Exception
{
rs=null;
try
{
Context initCtx = new javax.naming.InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/test");
con=ds.getConnection();
stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
}
catch(SQLException e){throw e;}
catch(NamingException e){throw e;}

return rs;
}

//执行Insert,Update语句
public void executeUpdate(String sql) throws Exception
{
stmt = null;
try
{
Context initCtx = new javax.naming.InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)envCtx.lookup("jdbc/test");
con=ds.getConnection();
stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
stmt.executeQuery(sql);
stmt.close();
con.close();
}
catch(SQLException ex)
{
System.err.println("执行SQL语句出错: " + ex.getMessage());
}
}

// 关闭stmt和关闭连接
public void close_all()
{
try
{
stmt.close();
con.close();
}
catch(SQLException e){e.printStackTrace();}
}
}
lingbin 2006-05-31
  • 打赏
  • 举报
回复
pagi.java文件:
package my;

import java.util.*;
import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import my.DB.*;

public class pagi
{
ResultSet CountTopicrs=null; //初始化总记录数Rs变量
ResultSet Pagirs=null; //初始化分页时Rs变量
public int intCountTopic=0; //主题总数
public int intPageSize; //每页显示主题数
public int intPageCount; //总页数
public int intPage=1; //当前页数
public String nowPage; // int i;
public String HttpFile; //初始化当前页intPage变量,以准确便获取当前页。 //当前的地址栏的文件
DB db; //定义Linkdb类的一个对象。

public void pagi() //定义构造器,初始化每页显示的主题数和数据库的连接。
{
intPageSize=4; //每页显示的记录数目
db = new DB();
}

//Countsql:总记录的Query字符串。[形式为select count(*) from tablename]
//Pagisql :要分页的Query字符串。[形式为select * from tablename where ...]
//request :参数传递过程中的变量。[用来控制翻页时的pages变量]
public ResultSet querySql(String Countsql,String Pagisql,HttpServletRequest request)throws Exception
{
HttpFile=request.getRequestURI(); //获取当前文件名。
nowPage=request.getParameter("pages"); //获取当前页,将数值赋予intPage变量。[分页栏中必须要有pages参数]
if (nowPage==null)
{
intPage=1;
}else{
intPage=Integer.parseInt(nowPage);
if (intPage<1) intPage=1;
}

CountTopicrs=db.executeQuery(Countsql); //#获取总记录数的结果集。

if(CountTopicrs != null)
{
if (CountTopicrs.next())
{
intCountTopic=CountTopicrs.getInt(1);
}
intPageCount = (intCountTopic+intPageSize-1)/intPageSize; //获取总页数。

if (intPage>intPageCount)//如果当前页大于总页数,则当前页等于总页数。
{
intPage=intPageCount;
}
CountTopicrs.close(); //关闭总主题数的数据集。
}
db.close_all();
Pagirs=db.executeQuery(Pagisql); //#获取执行分页的结果集。
return Pagirs;
}//end querySql function.

public int getCountTopic()//获取记录总数。
{
return intCountTopic;
}

public int getPageCount() //获取总页数。
{
return intPageCount;
}

public int getIntPage() //获取当前页数。
{
return intPage;
}

public String PageFooter()
{
String str = "";
int next, prev;
prev=intPage-1;
next=intPage+1;
str += "查询到<font color=red>"+getCountTopic()+"</font>条记录"+
" 共<font color=red>"+getPageCount()+"</font>页";
str +=" 第<font color=red>"+getIntPage()+"</font>页 ";
if(intPage>1)
str += " <A href=" + HttpFile + "?pages=1"+">首页</A> ";
else
str += " 首页 ";
if(intPage>1)
str += " <A href=" + HttpFile + "?pages=" + prev + ">上一页</A> ";
else
str += " 上一页 ";
if(intPage<intPageCount)
str += " <A href=" + HttpFile + "?pages=" + next + ">下一页</A> ";
else
str += " 下一页 ";
if(intPageCount>1&&intPage!=intPageCount)
str += " <A href=" + HttpFile + "?pages=" + intPageCount + ">尾页</A>";
else
str += " 尾页 ";

return str;
}

public void close_all()
{
db.close_all();
}
}
sole_lodestar 2006-05-31
  • 打赏
  • 举报
回复
给有错误的那行捕获一下异常,再把异常发上来
加载更多回复(11)

67,541

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧