Java Web 基礎(chǔ) - JavaBean

JavaBean 就是符合某種特定的規(guī)范的 Java 類。使用 JavaBean 的好處是解決代碼重復(fù)編寫的問題,減少代碼冗余合愈,功能區(qū)分明確,提高了代碼的可維護(hù)性击狮。

JavaBeans 設(shè)計(jì)原則:

  • 公有類
  • 無參的公有構(gòu)造方法
  • 私有屬性
  • getter 和 setter 方法
public class Students {
    private String name;
    public Students() {}
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return this.Name;
    }
}

JSP 動(dòng)作元素

動(dòng)作元素是遵循 XML 語法的標(biāo)簽(有一個(gè)包含元素名的開始標(biāo)簽佛析,可以有屬性、可選的內(nèi)容彪蓬、與開始標(biāo)簽匹配的結(jié)束標(biāo)簽)寸莫,動(dòng)作元素為請求處理階段提供信息,有以下分類:


動(dòng)作元素

使用 JavaBeans 創(chuàng)建對象

public class Users {
    private String username;  // 用戶名
    private String password;  // 密碼
    
    public Users() {}  // 保留此默認(rèn)的構(gòu)造方法

    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;
    }
}

使用 new 關(guān)鍵字創(chuàng)建

在 JSP 中使用

<%@ page import="com.po.Users" %>
...
<body>
    <%
        Users user = new Users();
        user.setUsername("admin"); //設(shè)置用戶名
        user.setPassword("123456");//設(shè)置密碼
    %>
    用戶名:<%=user.getUsername() %><br>
    密碼:<%=user.getPassword() %><br>
</body>

使用 JavaBeans 動(dòng)作標(biāo)簽創(chuàng)建

<body>
    <jsp:useBean id="myUsers" class="com.po.Users" scope="page"/>
    用戶名:<%=myUsers.getUsername() %><br>
    密碼:<%=myUsers.getPassword() %><br>
</body>

getProperty 與 setProperty

login.jsp

<body>
    <h1>系統(tǒng)登錄</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>

dologin.jsp

<body>
    <jsp:useBean id="myUsers" class="com.po.Users" scope="page"/>
    <h1>setProperty動(dòng)作元素</h1>
    <hr>

    <!--根據(jù)表單自動(dòng)匹配所有的屬性 -->
    <%--
        <jsp:setProperty name="myUsers" property="*"/>
    --%>

    <!--根據(jù)表單匹配所有部分的屬性 -->
    <%--
        <jsp:setProperty name="myUsers" property="username"/>
    --%>

    <!--跟表單無關(guān)档冬,通過手工賦值給屬性 -->
    <%--
        <jsp:setProperty name="myUsers" property="username" value="lisi"/>
        <jsp:setProperty name="myUsers" property="password" value="888888"/>
    --%>

    <!--通過URL傳參數(shù)給屬性賦值 -->
    <jsp:setProperty name="myUsers" property="username"/>
    <jsp:setProperty name="myUsers" property="password" param="mypass"/>

    <!-- 使用傳統(tǒng)的表達(dá)式方式來獲取用戶名和密碼 -->
    <%--
        用戶名:<%=myUsers.getUsername() %><br>
        密碼:<%=myUsers.getPassword() %><br>
    --%>

    <!-- 使用getProperty方式來獲取用戶名和密碼 -->
    用戶名:<jsp:getProperty name="myUsers" property="username"/><br>
    密碼:<jsp:getProperty name="myUsers" property="password"/><br>
    <a href="testScope.jsp">測試JavaBean的四個(gè)作用域范圍</a>
    <% request.getRequestDispatcher("testScope.jsp").forward(request, response);%>
</body>

四個(gè)作用域范圍

使用 <jsp:useBean> 時(shí)的 scope 屬性可以指定 JavaBean 的作用范圍:

  • page:僅在當(dāng)前頁面有效膘茎;
  • request:可通過 HttpRequest.getAttribute() 方法取得 JavaBean對象;
  • session:可通過 HttpSession.getAttribute() 方法取得 JavaBean對象酷誓;
  • application:可通過 application.getAttribute()方法取得 JavaBean對象披坏。
<body>
    <jsp:useBean id="myUsers" class="com.po.Users" scope="page"/>
    用戶名:
    <jsp:getProperty name="myUsers" property="username"/>
    <br>
    密碼:
    <jsp:getProperty name="myUsers" property="password"/>
    <br>
    <!-- 使用內(nèi)置對象獲取用戶名和密碼 -->
    <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>

Model 1

  • Model 1 出現(xiàn)之前,整個(gè) Web 應(yīng)用幾乎都是由 JSP 組成(負(fù)責(zé)接收處理客戶端請求盐数、對請求處理后做出相應(yīng))刮萌,界面層充斥著大量的業(yè)務(wù)邏輯代碼和數(shù)據(jù)訪問代碼,Web 程序的可維護(hù)性和可擴(kuò)展性很差娘扩;
  • Model 1 即 JavaBean + JSP 的開發(fā)模式着茸,JavaBean 的出現(xiàn)使 JSP 頁面中使用 JavaBean 封裝的數(shù)據(jù)或調(diào)用 JavaBean 的業(yè)務(wù)邏輯代碼壮锻,大大提升程序可維護(hù)性(避免在 JSP 中處理業(yè)務(wù)邏輯)。


    Model 1

