JAVA遇见HTML—JSP篇(四.JavaBean)

JavaBean简介及设计原则

Javabeans就是符合某种特定的规范的Java类。使用Javabeans的好处是解决代码重复编写,减少代码冗余,功能区分明确,提高了代码的维护性。

这里写图片描述

例如下面的学生类 ,就是符合Javabeans的设计原则的Javabeans类

这里写图片描述

什么是JSP动作元素

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

第一类是与存取JavaBean有关的,包括:

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

第二类是JSP1.2就开始有的基本元素,包括6个动作元素

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

第三类是JSP2.0新增加的元素,主要与JSP Document有关,包括六个元素

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

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

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

第五类是JSP2.0新增的动作元素,主要是用在Tag File中,有2个元素

<jsp:invoke><jsp:dobody>

使用普通方式创建JavaBean

在Jsp页面中如何使用Javabeans

1.像使用普通java类一样,创建javabean实例

新建工程

这里写图片描述

Users类

package com.po;

/*
 * 用户类
 * 
 */
public class Users {
  private String username;//用户名
  private String password;//密码

  //保留此默认的构造方法
  public Users() {

  }

public String getUsername() {
    return username;
}

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

public String getPassword() {
    return password;
}

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


}

index.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="com.po.Users" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
   <%
     Users user = new Users();
     user.setUsername("admin");//设置用户名
     user.setPassword("123456");//设置密码

   %>
   <h1>使用普通方式创建javabean的实例</h1>
   <hr>
   用户名:<%=user.getUsername() %><br>
   密码:<%=user.getPassword() %><br>
</body>
</html>

2.在Jsp页面中通常使用jsp动作标签使用javabean。

userBeans动作

<jsp:userBeans>

作用:在jsp页面中实例化或者在指定范围内使用javabean:

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

setProperty动作

<jsp:setProperty>

作用:给已经实例化的Javabean对象的属性赋值,一共有四种形式

<jsp:setProperty name="JavaBean实例名" property="*" /> (跟表单关联)
<jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" /> (跟表单关联)
<jsp:setProperty name="JavaBean实例名" property="JavaBean属性名" value="BeanValue" />(手工设置)
<jsp:setProperty name="JavaBean实例名" property="propertyName" param="request对象中的参数名 " />(跟request参数关联)

代码示例:

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <h1>系统登录</h1>
  <hr>
  <form name="loginForm" action="dologin.jsp?mypass=999999" method="post">
    <table>
      <tr>
        <td>用户名:</td>
        <td><input type="text" name="username" value=""/></td>
      </tr>

      <tr>
        <td>密码:</td>
        <td><input type="password" name="password" value="" /></td>
      </tr>

      <tr>
        <td colspan="2" align="center"><input type="submit" value="登录" /></td>
      </tr>
    </table>
  </form>
</body>
</html>

dologin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <jsp:useBean id="myUsers" class="com.po.Users" scope="page"></jsp:useBean>
    <h1>setProperty动作元素</h1>
    <hr>
    <!-- 根据表单自动匹配所有的属性 -->
   <%--  <jsp:setProperty name="myUsers" property="*" /> --%>

    <!-- 根据表单匹配部分的属性 -->
    <%-- <jsp:setProperty property="username" name="myUsers"/> --%>

    <!-- 跟表单匹无关,通过手工赋值给属性 -->
    <%-- <jsp:setProperty property="username" name="myUsers" value="Lisi"/>
    <jsp:setProperty property="password" name="myUsers" value="888888"/> --%>

    <!-- 通过URL传参数给属性赋值 -->
    <jsp:setProperty property="password" name="myUsers" param="mypass" />

    用户名:<%=myUsers.getUsername()%><br> 
    密码:<%=myUsers.getPassword()%><br>
</body>
</html>

getProperty动作

<jsp:getProperty>

作用:获取指定Javabean对象的属性值

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

代码示例:

修改dologin.jsp

    <!-- 使用传统的表达式方式来获取用户名和密码 -->
    <%-- 用户名:<%=myUsers.getUsername()%><br> 
    密码:<%=myUsers.getPassword()%><br> --%>

    <!-- 使用getProperty方式来获取用户名和密码 -->
    用户名:<jsp:getProperty property="username" name="myUsers"/> <br>
    密码:<jsp:getProperty property="password" name="myUsers"/> <br>

JavaBean四个作用域范围

说明:使用userBeans的scope属性可以用来指定javabean的作用范围。

application //可以通过application.getAttribute()方法取得Javabean对象。

代码示例
login.jsp页面保持原代码
修改dologin.jsp页面 scope=”application” ,并添加一个超链接
<a href="testScope.jsp">测试javabean的四个作用域范围</a>

dologin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <jsp:useBean id="myUsers" class="com.po.Users" scope="application"></jsp:useBean>
    <h1>setProperty动作元素</h1>
    <hr>
    <!-- 使用getProperty方式来获取用户名和密码 -->
    用户名:<jsp:getProperty property="username" name="myUsers"/> <br>
    密码:<jsp:getProperty property="password" name="myUsers"/> <br>

    <br>
    <br>
      <a href="testScope.jsp">测试javabean的四个作用域范围</a>
