第八章 JavaBean技术与JSP开发模型

8.1 初识 JavaBean

8.1.1 什么是 JavaBean

JavaBean就是一个封装了需要重复使用的数据和功能的类。

JavaBean的规范:

它必须具有一个公共的、无参的构造方法,这个方法可以是编译器自动产生的默认构造方法。

它提供公共的setter方法和getter方法(至少提供其中一个),让外部程序设置和获取JavaBean属性。

8.1.2 访问 JavaBean 的属性
public String getName() {...}
public void setName() {...}

getName()方法:称为getter方法或者属性访问器,该方法以小写的get前缀开始,后跟属性名,属性名的第1个字母要大写。
setName()方法:称为setter方法或者属性修改器,该方法必须以小写的set前缀开始,后跟属性名,属性名的第1个字母要大写。

只读属性,只写属性,读写属性。

如果属性的类型为boolean,它的命名方式应该使用is/set,而不是get/set。

任务:通过jsp页面调用该对象验证用户的用户名和密码是否合法
public class User {
    private String username;
    private String password;
    public User() {
    }
    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }
    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 contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <form action="result.jsp" method="post">
    <table  align="center" width="250px" height="200px" border="1">
      <tr>
        <td colspan="2" align="center">
          <b>登陆页面</b>
        </td>
      </tr>
      <tr >
        <td>用户名:</td>
        <td>
          <input type="text" name="username">
        </td>
      </tr>
      <tr >
        <td>密 码:</td>
        <td>
          <input type="password" name="password">
        </td>
      </tr>
      <tr>
        <td colspan="2" align="center">
          <input type="submit">
        </td>
      </tr>
    </table>

  </form>
  </body>
</html>

result.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.xiao.User"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    String username = request.getParameter("username");
    String password = request.getParameter("password");

    User user = new User(username,password);
    if (user.getUsername().equals("zhangsan") && user.getPassword().equals("123")){
        out.print("恭喜您,登录成功");
    }else {
        out.print("请输入正确的用户名和密码");
    }
%>
<a href="index.jsp">返回</a>
</body>
</html>
8.1.3 BeanUtils 工具

可以实现动态访地问Java对象的属性。

需要的包:
	1. commons-beanutils.jar
	2. commons-logging.jar
img
任务:解决乱码
public class Email {
    private String title;
    private String context;
    public Email() {
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContext() {
        return context;
    }
    public void setContext(String context) {
        this.context = context;
    }
}
import java.io.UnsupportedEncodingException;
public class CharaterEncoding {
    public CharaterEncoding() {
    }
   public String toString(String str){
           String text ="";
           if(str!=null&&!"".equals(str)){
               try {
                   text = new String(str.getBytes("ISO-8859-1"),"UTF-8");
               } catch (UnsupportedEncodingException e) {
               }
           }
        return text;
    }
}
email.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="release.jsp" method="post">
    <table align="center" width="400px" height="260px" border="1">
        <tr>
            <td colspan="2" align="center">
               <b>邮件发送</b>
            </td>
        </tr>
        <tr>
            <td align="left">
               标题:<input type="text" name="title">
            </td>
        </tr>
        <tr>
            <td align="left">
                内容:<textarea name="context" cols="40" rows="7"></textarea>
            </td>
        </tr>
        <tr>
            <td colspan="2" align="center">
                <input type="submit" value="发送">
            </td>
        </tr>
    </table>
</form>
</body>
</html>
release.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<% request.setCharacterEncoding("utf-8");%>

<jsp:useBean id="email" class="com.xiao.Email"></jsp:useBean>
<jsp:setProperty name="email" property="*"></jsp:setProperty>
<div align="center">
          标题: <%=email.getTitle()%>
    <br/>
    <hr>
        内容:<%=email.getContext()%>
</div>
</body>
</html>

8.2 JSP开发模型

​ JSP的开发模型即JSP Model,在Web开发中,为了更方便地使用JSP技术,SUN公司为JSP技术提供了两种开发模型: JSP Model1和JSP Model2。JSP Model1简单轻便,适合小型Web项目的快速开发;JSPModel2模型是在JSPModel1的基础上提出的,它提供了更清晰的代码分层,更适用于多人合作开发的大型Web项目,实际开发过程中可以根据项目需求,选择合适的模型。接下来就针对这两种开发模型分别进行详细介绍。

8.2.1 JSP Model1

​ 在讲解JSP Model1前,先来了解一下JSP开发的早期模型。
在这里插入图片描述

​ JSP Model1 采用 JSP + JavaBean 的技术,将页面显示和业务逻辑分开。其中,JSP 实现流程控制和页面显示,JavaBean 对象封装数据和业务逻辑
​ 接下来通过一张图来描述 JSPModel1 的工作原理,如图所示。
在这里插入图片描述

​ JSPModel1 模型将封装数据和处理数据的业务逻辑交给了 JavaBean 组件,JSP只负责接收用户请求和调用 JavaBean 组件来响应用户的请求。这种设计实现了数据、业务逻辑和页面显示的分离,在一定程度上实现了程序开发的模块化,降低了程序修改和维护的难度。

8.2.2 JSP Model2

​ JSP Model2架构模型采用 JSP + Servlet + JavaBean 的技术,此技术将原本 JSP 页面中的流程控制代码提取出来,封装到 Servlet 中,从而实现了整个程序页面显示、流程控制和业务逻辑的分离。实际上,JSP Model2 模型就是 MVC (模型Model - 视图View - 控制器Controller)设计模式。其中,控制器的角色是由 Servlet 实现的,视图的角色是由 JSP 页面实现的,模型的角色是由 JavaBean 实现的。JSP Model2的工作原理
在这里插入图片描述

8.3 MVC 设计模式

​ MVC 设计模式,它是施乐帕克研究中心在 20 世纪 80 年代为编程语言 Smalltalk–80 发明的一种软件设计模式,提供了一种按功能对软件进行模块划分的方法。MVC 设计模式将软件程序分为 3 个核心模块:模型( Model ) 视图( View ) 和 控制器( Controller ),这3个模块的作用如下所示。

1.模型

​ 模型(Model) 负责管理应用程序的业务数据、定义访问控制以及修改这些数据的业务规则。当模型的状态发生改变时,它会通知视图发生改变,并为视图提供查询模型状态的方法。

2.视图

​ 视图(View) 负责与用户进行交互,它从模型中获取数据向用户展示,同时也能将用户请求传递给控制器进行处理。当模型的状态发生改变时,视图会对用户界面进行同步更新,从而保持与模型数据的一致性。

3.控制器

​ 控制器( Controller ) 是负责应用程序中处理用户交互的部分,它负责从视图中读取数据,控制用户输入,并向模型发送数据。8.1 Filter 过滤器

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值