转载:回看JSP——jsp:useBean的用法

本文转自:https://blog.csdn.net/u011024652/article/details/52012435


点击打开链接


一、jsp:useBean的基本用法

jsp:useBean是一个JSP动作指令,表示装载一个将在JSP页面中使用的JavaBean。jsp:useBean的最基本语法如下:

[html]  view plain  copy
  1. <jsp:useBean id="name" class="package.class" />  

其中id表示定义的JavaBean的唯一标识,class表示定义的JavaBean的类。定义了一个JavaBean就可以为其属性赋值了,可以使用jsp:setProperty动作为JavaBean的属性赋值,也可以使用jsp:getProperty动作来获取属性的值。

二、jsp:getProperty

可以使用jsp:getProperty来获取指定的JavaBean的值,基本语法如下:
[html]  view plain  copy
  1. <jsp:getProperty name=”JavaBean实例名” property=”属性名” />  
其中name就是在定义JavaBean实例时使用的id,property就是需要获取值的属性名。

三、jsp:setProperty

可以使用jsp:setProperty为已经实例化的JavaBean的属性赋值,而jsp:setProperty共有四种使用方式。

1、<jsp:setProperty name="JavaBean实例名" property="*" />

这种方法与表单元素相关联,就是将表单中所有元素与JavaBean属性进行对应,如果元素名与属性名相同,则将表单元素的值赋给对应的属性。可以通过一个实例来解释一下这个用法,现有一个登录的界面如下,表单中有两个元素用户名userName和密码password,表单提交后将由dologin.jsp进行处理。
[html]  view plain  copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>登录</title>  
  8. </head>  
  9. <body>  
  10.     <h1>请登录</h1>  
  11.     <hr/>  
  12.   
  13.     <form action="dologin.jsp" method="post">  
  14.         <label for="userName">用户名:</label>  
  15.         <input type="text" name="userName" id="userName" value="" />  
  16.         <br/>  
  17.           
  18.         <label for="password">密码:</label>  
  19.         <input type="password" name="password" id="password" value="" />  
  20.         <br/>  
  21.           
  22.         <input type="submit" value="登录" />  
  23.     </form>  
  24. </body>  
  25. </html>  
接着现有一个JavaBean,名为User,也有两个属性userName和password。
[java]  view plain  copy
  1. public class User {  
  2.   
  3.     private String userName;  
  4.       
  5.     private String password;  
  6.       
  7.     public User() {  
  8.           
  9.     }  
  10.   
  11.     public String getUserName() {  
  12.         return userName;  
  13.     }  
  14.   
  15.     public void setUserName(String userName) {  
  16.         this.userName = userName;  
  17.     }  
  18.   
  19.     public String getPassword() {  
  20.         return password;  
  21.     }  
  22.   
  23.     public void setPassword(String password) {  
  24.         this.password = password;  
  25.     }  
  26. }  
现在在dologin.jsp中将表单提交的用户名与密码全部获取到,这时就可以使用<jsp:setProperty name="JavaBean实例名" property="*">了。dologin.jsp片段如下:
[html]  view plain  copy
  1. <jsp:useBean id="user" class="com.imooc.vo.User" scope="page"></jsp:useBean>  
  2.       
  3. <h2>跟表单关联,设置所有的属性值</h2>  
  4. <hr/>  
  5. <jsp:setProperty property="*" name="user"/>  
  6. 用户名:<jsp:getProperty property="userName" name="user"/><br/>  
  7. 密码:<jsp:getProperty property="password" name="user"/>  
运行项目,先进入login.jsp页面,输入用户名zhangsan,密码123456,点击登录。


登录后可以看到用户名为zhangsan密码为123456。

2、<jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" />

这个方法也与表单相关联,不同的是这里的属性不再是全部的属性都与表单关联,而是指定相应的属性与表单关联,未指定的属性将不被赋值。修改dologin.jsp代码如下:
[html]  view plain  copy
  1. <h2>跟表单关联,设置对应元素的属性值</h2>  
  2. <hr/>  
  3. <jsp:setProperty property="userName" name="user"/>  
  4. 用户名:<jsp:getProperty property="userName" name="user"/><br/>  
  5. 密码:<jsp:getProperty property="password" name="user"/>   