JavaBean + JSP 實(shí)現(xiàn)用戶登錄

po/Users.java

// 用戶類
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;
    }
}

dao/UsersDAO.java

// 用戶的業(yè)務(wù)邏輯類
public class UsersDAO {

    // 用戶登錄方法
    public boolean usersLogin(Users u) {
        return "admin".equals(u.getUsername()) && "admin".equals(u.getPassword());
    }
}

dologin.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %>

<% request.setCharacterEncoding("utf-8"); %>
<jsp:useBean id="loginUser" class="com.po.Users" scope="page"/>
<jsp:useBean id="userDAO" class="com.dao.UsersDAO" scope="page"/>
<jsp:setProperty property="*" name="loginUser"/>

<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";

    //如果用戶和密碼都等于admin,則登錄成功
    if (userDAO.usersLogin(loginUser)) {
        session.setAttribute("loginUser", loginUser.getUsername());
        request.getRequestDispatcher("login_success.jsp").forward(request, response);
    } 
    else {
        response.sendRedirect("login_failure.jsp");
    }
%>

login.jsp

<body>
    <div id="container">
        <div class="logo">
            <a href="#"><img src="assets/logo.png" alt=""/></a>
        </div>
        <div id="box">
            <form action="dologin.jsp" method="post">
                <p class="main">
                    <label>用戶名: </label><input name="username" value=""/>
                    <label>密碼: </label><input type="password" name="password" value="">
                </p>
                <p class="space">
                    <input type="submit" value="登錄" class="login" style="cursor: pointer;"/>
                </p>
            </form>
        </div>
    </div>
</body>

login_failure.jsp

<body>
    <div id="container">
        <div class="logo">
            <a href="#"><img src="assets/logo.png" alt=""/></a>
        </div>
        <div id="box">
            登錄失斾汤猜绣!請檢查用戶或者密碼!<br>
            <a href="login.jsp">返回登錄</a>
        </div>
    </div>
</body>

login_success.jsp

<body>
    <div id="container">
        <div class="logo">
            <a href="#"><img src="assets/logo.png" alt=""/></a>
        </div>
        <div id="box">
            <%
                String loginUser = "";
                if (session.getAttribute("loginUser") != null) {
                    loginUser = session.getAttribute("loginUser").toString();
                }
            %>
            歡迎您<font color="red"><%=loginUser%></font>,登錄成功!
        </div>
    </div>
</body>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敬特,一起剝皮案震驚了整個(gè)濱河市掰邢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伟阔,老刑警劉巖辣之,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異皱炉,居然都是意外死亡怀估,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門合搅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來多搀,“玉大人,你說我怎么就攤上這事灾部】得” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵赌髓,是天一觀的道長从藤。 經(jīng)常有香客問我,道長锁蠕,這世上最難降的妖魔是什么夷野? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮匿沛,結(jié)果婚禮上扫责,老公的妹妹穿的比我還像新娘榛鼎。我一直安慰自己逃呼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布者娱。 她就那樣靜靜地躺著抡笼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪黄鳍。 梳的紋絲不亂的頭發(fā)上推姻,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機(jī)與錄音框沟,去河邊找鬼藏古。 笑死增炭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拧晕。 我是一名探鬼主播隙姿,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼厂捞!你這毒婦竟也來了输玷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤靡馁,失蹤者是張志新(化名)和其女友劉穎欲鹏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臭墨,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赔嚎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了裙犹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尽狠。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖叶圃,靈堂內(nèi)的尸體忽然破棺而出袄膏,到底是詐尸還是另有隱情,我是刑警寧澤掺冠,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布沉馆,位于F島的核電站,受9級特大地震影響德崭,放射性物質(zhì)發(fā)生泄漏斥黑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一眉厨、第九天 我趴在偏房一處隱蔽的房頂上張望锌奴。 院中可真熱鬧,春花似錦憾股、人聲如沸鹿蜀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茴恰。三九已至,卻和暖如春斩熊,著一層夾襖步出監(jiān)牢的瞬間往枣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留分冈,地道東北人圾另。 一個(gè)月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像雕沉,于是被迫代替她去往敵國和親盯捌。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 目錄結(jié)構(gòu) Tomcat 主程序目錄結(jié)構(gòu): /bin:啟動(dòng)和停止 Tomcat 的命令文件 /conf:配置文件 /...
    千反田愛瑠愛好者閱讀 447評論 0 0
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架蘑秽,建立于...
    Hsinwong閱讀 22,394評論 1 92
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法饺著,類相關(guān)的語法,內(nèi)部類的語法肠牲,繼承相關(guān)的語法幼衰,異常的語法,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • 每個(gè)人的命運(yùn)都不同缀雳,一個(gè)人父親早逝渡嚣,母親得癌,自己也得重病肥印。福無雙至识椰,禍不單行!還有一個(gè)人大學(xué)遍出國旅游深碱,無憂無慮...
    東兒飛閱讀 171評論 0 0
  • js中的數(shù)據(jù)類型 基本數(shù)據(jù)類型(值類型)number: 數(shù)字string: 字符串boolean: 布爾null:...
    uplyw閱讀 134評論 0 0