在JSP页面中使用JavaBean

一、JavaBean

JavaBean是符合某种特定规范的Java类,通过JavaBean可以有效减少代码冗余,解决代码重复编写问题,功能区分明确,提高代码可维护性。

JavaBean的设计原则:共有类+无参的共有构造方法+getter和setter方法+属性私有

二、JSP动作元素

JSP动作元素(action elements),动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包含元素名的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签。

JSP动作的分类:

1、与存取JavaBean有关的动作

<jsp:useBean><jsp:setProperty><jsp:getProperty>

2、JSP1.2开始有的基本元素,包括6个动作元素

<jsp:include><jsp:forward><jsp:param><jsp:plugin><jsp:params><jsp:fallback>

3、JSP2.0新增加的元素,主要与JSP Document有关,包括6个元素

<jsp:root><jsp:declaration><jsp:scriptlet><jsp:expression><jsp:text><jsp:output>

4、JSP2.0新增加的元素,主要是用来动态生成XML元素标签的值,包括3个动作

<jsp:attribute><jsp:body><jsp:element>

5、JSP2.0新增加的元素,主要用在Tag File中,有2个元素

<jsp:invoke><jsp:dobody>

三、在JSP页面中使用JavaBean

3.1、使用普通方式创建JavaBean的实例

  <body>
    <% 
       User user = new User();
       user.setName("admin"); //设置用户名
       user.setPwd("000000");//设置密码
    %>
    <h1>使用普通方式创建JavaBean的实例</h1>
    <hr>
       用户名:<%=user.getName() %><br>
       密码:<%=user.getPwd() %><br>
  </body>

3.2 在JSP页面通过动作标签来使用JavaBean

1、<jsp:useBean>在JSP页面中实例化或者在指定范围内使用JavaBean

<jsp:useBean id="标示符" class="类名" scope="作用范围">

示例代码:

  <body>
    <jsp:useBean id="user" class="model.User" scope="page">
    <h1>使用useBean动作创建JavaBean的实例</h1>
    <hr>
       用户名:<%=user.getName() %><br>
       密码:<%=user.getPwd() %><br>
  </body>

【注】用户名和密码的页面显示结果都为null,因为没有给该实例的属性赋值

2、<jsp:setProperty>给已经实例化的JavaBean对象的属性赋值,共有四种形式

<!-- 全部属性与表单关联 -->
<jsp:setProperty name="JavaBean实例名" property="*"/>
<!-- 部分属性与表单关联-->
<jsp:setProperty name="JavaBean实例名" property="指定属性名"/>
<!-- 手工设置属性-->
<jsp:setProperty name="JavaBean实例名" property="指定属性名" value="指定属性值"/>
<!-- 与request参数关联-->
<jsp:setProperty name="JavaBean实例名" property="指定属性名" value="指定属性值" param="request对象中的参数名"/>

3、<jsp:getProperty>获取指定JavaBean对象的属性值

<jsp:getProperty name="JavaBean实例名" property="属性名"/>

综合实例

<body>
    <jsp:useBean id="myUser" class="model.User" scope="page"/>
    <h1>setProperty动作元素</h1>
    <hr>
   <!--根据表单自动匹配所有的属性 -->
   <%-- 
   <jsp:setProperty name="myUser" property="*"/>  
   --%>
   <!--根据表单匹配所有部分的属性 -->
   <%-- 
   <jsp:setProperty name="myUser" property="name"/>  
   --%>
   <!--根表单无关,通过手工赋值给属性 -->
   <%-- 
   <jsp:setProperty name="myUser" property="name" value="admin"/>
   <jsp:setProperty name="myUser" property="pwd" value="000000"/>
   --%>
   <!--通过URL传参数给属性赋值 -->
   <jsp:setProperty name="myUsers" property="name"/>
   <jsp:setProperty name="myUsers" property="pwd" param="password"/>
   <!-- 使用传统的表达式方式来获取用户名和密码 -->     
      用户名:<%=myUser.getName() %><br>
      密码:<%=myUser.getPwd() %><br>  
   <!-- 使用getProperty方式来获取用户名和密码 -->
      用户名:<jsp:getProperty name="myUser" property="name"/><br>
      密码:<jsp:getProperty name="myUser" property="pwd"/><br>   
  </body>

3.3 JavaBean的4个作用域范围

①page:仅在当前页面有效

②request:可以通过HttpRequest.getAttribute()方法获得JavaBean对象

③session:可以通过HttpSession.getAttribute()方法获得JavaBean对象

④application:可以通过application.getAttribute()方法获得JavaBean对象

  <body>
    <h1>Javabean的四个作用域范围</h1>
    <hr>
    <jsp:useBean id="myUser" class="model.User" scope="page"/>
       用户名:<jsp:getProperty name="myUser" property="name"/><br>
       密码:<jsp:getProperty name="myUser" property="pwd"/><br>
    <!-- 使用内置对象获取用户名和密码 -->
    <hr>
   <%-- 
       用户名:<%=((Users)application.getAttribute("myUser")).getName()%><br>
       密码:<%=((Users)application.getAttribute("myUser")).getPwd() %><br>
   --%>
   <%-- 
       用户名:<%=((Users)session.getAttribute("myUser")).getName()%><br>
       密码:<%=((Users)session.getAttribute("myUser")).getPwd() %><br>
   --%>
   <%-- 
       用户名:<%=((Users)request.getAttribute("myUser")).getName()%><br>
       密码:<%=((Users)request.getAttribute("myUser")).getPwd() %><br>
   --%>
   <% 
       String username = "";
       String password = "";
       if(pageContext.getAttribute("myUser")!=null )
       {
          username = ((Users)pageContext.getAttribute("myUser")).getName();
          password = ((Users)pageContext.getAttribute("myUser")).getPwd();
       }       
   %>    
       用户名:<%=username%><br>
       密码:<%=password%><br>   
  </body>

【注】<a href="url">标签是一次请求重定向,相当于重新发送了一次request,要想request域起作用,应该使用请求转发,即request.getRequestDispatcher(url).forward(request, response);

参考资料:慕课网【JAVA遇见HTML——JSP篇】http://www.imooc.com/learn/166





原文地址:https://www.cnblogs.com/sherryueda/p/4270400.html