只指定userName与表单元素关联,运行程序,仍输入用户名zhangsan密码123456,点击登录后,运行结果如下:


可以看到因为指定了userName与表单元素关联,所以获取到了userName的值,password没有关联,所以获取到的password元素为空。

3、<jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" value="BeanValue" />

使用这个方法可以直接为JavaBean的相应属性赋value里的值,再次修改dologin.jsp的代码。
[html]  view plain  copy
  1. <h2>直接给指定的属性赋值</h2>  
  2. <hr/>  
  3. <jsp:setProperty property="userName" name="user" value="lisi"/>  
  4. 用户名:<jsp:getProperty property="userName" name="user"/><br/>  
  5. 密码:<jsp:getProperty property="password" name="user"/>  
在这里直接给userName赋值lisi,运行程序,尽管在登录页面输入了用户名zhangsan,但是点击登陆后给userName赋的值为lisi。

4、<jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" param="request对象中的参数名" />

使用这个方法通过获取request的参数来为相应的属性赋值,其中param为参数名。修改login.jsp的代码,在form里的action中添加一个参数myUserName,值为wangwu。
[html]  view plain  copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>登录</title>  
  8. </head>  
  9. <body>  
  10.     <h1>请登录</h1>  
  11.     <hr/>  
  12.   
  13.     <form action="dologin.jsp?myUserName=wangwu" method="post">  
  14.         <label for="userName">用户名:</label>  
  15.         <input type="text" name="userName" id="userName" value="" />  
  16.         <br/>  
  17.           
  18.         <label for="password">密码:</label>  
  19.         <input type="password" name="password" id="password" value="" />  
  20.         <br/>  
  21.           
  22.         <input type="submit" value="登录" />  
  23.     </form>  
  24. </body>  
  25. </html>  
然后在dologin.jsp中获取这个myUserName的值并为userName赋值,运行程序。
[html]  view plain  copy
  1. <h2>与request的参数关联,为指定的属性赋值</h2>  
  2. <hr/>  
  3. <jsp:setProperty property="userName" name="user" param="myUserName"/>  
  4. <jsp:setProperty property="password" name="user"/>  
  5. 用户名:<jsp:getProperty property="userName" name="user"/><br/>  
  6. 密码:<jsp:getProperty property="password" name="user"/><br/>  
运行程序,在登录页面输入用户名zhangsan密码123456,点击提交后获取到的用户名为wangwu。

四、JavaBean的四个作用域

在使用jsp:useBean时可以使用scope属性为JavaBean指定作用域,scope的值有四个:page(默认),request,session,application。下面来分别介绍这四个作用域。

1、application作用域

当指定JavaBean的作用域为application表示在整个项目的生命周期中都有效,服务器重启后失效。现仍复用上面的登录界面,点击登录后跳转到dologin.jsp页面中,为JavaBean设置scope为application,使用<jsp:setProperty name="JavaBean实例名" property="*" />关联表单为属性赋值,同时新增一个链接跳转到testScope.jsp页面来测试是否能获取到JavaBean的属性值。
dologin.jsp代码片段如下:
[html]  view plain  copy
  1. <jsp:useBean id="user" class="com.imooc.vo.User" scope="application"></jsp:useBean>  
  2.       
  3. <h2>跟表单关联,设置所有的属性值</h2>  
  4. <hr/>  
  5. <jsp:setProperty property="*" name="user"/>  
  6. 用户名:<jsp:getProperty property="userName" name="user"/><br/>  
  7. 密码:<jsp:getProperty property="password" name="user"/><br/>  
  8. <a href="testScope.jsp">测试JavaBean的作用范围</a>   
