关于session的概念问题

caryzheng 2007-07-11 07:41:48
本人概念上有点不清楚,向大侠们请教一下
1 一个javabean(在test.jsp中被usebean引用)的scope设置为session后是不是在同一个session中只要他本实例化一次后不管test.jsp怎么刷新或者由别的jsp页面重定向到test.jsp时都不会实例化第二次?

2 还是上面那种个javabean(scope设置为session),如果这个javabean中由个向数据库发送sql语句,并返回结果集rs的方法。那么调用该方法得到结果集后,结果集是存在本地客户端还是session中(跟scope设置为session有关吗)?
...全文
258 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xieboshi 2007-07-12
  • 打赏
  • 举报
回复
1、你这样做我觉得不是很好,因为与数据库的连接一直被耗着,连接资源是很宝贵的。
2、还有我建议你在做web开发时要注意一下分层(MVC),jsp页面尽量少写代码,这样程序会更优雅一些,具体怎样分层你可以试着用一下一些框架,如structs,hibernate等。
3、我们一般做分页,是在业务逻辑层查询数据库时只查询一页的数据,然后将数据返回到jsp页面显示,每次翻页时重新查询,这样因为每次的数据量不大,实际执行效率也不存在太大的问题,还有一些开源的分开组件可以利用。
caryzheng 2007-07-12
  • 打赏
  • 举报
回复
继续请教一下,我用rs(调用usebean得到rs)得到了一个结果集,由于数据数目比较多所以在jsp页面采用分页形式,在jsp页面划处table后并没有关闭rs。我之所以把javabean的scope设置成session就是为了在翻页的时候不用重新构建javabean(即不用重新发送sql语句),这也是为什么第一次划完table后没有关闭rs的原因,这样我可以在翻页时重新利用结果集。但是缺点是无法正确释放rs。如果说结果集是放在服务器内存中,而像我上面的情况又不去主动关闭rs,如果我反复去用那个同一个rs(给它不同的sql语句)去得到不同的结果集,那么会不会不断的占用服务器资源,使的session越来越大?那些以前生成的结果集像我上面那样不去关闭rs,那当新的结果集产生的时候服务器会怎么处理原来的结果集?
请问向这种翻页的形式可有什么好办法解决只需一次提交sql的办法?或者我上面的办法可能有什么样的改进。先谢谢了
ZW_Ren 2007-07-12
  • 打赏
  • 举报
回复
你的這個例子中,結果集是你的javaBean的成員變量。
所以跟javaBean有一樣的作用域。
存放的位置當然是服務器內存中。
在web編程中,很少有東西是存放在客戶端內存中的。
caryzheng 2007-07-12
  • 打赏
  • 举报
回复
这是我的javabena(用来获得数据集的)
import java.sql.*;

public class SqlStatement {
private Statement stmt = null;

private ResultSet rs = null;

public ResultSet getRs() {
return rs;
}

public void setRs(String sql) {
try {
this.rs = stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}

public void setStmt(Connection conn) {
try {
this.stmt = conn.createStatement();
} catch (SQLException a) {
System.err.println(a.getMessage());
}
}
}

下面是我jsp的usebean
<jsp:useBean id="stmtBMKSBMB" class="com.javabean.his.SqlStatement"></jsp:useBean>
<%
stmtBMKSBMB.setStmt(myConn)
stmtBMKSBMB.setRs("select * from QBMKSBMB ");//这里得到结果集
%>

是不是可以说向我这样得到的结果集跟session等作域没太大关系。如果与session没有关系的话那这个结果集(我上面的代码中生成的)是存放在什么地方呢? 客户端内存? 服务器内存 ?
xieboshi 2007-07-11
  • 打赏
  • 举报
回复
看你自己的处理方式,usebean其实很简单,就是实例化一个对象然后以 作用域对象.setAttribute(key,value)的方式存放,你在页面可以通过<jsp:setProperty>及<jsp:getProperty>的方式调用它,它们实际上就是调用了对象的set和get方法,具体到你操作数据库返回值的存储,就看你set或get方法里的代码怎么写了,你可以以属性的形式存储,它跟session等作域没太大关系,这里的作用域只是指当前usebean的对象所存放的作用域,不知我说清楚没有。
caryzheng 2007-07-11
  • 打赏
  • 举报
回复
第一个问题我自己解决了,usebean标签首先根据scope的值在其指定的范围中寻找相应的javabean,如果找到就使用它,如果没有找到就构建一个新的javabean然后放到相应的范围中。
不过第二个还是不明白,哪位知道的请告诉我一下,谢谢了。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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