JavaWeb-JavaBean

序言

JavaBean就是一个普通的java类,里面只有封装数据,没有任何业务逻辑代码。
也称之为简单Java对象–POJO(Plain Ordinary Java Object),是Java程序设计中一种设计模式,是一种基于 Java 平台的软件组件思想。

JavaBean遵循着特定的写法,通常有以下的规则:

有无参的构造函数
成员属性私有化
封装的属性如果需要被外所操作,必须编写public类型的setter、getter方法

上面的文字看起来好像很高大上,javaBean其实非常简单,下面的代码就是按照特定写法、规则编写的一个JavaBean对象:

public class Person { 

   private String username ; 
   private int age; 

   public Person() { } 
   public String getUsername() { 
       return username; 
   } 
   public void setUsername(String username) { 
       this.username = username; 
   } 
   public int getAge() { 
       return age; 
   } 
   public void setAge(int age) { 
       this.age = age; 
   } 
}

  JavaBean在J2EE开发中,通常用于封装数据,对于遵循以上写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象,并且通过反射那些遵守命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。

1、为什么需要使用JavaBean

使用JavaBean的好处就是:封装,重用,可读

下面引用知乎一段回答:

  JaveBean你可以理解为一辆货车,在你的Java端和web页面进行数据传递的载体,你当然可以每个变量单独传递,或者使用集合传递,但是javabean可以使你的数据更有可读性,方便开发时明确变量的意义,也使其他阅读你代码的人能直接你的意图。如果把bean类与数据库联合使用,一张表使用bean类,可以使你的代码更加简洁高效,易于理解,现在大多数框架都会使用这种机制。

2、JSP行为–JavaBean

JSP技术提供了三个关于JavaBean组件的动作元素,即JSP行为(标签),它们分别为:

<jsp:useBean>    【在JSP页面中查找javaBean对象或者实例化javaBean对象】
<jsp:setProperty>【设置javaBean的属性】
<jsp:getProperty>【获取javaBean的属性】

(1) jsp:useBean

<jsp:useBean>标签用于在指定的域范围内查找指定名称的JavaBean对象存在则直接返回该JavaBean对象的引用。不存在则实例化一个新的JavaBean对象并将它以指定的名称存储到指定的域范围中。

语法:

<jsp:useBean id="实例化对象的名称" class="类的全名" scope="保存范围"/>

如果JSP不支持<jsp:useBean>这个行为,我们要使用Person类是这样使用的:
这里写图片描述
效果如下:
这里写图片描述
我们使用<jsp:useBean>就显得非常简洁,不用导包,不用new出对象:
这里写图片描述
也可以达到同样的效果:
这里写图片描述
有人可能会想,凭什么写一个<jsp:useBean>这样的代码就可以创建出一个对象出来?现在我把JavaBean中无参的构造函数改成有参的,我们看看会出现什么情况,出现异常了
这里写图片描述
原因:
这里写图片描述

(2) jsp:setProperty

语法:

 <jsp:setProerty name="对象名称" property="属性名" param="参数名" value="值">

在语法上可分为4种模式

<jsp:setProperty name="对象名称" property="*" />  自动匹配
<jsp:setProperty name="对象名称" property="属性名称"/>  指定属性
<jsp:setProperty name="对象名称" property="属性名称" param="参数名称"/> 指定参数【很少用】
<jsp:setProperty name="对象名称" property="属性名称" value="内容"/> 指定内容【很少用】

当我们没有学习到<jsp:setProperty>时,我们获取表单的信息,然后导入到javaBean对象中是这样的一种情况:
这里写图片描述
这是可以完成的,但是相对来说,比较麻烦!
这里写图片描述
我们来使用<jsp:setProperty>看看:
这里写图片描述
代码更少可以直观看出来,为什么我说它功能更加强大呢?表单提交过来的数据都是字符串,在我们没有用<jsp:setProperty>前,我们存储设置int类型或其他非字符串类型的数据是需要强转的!但是<jsp:setProperty>不需要我们强转,它内部自动帮我们转换了

我们再来使用一下自动匹配来感受它的强大之处吧:
这里写图片描述
看到这里,有人可能会觉得好神奇:只要设置property的值就可以将表单传递过来的数据封装到JavaBean对象中了!这究竟是这样做到的???

细心的朋友会发现,JavaBean的属性名称和表单的name属性设置的名称是一模一样的
这里写图片描述
我们再来看看还能不能把表单的数据完整地封装JavaBean对象中
这里写图片描述

(3) jsp:getProperty

语法:

<jsp:getProperty name="对象名" property="属性名"/>

该jsp行为十分简单,我们来使用一下就知道了。

<%--使用<jsp:getProperty>输出--%>

<jsp:getProperty name="person" property="username"/>

<jsp:getProperty name="person" property="age"/>

这里写图片描述


3、JavaBean-JSP-Servlet

MVC是三个单词的缩写:

M——Model(模型)——JavaBean;
V——View (视图)——JSP;
C——Control(控制)——Servlet。

MVC模式的目的就是实现Web系统的职能分工。

1、Model层:实现系统的业务逻辑(JavaBean)
2、View层: 负责与用户交互,即在界面上展示数据对象给用户(html,jsp)
3、Control层:Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作(Servlet)。

下面通过一个登录的实例体现MVC:
这里写图片描述
其中,login.jsp为登录页面;succes.jsp为登陆成功页面;unsuccessful.jsp为登录失败页面。

login.jsp:

<body>
    <center>
      <form action="UserServlet" method="post">
        <h4>登录</h4>
        <hr/>
              姓名:<input type="text" name="username"/><br/>
              密码:<input type="password" name="password"/><br/>
        <input type="submit" value="提交"/> 
      </form>
    </center>
  </body>

success.jsp:

<body>
    <center>
      <h3>登陆成功</h3>
      <a href="<%=path %>/login.jsp">后退</a>
    </center>
  </body>

unsuccessful.jsp:

<body>
    <center>
      <h3>登陆失败</h3>
      <a href="<%=path %>/login.jsp">后退</a>
    </center>
  </body>

UserServlet.java(获取视图层传过来的参数,并传给模型层,待模型层判断后调转到相应的页面):

package com.mvc.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.mvc.javaBean.User;

public class UserServlet extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub

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

        User user = new User();
        if(user.validatorUser(userName, password)){
            response.sendRedirect("success.jsp");
        }
        else{
            response.sendRedirect("unsuccessful.jsp");
        }
    }

}

User.java(实现业务逻辑,即验证用户名与密码是否正确,在这里仅仅是验证字符串是否相等,姓名与密码都为“admin”时,登陆成功,也可以加上数据库连接代码) :

package com.mvc.javaBean;

public class User {

    public boolean validatorUser(String username, String password){
        if(username.equals("admin") && password.equals("admin")){
            return true;
        }
        else{
            return false;
        }
    }   
}

下面是web.xml的配置 :

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>MVC</display-name>
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>UserServlet</servlet-name>
    <servlet-class>com.mvc.servlet.UserServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>UserServlet</servlet-name>
    <url-pattern>/UserServlet</url-pattern>
  </servlet-mapping>
</web-app>

下面是具体演示:
这里写图片描述
在该实例中

Model层:User.java
View层:ogin.jsp;succes.jsp;unsuccessful.jsp
Control层:UserServlet.java

更具体的MVC实例:https://blog.csdn.net/QQ519423035/article/details/77006829


猜你喜欢

转载自blog.csdn.net/weixin_39190897/article/details/82594976
今日推荐