随笔 - 9, 文章 - 0, 评论 - 2, 引用 - 0
数据加载中……

在JSP文档中共享bean

<jsp:useBean...scope="page">

这是默认的值;完全省略scope属性也会得到相同的行为。page作用域表示:在处理当前请求期间,除了要将bean对象绑定到局部变量外,还应该将它放在PageContext对象中。将对象存储在此处表示,servlet可以通过调用预定义变量pageContext的getAttribute方法访问它。

由于每个页面和每个请求都有不同的PageContext对象,所以scope="page"表示不共享bean,也就是针对每个请求都创建新的bean。

例如:下面有一个表单form.jsp是用来输入用户参数的

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>表单</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<form name="form1" method="post" action="test1.jsp">
<table width="100%"  border="1">
  <tr>
    <td width="11%">用户名:</td>
    <td width="89%"><input type="text" name="username"></td>
  </tr>
  <tr>
    <td>密码:</td>
    <td><input type="password" name="password"></td>
  </tr>
  <tr>
    <td>年龄:</td>
    <td><input type="text" name="age"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" name="Submit" value="测试"></td>
  </tr>
</table>
</form>
<p>&nbsp;</p>
</body>
</html>


一个JavaBean  userBean.java

package struts.bean;

public class userBean {
    private String username;
    private String password;
    private String age;
    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public String getAge() {
        return age;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

三个处理表单的test1.jsp test2.jsp test3.jsp,这三个处理的JSP代码都一样,只不过在test2.jsp中多了一个链接(测试3)。其他都一样

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import="mail.util.*"%>
<jsp:useBean id="user" scope="page" class="struts.bean.userBean"/>
<%
String username=request.getParameter("username");
String password=request.getParameter("password");
String age=request.getParameter("age");

user.setUsername(username);
user.setPassword(password);
user.setAge(age);
%>
<html>
<head>
<title>test1</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<table width="100%"  border="1">
  <tr>
    <td width="10%">用户名:</td>
    <td width="90%"><%=user.getUsername()%></td>
  </tr>
  <tr>
    <td>密码:</td>
    <td><%=user.getPassword()%></td>
  </tr>
  <tr>
    <td>年龄:</td>
    <td><%=user.getAge()%></td>
  </tr>
</table>
<p><a href="test2.jsp">测试2</a></p>
<p><a href="test3.jsp">测试3</a></p>
</body>
</html>

注意:因为是在测试scope="page",所以上面这个<jsp:uesBean>为<jsp:useBean id="user" scope="page" class="struts.bean.userBean"/>

测试的结果为:test2.jsp test3.jsp都没有共享上面的三个参数。

同样,我们再来测试一下第二个结果,把scope="page"该为scope="request"时,结果跟上面的一样,test2.jsp test3.jsp也得不到那三个参数的值,这是因为:

<jsp:useBean...scope="request">

这个值表示:在处理当前请求期间,除了要将bean对象绑定到局部变量外,还应该将它放在HttpServletResponse对象中,从而可以通过getAttribute方法访问它。看起来这个作用域好象也产生非共享bean,但是,在使用jsp:include,jsp:forward,或者RequestDispatcher的include或forward方法时,两个JSP页面,或JSP页面和servlet将会共享请求对象。


现在我们把scope="page"该为scope="session",结果就跟上面的不一样了,test2.jsp test3.jsp可以得到那三个参数的值,这是因为:

<jsp:useBean...scope="session">

这个值表示:除了要将bean帮定到局部变量以外,还要将它存储到与当前请求关联的HttpSession对象中,可以使用getAttribute获取存储在HttpSession中的对象。

最后,把scope="page"该为scope="application",结果是,test2.jsp test3.jsp同样可以得到那三个参数的值,这是因为:

<jsp:useBean...scope="application">

这个值表示:除了要将bean帮定到局部变量以外,还要将它存储到与当前请求关联的ServletContext对象中(通过预定义application变量或通过调用getServletContext获得)。ServletContext有Web应该中多个servlet和JSP页面所共享。可以使用getAttribute获取存储在ServletContext中的对象。





 

posted on 2005-09-01 02:06 阿松 阅读(305) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: