暑假自学JAVA Web心得(3)

5.useBean以及scope属性
 
scope是JSP动作标识中的useBean中的一个属性,可选值为:page(默认值)、request、session、application。
 区别:①默认值page。创建的Bean实例只能在当前的JSP文件中使用,当然包括include指令静态包含的页面。
           ②request。创建的Bean实例可以在请求范围内存取,在请求被转发至的目标页面中可以通过request对象的getAttribute方法来获取创建的Bean实例。(个人理解:Bean实例的适用范围为当前页面以及其跳转页面(jsp:forward标识))。生命周期为从客户端向服务器发出一个请求到服务器响应这个请求给用户后结束。请求结束后保存在其中的Bean实例失效。
          ③session。session是会话的意思。当用户访问Web应用时,服务器为用户创建的一个对象,服务器会通过session的id值来区分其他用户。对某一个用户而言,在该范围内中的多个对象页面共享。(多线程??)同样可以使用session对象的getAttribute方法来获取。
(不是很懂。意思是说,同一个web工程下的所有网页,都能通过session对象的getAttribute方法来调用javabean实例中的变量值吗??) 
         ④application。有效范围从服务器开始到结束。简单来说就是,你Tomcat开启后,javabean实例中的变量值一直被服务器保存着,并通过你在网页上的一些操作进行改变,直到你关闭Tomcat才会删除这些数据。同样可以使用application对象的getAttribute方法来调用bean实例中的变量值。(相当于bean实例中的变量值变成全局变量了????前面提到的声明标识中,可以定义全局方法或变量,感觉结果差不多,变量值同样被服务器保存着)


 例子:
①创建了一个工具javabean。
 public class Shiyan {
private int n=0;
 
public int getN() {
return ++n;
}
 
public void setN(int n) {
this.n = n;
}
}
//n为访问次数

 建立index.jsp
 <%@ page language="java"  pageEncoding="UTF-8"%>
<jsp:useBean id="us" class="com.Shiyan" scope="page"></jsp:useBean>
 
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
int N=us.getN();
%>
<!--以下省略HTML代码--> 
(1)重点是加粗字体处 ,这时候的scope属性值为默认值page。这时候运行服务器,出来的结果是
 
并且刷新不会改变。永远为1。
(2)如果改变scope为request。结果是
 
并且刷新仍然不会改变。
因为当前的index.jsp页面中并没有<jsp:forward>标识,也即没有其他的跳转页面,所以看不出区别。
如果为request属性值,那么当跳转到另一个页面时,另一个页面可以通过使用getAttribute方法实现调用bean中变量。page则不可以。
(3)如果改变scope为session

刷新后:


在同一个浏览器里打开另一个网页

 
刷新第二个网页后再刷新第一个网页
 
 
打开另一个浏览器,打开网页
 


出现的结果跟一开始的浏览器完全不一样(由于搜狗浏览器已经使用过网页,所以出现的结果是10,如果没有使用过的话结果应该是1,也就是说会初始化结果,从头开始)

总结来说,session会话就是当你打开浏览器,输入网址,这个服务器会记录你当前浏览器内的值,但是如果你关闭这个浏览器,或者打开另一个浏览器,那么服务器中的值会重新开始计算。
(4) 如果改成application
 
刷新
 
打开另一个浏览器
 

可以得出,不管你是否换了浏览器,服务器只要没有停止,其中的值也就不会被初始化。


总结:现在要实现一个显示总页面点击数的功能,要用的scope属性值必须为application。
之前看到的声明标识声明全局变量或全局方法同样也可以,书上说最好不要用声明标识,因为多用户并发访问时会出现安全问题,不知道usebean有没有解决这个问题。 

 

转载于:https://www.cnblogs.com/hynbrx/p/7382959.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值