接着之前的内容继续下去。接下来是讲解JavaBean。
1.什么是javabean
Javabean是特殊的java类。使用java语言编写的,他的主要特征如下:
a 提供一个默认的无参的构造函数。
b 需要被序列化并且实现了Serializable接口。
c 有一系列的可读写的属性。
d 有一系列的getter和setter方法。
2.javabean属性
一个JavaBean对象的属性应该是可访问的。这个属性可以是任意合法的Java数据类型,包括自定义的Java类。一个JavaBean对象的属性可以是可读写,或只读,或只写。JavaBean对象的属性通过JavaBean实现类中提供的两个方法来访问:
getPropertyName():举例来说,如果属性的名称为myName,那么这个方法的名字就要写成getMyName()来读取这个属性。这个方法也称为访问器。
setPropertyName():举例来说,如果属性的名称为myName,那么这个方法的名字就要写成setMyName()来写入这个属性。这个方法也称为写入器。
一个只读的属性只提供getPropertyName()方法,一个只写的属性只提供setPropertyName()方法。
3.如何创建javabean对象
使用普通方式来应用javabean。就像使用普通java类一样。
a 创建一个web project项目。
b 在src文件下,创建一个包。在包中创建一个类,满足设计原则即可。
c 在webRoot文件的index.jsp页面中通过<%@ page import=”包名.类名”%>。
d 通过使用new来创建javabean对象的实例
e 使用set方法进行赋值
f 使用get方法进行取值。
具体步骤如下图所示:
最后执行的结果如下:
4、使用javabean的动作标签useBeans来实例化对象
常用标签如下:
useBeans 实例化对象
setProperty 设置对象属性值
getProperty 获取对象属性值
<body> <jsp:useBean id="myUsers" class="com.wq.Users" scope="page"/> <h1>使用useBean动作创建javabean的实例</h1> <% myUsers.setUsername("lulei") ; myUsers.setPassword("123456"); %> <hr> 用户名:<%=myUsers.getUsername() %><br> 密码:<%=myUsers.getPassword() %><br> </body>
5、<jsp: setProperty>动作、<jsp: getProperty>动作和javaBean的四种作用域
<jsp:setProperty>动作:给【已经实例化的Javabean对象的属性赋值】,一共有四种形式
1、需要表单提交属性:
<jsp:setProperty name="Javabean实例名" property="*"/>
与之前页面提交的表单的【所有属性进行匹配】,若有与javabean类属性名相同的,则进行赋值。比如表坛提交了username="xxx",而javabean里有username属性,则对其进行赋值。
2、需要表单提交属性:
<jsp:setPropery name="Javabean实例名" property="javabean属性名" />
对指定的属性进行匹配
3、手动设置属性:
<jsp:setProperty name = "Javabean实例名" property="Javabean属性名" value="BeanValue" />
4、与request参数有关,通过url传参 :
<jsp:setProperty name="Javabean实例名" property="propertyName" param="request对象中的参数名" />
测试代码如下:
dologin.jsp
<body> <jsp:useBean id="myUsers" class="com.wq.Users" scope="page"/> <h1>setProperty动作元素</h1> <hr> <!--根据表单自动匹配所有的属性 --> <%-- <jsp:setProperty name="myUsers" property="*"/> --%> <!--根据表单匹配部分的属性 --> <%-- <jsp:setProperty name="myUsers" property="username"/> --%> <!--根表单无关,通过手工赋值给属性 --> <%-- <jsp:setProperty name="myUsers" property="username" value="lulei"/> <jsp:setProperty name="myUsers" property="password" value="888888"/> --%> <!--通过URL传参数给属性赋值 --> <!--表单中action属性url传递参数值:action=“dologin.jsp?mypass=999999”--> <jsp:setProperty name="myUsers" property="username"/> <jsp:setProperty name="myUsers" property="password" param="mypass"/> <!-- 使用传统的表达式方式来获取用户名和密码 --> <%-- 用户名:<%=myUsers.getUsername() %><br> 密码:<%=myUsers.getPassword() %><br> --%> <!-- 使用getProperty方式来获取用户名和密码 --> 用户名:<jsp:getProperty name="myUsers" property="username"/> <br> 密码:<jsp:getProperty name="myUsers" property="password"/><br> <br> <br> <a href="testScope.jsp">测试javabean的四个作用域范围</a> <% //进行请求转发 request.getRequestDispatcher("testScope.jsp").forward(request, response); %> </body>
(1)JSP动作元素为请求处理阶段提供信息。
(2)动作元素遵循XML元素的语法。有一个包含元素名的开始标签,可以有属性、可选内容,以及结束标签。
--------------------------------------------------------------------*----------------------------------------------------------------------------
JSP动作分为以下几类:
(1)与存取JavaBean有关的6个元素。 如:
<jsp:useBean> <jsp:setProperty> <jsp:getProperty>
(2)6个动作元素。 如:
<jsp:include> <jsp:forward> <jsp:param> <jsp:plugin> <jsp:params> <jsp:fallback>
(3)与Document有关的6个元素:
<jsp:root> <jsp:declaration> <jsp:scriptlet> <jsp:expression> <jsp:text> <jsp:output>
(4)用来动态生成XML元素标签的3个动作:
<jsp:attribute> <jsp:body> <jsp:element>
(5)用在Tag File中的2个元素:
<jsp:invoke> <jsp:dobody>
testScope.jsp
<body> <h1>Javabean的四个作用域范围</h1> <hr> <jsp:useBean id="myUsers" class="com.wq.Users" <span style="color:#ff0000;">scope="page"</span>/> 用户名:<jsp:getProperty name="myUsers" property="username"/><br> 密码:<jsp:getProperty name="myUsers" property="password"/><br> <!-- 使用内置对象获取用户名和密码 --> <hr> <%-- 用户名:<%=((Users)application.getAttribute("myUsers")).getUsername()%><br> 密码:<%=((Users)application.getAttribute("myUsers")).getPassword() %><br> --%> <%-- 用户名:<%=((Users)session.getAttribute("myUsers")).getUsername()%><br> 密码:<%=((Users)session.getAttribute("myUsers")).getPassword() %><br> --%> <%-- 用户名:<%=((Users)request.getAttribute("myUsers")).getUsername()%><br> 密码:<%=((Users)request.getAttribute("myUsers")).getPassword() %><br> --%> <% String username = ""; String password = ""; if(pageContext.getAttribute("myUsers")!=null ) { username = ((Users)pageContext.getAttribute("myUsers")).getUsername(); password = ((Users)pageContext.getAttribute("myUsers")).getPassword(); } %> 用户名:<%=username%><br> 密码:<%=password%><br> </body>
page作用域:
application作用域:(记得将所有的Scope设为application)
session作用域:(记得将所有的Scope设为session)
request作用域:(记得将所有的Scope设为request)
最后总结一下四种作用域:
1.page指当前页面有效。在一个jsp页面里有效。
2.request 指在一次请求的全过程中有效,即从http请求到服务器处理结束,返回响应的整个过程,存放在HttpServletRequest对象中。在这个过程中可以使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量。
3.Session是用户全局变量,在整个会话期间都有效。只要页面不关闭就一直有效(或者直到用户一直未活动导致会话过期,默认session过期时间为30分钟,或调用HttpSession的invalidate()方法)。存放在HttpSession对象中。
4.application是程序全局变量,对每个用户每个页面都有效。存放在ServletContext对象中。它的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。
总结:当数据只需要在下一个forward有用 时,用request就够了;若数据不只是在下一个forward有用 时,就用session。如果是上下文,环境信息之类的变量,就用application。