testScope.jsp代码如下,在这个页面使用application范围内的user:
[html]  view plain  copy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>测试useBean的四种作用范围</title>  
  8. </head>  
  9. <body>  
  10.     <h1>测试JavaBean的四种作用范围</h1>  
  11.     <jsp:useBean id="user" class="com.imooc.vo.User" scope="application" />  
  12.     用户名:<jsp:getProperty property="userName" name="user"/><br/>  
  13.     密码:<jsp:getProperty property="password" name="user"/><br/>  
  14.       
  15. </body>  
  16. </html>  
运行程序,在登录界面输入用户名zhangsan密码123456,点击提交,为JavaBean相应的属性赋值,运行页面如下:

点击超链接,进入testScope.jsp页面,仍然可以看到JavaBean的相应属性值,只要服务器没有停止,无论关闭多少次浏览器再重新打开进入testScope.jsp页面都可以得到如下结果:

2、session作用域

session作用域表示在当前会话周期内有效,只要仍在当前的会话生命周期内,就可以获取到相应的属性值。修改dologin.jsp和testScope.jsp里JavaBean的生命周期为session,运行项目,登录页面输入用户名zhangsan密码123456,点击超链接,只要在当前会话的生命周期内,都可以看到用户名和密码信息。
[html]  view plain  copy
  1. <jsp:useBean id="user" class="com.imooc.vo.User" scope="session" />  

3、request作用域

request作用域表示在当前用户的请求内有效,如果超过了当前请求,则获取不到相应的JavaBean的值。如果将上述案例的dologin.jsp和testScope.jsp里的JavaBean的生命周期改为request,再输入用户名和密码:
[html]  view plain  copy
  1. <jsp:useBean id="user" class="com.imooc.vo.User" scope="request"/>  
运行程序,可以在dologin.jsp页面中看到用户名和密码,但是当跳转到testScope.jsp后,会得到如下结果:
已经不能获取用户名和密码的值了,这是因为一个超链接相当于一个请求重定向,这就意味着再请求testScope.jsp时已经不是之前的请求了,是一个新的请求,这时原有request中的JavaBean就失效了,因此获取不到用户名和密码。如果想要获取到用户名和密码,就需要使用服务器内部转发,这仍就相当于仍是一个请求。修改dologin.jsp片段:
[html]  view plain  copy
  1. <jsp:useBean id="user" class="com.imooc.vo.User" scope="request"/>  
  2.       
  3. <h2>跟表单关联,设置所有的属性值</h2>  
  4. <hr/>  
  5. <jsp:setProperty property="*" name="user"/>  
  6. 用户名:<jsp:getProperty property="userName" name="user"/><br/>  
  7. 密码:<jsp:getProperty property="password" name="user"/><br/>  
  8. <!-- <a href="testScope.jsp">测试JavaBean的作用范围</a>  -->  
  9. <%   
  10. <span style="white-space:pre">    </span>request.getRequestDispatcher("testScope.jsp").forward(request, response);  
  11. %>  
这时在运行程序,点击登录后会直接跳转到testScope.jsp,可以获取到相应的属性值。

4、page作用域

page作用域表示只在当前的页面有效,所以不管是请求重定向还是服务器内部转发,当发生页面跳转时都不能获取到JavaBean的属性值信息。page作用域是jsp:useBean的默认作用域,案例这里就不再赘述了。

五、请求重定向与请求转发的区别

在讲JavaBean的作用域时讲到了请求重定向与请求转发的概念,这个概念很重要,也接触到不少次了,这里简单做一个总结:

1、请求重定向

使用responce.sendRedirect("xx.jsp")来进行重定向。是客户端的行为:即客户端会访问两次,第一次访问后会立即跳转到第二个重定向页面上,从本质上讲等于两次请求,而前一次的请求封装的request对象不会保存,地址栏的URL地址会改变。

2、请求转发

使用request.getRequestDispatcher("xx.jsp").forward(request,response)请求转发。forward(request,response)用于保存内置对象request和response。是服务器的行为:服务器会代替客户端去访问转发页面,从本质是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。

猜你喜欢

转载自blog.csdn.net/ChickenBro_/article/details/80829343
今日推荐