荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: junire (起来,我要坐), 信区: Java
标 题: [合集]请问!
发信站: 荔园晨风BBS站 (Mon Dec 24 23:24:48 2001), 站内信件
Demon (蓝色梦幻) 于Sat Oct 20 10:47:39 2001提到:
有一个javabean如下:
//opendb.java
//定义包opendb
package opendb;
//引入java.sql.*
import java.sql.*;
//包opendb中的类opendb
public class opendb
{
//定义数据库连结字符串,jdbc.odbc桥
String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr = "jdbc:odbc:Achievement";
Connection conn = null;
ResultSet rs = null;
//定义打开数据库连结的函数
public opendb()
{
try
{
Class.forName(sDBDriver);
}
//处理异常
catch(java.lang.ClassNotFoundException e)
{
System.err.println("opendb():" + e.getMessage());
}
}
//定义执行SQL语句的函数
public ResultSet executeQuery(String sql)
{
rs = null;
try
{
conn = DriverManager.getConnection(sConnStr,"","");
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}
//处理异常
catch(SQLException ex)
{
System.err.println("aq.executeQuery:" + ex.getMessage());
}
return rs;
}
}
为什么我在jsp里
<jsp:useBean id="db"
scope="page" class="opendb.opendb"/>调用时,说找不到type opendb
只有type opendb.opendb,造成这个jsp文件实现不了,谁能帮我看一下吗?
Lg (创造人生的传奇) 于Sat Oct 20 13:33:25 2001提到:
把英文的出错信息打出来。
另外你的程序获取conn后,最后rs,conn都没有关闭。我想是不是没有
把这个class打全?应该还有close等方法?
还有你这个只是一个java class,连get set方法也没有,算不上bean。
你可以这样用。
<%
opendb db = new opendb();
db.....
%>
另外jdbc-odbc不是线程安全的,你的程序会不时出问题。
Demon (蓝色梦幻) 于Sat Oct 20 15:28:04 2001提到:
我是通过opendb包里含有类opendb来实现的.
我是这用的,在jsp里:
<jsp:useBean id="db"
scope="page" class="opendb.opendb"/>
....
try
{
String sql = "INSERT general ( ID,Grade ) VALUES (\'"+ ID + "\',\'"+
sum2 +"\')";
ResultSet rs = db.executeQuery(sql);
}
catch (Exception e2)
{
out.println(e2.getMessage());
}
所以opendb.java里只是负责打开对数据库的连接,和对sql语句的执行,对于我要查询或者
插入,修改数据,或者要对数据记录集如何操作和close等等是在jsp里对它进行操作的.所
以应该不关close的事.
出错信息如下:
org.apache.jasper.JasperException: Unable to compile class for JSPI/O
exception
error:与预期不同,文件C:\tomcat\howjsp\WEB-INF\classes\opendb.java不包含type
opendb.请调整类途径,是文件不在unnamed package中出现.
C:
\tomcat\work\localhost_8080%2Fhowjsp\_0002fGradeStepTwo_0002ejspGradeSte
pTwo_jsp_5.java:137: type declaration中未找到类opendb.
opendb.opendb db = null;
^
C:
\tomcat\work\localhost_8080%2Fhowjsp\_0002fGradeStepTwo_0002ejspGradeSte
pTwo_jsp_5.java:140: type declaration中未找到类opendb.
db= (opendb.opendb)
^
C:
\tomcat\work\localhost_8080%2Fhowjsp\_0002fGradeStepTwo_0002ejspGradeSte
pTwo_jsp_5.java:145: type declaration中未找到类opendb.
db = (opendb.opendb) Beans.
instantiate(this.getClass().getClassLoader(), "opendb.opendb");
^
5错误.
本人对bean不熟,刚开始学,所以想问一下是否bean一定要有get或者set方法呢?
Lg (创造人生的传奇) 于Sun Oct 21 14:43:29 2001提到:
那些中文出错信息怪怪的,不过它是说找不到你的类.你看看把你的opendb放到
WEB-INF/lib或者WEB-INF/classes下面.
另外我觉得这个程序是有问题的.因为你如果利用jsp:useBean,并且scope=session,
那么程序就不行了.page还可以通过,因为它相当于jsp里面new instance.
npudream (工大追梦) 于Sun Oct 21 15:43:07 2001提到:
你应该在/WEB-INF/classes下再建一opendb目录,然后把opendb.class放在里面。应该就
可以了。
omcat\work\localhost_8080%2Fhowjsp\_0002fGradeStepTwo_0002ejspGradeSte
Demon (蓝色梦幻) 于Sun Oct 21 16:13:25 2001提到:
这样不行,我试了一下,出来的错误跟以前一样,应该不关这个途径的事(我用的是tomcat)
究竟是这个程序本身有错误还是<jsp:.....>这个引用有错误呢,这个我老是搞不清楚,程
序本身是可以编译通过的.
ps:本来我写这个是为了方便在整个系统那么多jsp文件里每次调用同一个数据库时不用
老是重复的编写链接数据库的语句(就相当于调用一个子程序吧),没有想到总是通不过.
如果是你们这些高手认为可以有什么方法可以实现这个目的?
npudream (工大追梦) 于Sun Oct 21 16:20:41 2001提到:
我以前一直用Tomcat,package名要对应目录名,你的package是opendb,就必须在clas
ses下建opendb目录,再把class文件放在里面。还不行的话,把这个classes目录设到c
lasspath里试试。不要忘了重起Tomcat。
Lg (创造人生的传奇) 于Sun Oct 21 19:57:13 2001提到:
我是利用DBConnectionManager作pool,一般我的数据库操作都在java的类里面.jsp
只是一些比较简单的操作.比如要从数据库获取一个用户列表,那么我会返回一个
ArrayList,它里面就是User的实例.但是我没有想到怎么解决事务的问题?
Demon (蓝色梦幻) 于Sun Oct 21 23:00:25 2001提到:
我主要希望的就是在java里的实现事务的解决,这样就不用jsp每次进行操作,如果只是要
从数据库里获取用户列表可能容易一点,我还没用过DBConnectionManager连接数据库,是
不是种连接方式比较安全?还是有别的优点?
npudream (工大追梦) 于Mon Oct 22 07:48:02 2001)提到:
其实用数据库连接池比较好,一是把数据库操作都封装在bean里,结构比较清晰,二是当访
问量大时可以大大减少对数据库的连接,提高性能。
Lg (创造人生的传奇) 于Mon Oct 22 09:50:07 2001提到:
DBConnectionManager是一个数据库连接池管理,它可以管理多个数据库连接池,对程序的
性能应该有很大改善,它避免了重复打开数据库连接和关闭连接.
实现事务应该要用到ejb,不过我现在只是要实现transaction,roll back.比如更新一批
用户的信息,如果中间出了问题,那么应该回滚.现在我有User类,它有update()的方法,
可以更新用户的数据库信息,更新单个用户信息很简单,
但是它里面用到的是autoCommit,所以我更新一批的时候,不能用它,否则出错不能会滚.
当然可能会有人建议我说专门写一个类或者方法作
这个,但是我觉得这样并不OO,我对OO的理解很肤浅.
你的程序按照上面说的就可以解决的.
action (一晃又一年) 于Tue Oct 23 10:24:49 2001提到:
问一个题外话,师兄是否现在不研究linux而研究java了?
Lg (创造人生的传奇) 于Tue Oct 23 12:55:15 2001提到:
linux和java不是同一范畴.两者不冲突.掌握多一点知识有好处的.
我现在都是在linux下面开发java.
这一段时间关注java比较多,一个是因为现在做的项目用java,另外一个是觉得
暂时在linux方面不会有长足的进步.
另外我98年就开始用java拉,只是你们不知道.
等c#的正式版出来了,我有空也会学学.刚刚开始接触visual的,又走M$路线的,
c#是个不错的选择.
action (一晃又一年) 于Tue Oct 23 14:16:13 2001提到:
我也做了1年多的java了 ,但是对oo的系统设计,模块的力度划分还是不
很有把握,师兄这么努力的学习,真是让人佩服,希望有时间可以交流
交流。。
npudream (工大追梦) 于Tue Oct 23 14:45:44 2001)提到:
我也是做了一年的Java,但是现在转行了,做网管,不过觉得Java是个好东西,不能丢。
junire (好好学习,天天向上) 于Tue Oct 23 18:15:14 2001提到:
现在外面java主要用来做什么啊?师兄??
Lg (创造人生的传奇) 于Tue Oct 23 23:22:50 2001提到:
因为我觉得做的越高,你需要掌握的知识就要越多,这样才能高屋建瓴的
看问题。以前总想学个“最有用”的语言,现在觉得需要掌握几种语言,
这样处理问题才能游刃有余。另外数据库,网络,操作系统等等都是作
集成不可缺少的。
我一直都是作c语言的开发,所以对oo没有什么了解,现在都是希望从java
里面学取。
Demon (蓝色梦幻) 于Wed Oct 24 12:29:10 2001提到:
我看师兄们几次提到oo,究竟oo是怎样的概念,能不能介绍一下?不懂的问!
Fadeaway (孤独的人总说无所谓) 于Wed Oct 24 12:38:48 2001提到:
object oriented
我看师兄们几次提到oo,究竟oo是怎样的概念,能不能介绍一下?不懂的问!
action (一晃又一年) 于Wed Oct 24 13:58:33 2001提到:
那在c语言中,推送技术是用什么方式去实现的呢?
*
Lg (创造人生的传奇) 于Thu Oct 25 13:05:34 2001提到:
web里面的?是不是在作聊天室?
一般都是利用GET的方式,但是HTTP对应的cgi进程不断开,有信息就发送给客户端IE
action (一晃又一年) 于Thu Oct 25 15:27:57 2001提到:
是这样的:java用rmi实现推送:
下面是个例子程序:
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.LocateRegistry;
import java.util.*;
import java.io.*;
public class Server
extends UnicastRemoteObject
implements watch {
public String ServerSay = "jimmy";
public Notify notify =null;
public Server() throws RemoteException{
}
public synchronized String Watch(String say,Notify obj) throws
RemoteException{
System.out.println("Server.watch():"+say);
this.notify = obj;
return this.ServerSay;
}
public static void main(String args[])
{
// Create and install the security manager
System.setSecurityManager(new RMISecurityManager());
try {
System.out.println("StockServer.main: creating registry");
LocateRegistry.createRegistry(2005);
//System.out.println("StockServer.main: creating server");
Server server = new Server();
//System.out.println("StockServer.main: binding server ");
Naming.rebind("//localhost/HelloServer", server);
//System.out.println("StockServer.main: done");
server.ServerSay = "jiji";
try {
BufferedReader in = new BufferedReader(
new InputStreamReader(System.in));
String str = "";
while (str != null) {
System.out.print("> prompt ");
str = in.readLine();
server.notify.update(str);
}
} catch (IOException e) {
}
} catch (Exception e) {
System.out.println("StockServer.main: an exception occurred: " +
e.getMessage());
e.printStackTrace();
}
}
}
以上的是服务器
下面的是客户端
import java.net.URL;
import java.rmi.*;
import java.rmi.server.*;
import java.util.*;
public class Client implements Notify, java.io.Serializable{
public watch Watch = null;
public synchronized void update(String updateString) {
System.out.println("Client get:"+updateString);
}
public void init(){
try{
synchronized(this){
Watch = null;
}
try {
UnicastRemoteObject.exportObject(this);
} catch (java.rmi.server.ExportException e) {
e.printStackTrace();
}
Watch = (watch)Naming.lookup("//localhost/HelloServer");
Watch.Watch("client:",this);
}catch(Exception ex){
ex.printStackTrace();
}
}
public static void main(String[] args){
try{
Client cl = new Client();
cl.init();
// wait for invocations from server
java.lang.Object sync = new java.lang.Object();
synchronized (sync) {
sync.wait();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
我想问的是:好像这样的应用:服务器端的程序将结果送到客户端
可以是application的客户端,c或是c++走的是什么协议,怎么样让
服务器和客户端同步?
Lg (创造人生的传奇) 于Thu Oct 25 19:53:39 2001提到:
rmi是java专有的,c/c++一般是用corba.你的程序是股票软件测试吧?
要实现这种一对多的推送,java的jms可以做到,但是底层跑的应该也是rmi吧,
ejb用到很多rmi.
如果自己用c, c++实现,最容易想到的就是自己定协议,比如用multicast?
如果一个一个socket写,可能不够实时.
action (一晃又一年) 于Thu Oct 25 23:20:40 2001提到:
是呀,这是一个股票程序改出来了,
不过只是一个对一个的情况,,不过也是用来试验的:)
谢谢你的题点。
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店