</body>
</html>

testScope.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="com.po.Users" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>JavaBean的四个作用域范围</h1>
    <hr>
    <jsp:useBean id="myUsers" class="com.po.Users" scope="application"></jsp:useBean>

    用户名:<jsp:getProperty property="username" name="myUsers" />
    <br> 
    密码:<jsp:getProperty property="password" name="myUsers" />
    <br>

    <!-- 使用内置对象获取用户名和密码 -->
    <hr>
    用户名:<%=((Users)application.getAttribute("myUsers")).getUsername() %>
    <br> 
    密码:<%=((Users)application.getAttribute("myUsers")).getPassword() %>
    <br>
</body>
</html>

session //可以通过HttpSession.getAttribute()方法取得JavaBean对象。

代码示例
修改dologin.jsp页面 scope=”session”

<jsp:useBean id="myUsers" class="com.po.Users" scope="session"></jsp:useBean>

修改testScope.jsp页面

<jsp:useBean id="myUsers" class="com.po.Users" scope="session"></jsp:useBean>
    用户名:<%=((Users)session.getAttribute("myUsers")).getUsername() %>
    <br> 
    密码:<%=((Users)session.getAttribute("myUsers")).getPassword() %>

request //可以通过HtppRequest.getAttribute()方法取得JavaBean对象。

代码示例
修改dologin.jsp页面 scope=”request”

<jsp:useBean id="myUsers" class="com.po.Users" scope="request"></jsp:useBean>

修改testScope.jsp页面

<jsp:useBean id="myUsers" class="com.po.Users" scope="request"></jsp:useBean>
    用户名:<%=((Users)request.getAttribute("myUsers")).getUsername() %>
    <br> 
    密码:<%=((Users)request.getAttribute("myUsers")).getPassword() %>

这里写图片描述

我们发现获取不到用户名和密码了,原因是dologin.jsp下面的超链接相当于请求重定向,相当于在dologin.jsp当中重新发起了一次请求。所以testScope.jsp并没有myUsers的javabean对象实例。
那么如何使用session的作用域来获取呢,我们就不能使用请求重定向了,需要使用服务器的内部转发。

我们修改dologin.jsp文件

<br>
      <a href="testScope.jsp">测试javabean的四个作用域范围</a>
      <%
        request.getRequestDispatcher("testScope.jsp").forward(request, response);
      %>

经过测试,可以获取到。

page //仅在当前页面有效

修改dologin.jsp页面 scope=”page”

<jsp:useBean id="myUsers" class="com.po.Users" scope="page"></jsp:useBean>

修改testScope.jsp文件

<%
      String username="";
      String password="";
      if(pageContext.getAttribute("myUsers")!=null){
          username=((Users)pageContext.getAttribute("myUsers")).getUsername();
          password=((Users)pageContext.getAttribute("myUsers")).getPassword();
      }
    %>
    用户名:<%=username %>
    <br> 
    密码:<%=password %>

那么,testScope页面是无论如何都获取不到的。

Model1简介

Model1模型出现前,整个Web应用的情况:几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应。

弊端:在界面层充斥着大量的业务逻辑的代码和数据访问层的代码,Web程序的可拓展性和可维护性非常差。

Javabean的出现可以使jsp页面中使用Javabean封装的数据或者调用Javabean的业务逻辑代码,这样大大提升了程序的可维护性。

Model1就是Jsp + JavaBean

这里写图片描述

阶段项目:

使用Jsp + javabean完成用户登录功能

在上一篇文章中JAVA遇见HTML—JSP篇(三.JSP内置对象)
的最后的阶段项目中,我们实现了项目效果。现在我们在其基础上进行修改。

这里写图片描述

创建com.po包,Users.java类

package com.po;

//用户类
public class Users {

    private String username;
    private String password;

    public Users() {

    }

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

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

创建com.dao包,UsersDAO.java类

package com.dao;

import com.po.Users;
//用户逻辑类
public class UsersDAO {

    //用户登录方法
    public boolean usersLogin(Users u) {
        if("admin".equals(u.getUsername()) && "admin".equals(u.getPassword())) {
            return true;
        }else {
            return false;
        }
    }
}

修改dologin.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<% 
  request.setCharacterEncoding("utf-8");
%>

<jsp:useBean id="loginUser" class="com.po.Users" scope="page"></jsp:useBean>
<jsp:useBean id="userDAO" class="com.dao.UsersDAO" scope="page"></jsp:useBean>
<jsp:setProperty property="*" name="loginUser"/>
<%
  String username="";
  String password="";
  request.setCharacterEncoding("utf-8");//防止中文乱码

  username = request.getParameter("username");
  password = request.getParameter("password");

  //如果用户和密码都等于admin,则登录成功
  if(userDAO.usersLogin(loginUser)){
      System.out.println("成功");
      session.setAttribute("loginUser", loginUser.getUsername());
      request.getRequestDispatcher("login_success.jsp").forward(request,response);
  }else{
      System.out.println("失败");

      response.sendRedirect("login_failure.jsp");
  }
%>

其他页面不动。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值