




已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【7.1.1 JavaBean概述】純JSP開(kāi)發(fā)方式JSP+JavaBean開(kāi)發(fā)方式【7.1.2 JavaBean種類(lèi)】JavaBean : 支持組件的功能。Java中的組件叫JavaBean。Java(咖啡)Bean(豆)。狹義的JavaBean是具有一個(gè)界面形式的體現(xiàn);廣義的JavaBean是普通的Java類(lèi)。滿足兩點(diǎn)要求:(1)屬性名第一個(gè)字母都是小寫(xiě)的,private的;(2)一般具有g(shù)etters和setters方法。原因就是符合面向?qū)ο蟮奶匦?,所以屬性是私有的,別人不能訪問(wèn),從而隱藏細(xì)節(jié)。Getters是讀取屬性的值,setters是修改屬性的值。如果屬性只能讀不能改,那么只寫(xiě)getters方法即可。如果屬性只能改不能讀,那么只寫(xiě)setters方法即可。一般web中使用的JavaBean不具有圖形界面的表現(xiàn)。一般是用來(lái)實(shí)現(xiàn)某一業(yè)務(wù)邏輯或者取得特定結(jié)果。【例7.1】封裝郵箱地址的JavaBean【Email.java】package com.lyq.bean;import java.io.Serializable;public class Email implements Serializable / serialVersionUID 值private static final long serialVersionUID = 1L;/ Email地址private String mailAdd;/ 是否是一個(gè)標(biāo)準(zhǔn)的Email地址private boolean eamil;/* * 默認(rèn)無(wú)參的構(gòu)造方法 */public Email() /* * 構(gòu)造方法 * param mailAdd Email地址 */public Email(String mailAdd) this.mailAdd = mailAdd;/* * 是否是一個(gè)標(biāo)準(zhǔn)的Email地址 * return 布爾值 */public boolean isEamil() / 正則表達(dá)式,定義郵箱格式String regex = w+(-+.w+)*w+(-.w+)*.w+(-.w+)*; / matches()方法可判斷字符串是否與正則表達(dá)式匹配if (mailAdd.matches(regex) / eamil為真eamil = true;/ 返回eamilreturn eamil;public String getMailAdd() return mailAdd;public void setMailAdd(String mailAdd) this.mailAdd = mailAdd;【index.jsp】Insert title here郵箱認(rèn)證系統(tǒng)郵箱地址:【result.jsp】Insert title here%/ 獲取郵箱地址String mailAdd = request.getParameter(mailAdd);/ 實(shí)例化Email,并對(duì)mailAdd賦值Email email = new Email(mailAdd);/ 判斷是否是標(biāo)準(zhǔn)的郵箱地址if(email.isEamil()out.print(mailAdd + 是一個(gè)標(biāo)準(zhǔn)的郵箱地址!);elseout.print(mailAdd + 不是一個(gè)標(biāo)準(zhǔn)的郵箱地址!);%返回在地址欄輸入http:/localhost:8080/ch5_example/index.jsp得到得到【7.2.1 獲取JavaBean屬性信息】jsp:useBean在JSP中使用JavaBean。一般來(lái)說(shuō),JSP或者Servlet里面的JavaBean具有的特點(diǎn)是:(1) 屬性名第一個(gè)字母都是小寫(xiě)(2) 每個(gè)屬性有對(duì)應(yīng)的getter和setter方法。此外,Bean的特點(diǎn)還有:必須要有一個(gè)不帶參數(shù)的構(gòu)造器,在JSP元素創(chuàng)建Bean時(shí)會(huì)調(diào)用空構(gòu)造器。格式:【例】新建JavaBean:Produceget和set方法可以自動(dòng)生成。生成默認(rèn)的構(gòu)造器?!綪roduce.java】package com.lyq.bean;public class Produce private String name= 電吉他;private double price=1880.5;private int count=100;private String factoryAdd=山東濟(jì)南;public String getName() return name;public void setName(String name) = name;public double getPrice() return price;public void setPrice(double price) this.price = price;public int getCount() return count;public void setCount(int count) this.count = count;public String getFactoryAdd() return factoryAdd;public void setFactoryAdd(String factoryAdd) this.factoryAdd = factoryAdd;public Produce() 【index.jsp】Insert title here商品名稱(chēng):價(jià)格:數(shù)量:廠址:在地址欄輸入http:/localhost:8080/ch5_example/index.jsp得到加上表單部分【login.jsp】Insert title here添加產(chǎn)品信息名 稱(chēng):價(jià) 格:數(shù) 量:廠址:修改【index.jsp】Insert title here商品名稱(chēng):價(jià)格:數(shù)量:廠址:地址欄輸入http:/localhost:8080/ch5_example/login.jsp得到【補(bǔ)充說(shuō)明】1.id:使用這個(gè)JavaBean創(chuàng)建的一個(gè)對(duì)象名相當(dāng)于Produce produce = new Produce();2. 是標(biāo)簽語(yǔ)法。Produce produce = new Produce();是Java語(yǔ)法。3. scope默認(rèn)是pagetype是對(duì)象的類(lèi)型,如type=”java.lang.Object”相當(dāng)于Object cb = new Produce();一般情況下不指定type,則就是class類(lèi)型的對(duì)象。不存在父類(lèi)指向子類(lèi)對(duì)象的情況。4. 注意name指定的名稱(chēng)必須已經(jīng)有這個(gè)對(duì)象。這句話相當(dāng)于produce.setPrice(888)5. 相當(dāng)于produce.getPrice()6.jsp:useBean各個(gè)參數(shù)的含義:l id:對(duì)象實(shí)例名稱(chēng)l scope:Bean作用范圍,默認(rèn)是pagel class:Bean的類(lèi)名稱(chēng)l type:Bean實(shí)例類(lèi)型,可以是本類(lèi),或其父類(lèi),或其實(shí)現(xiàn)的接口,默認(rèn)為本類(lèi) (多態(tài))scope各個(gè)取值的含義:l page:僅涵蓋使用JavaBean的頁(yè)面。每次訪問(wèn)頁(yè)面時(shí),重新生成一個(gè)。【CounterBean.java】package bean;/JSP中使用JavaBean,要求這個(gè)Bean放在包里面。import java.io.Serializable;public class CounterBean implements Serializable private int count = 0; public CounterBean() public int getCount() count+; return count; public void setCount(int count) this.count = count; 【PageBean.jsp】 CounterBean scope=page Example count: 在地址欄輸入http:/localhost:8080/servlet_example1/PageBean.jsp,結(jié)果為刷新頁(yè)面,輸出內(nèi)容不變。l request:有效范圍僅限于使用JavaBean的請(qǐng)求【RequestBean.jsp】 CounterBean scope=request Example 【RequestBean2.jsp】 CounterBean scope=request Example count: 在地址欄輸入http:/localhost:8080/servlet_example1/RequestBean.jsp,結(jié)果為修改【RequestBean.jsp】 CounterBean scope=request Example 在地址欄輸入http:/localhost:8080/servlet_example1/RequestBean.jsp,結(jié)果為地址欄變?yōu)閔ttp:/localhost:8080/servlet_example1/RequestBean2.jsp,想想為什么?l session:有效范圍在用戶整個(gè)連接過(guò)程中,整個(gè)會(huì)話階段均有效【SessionBean.jsp】 CounterBean scope=session Example count: 【SessionBean2.jsp】 CounterBean scope=session Example count: 測(cè)試,在地址欄輸入http:/localhost:8080/servlet_example1/SessionBean.jsp,頁(yè)面顯示為:刷新后,count值不斷加1.l application:有效范圍涵蓋整個(gè)應(yīng)用程序,也就是對(duì)整個(gè)網(wǎng)站均有效。相當(dāng)于把Bean對(duì)象放在了ServletContext中?!続pplicationBean.jsp】 CounterBean scope=application Example count: 【ApplicationBean2.jsp】 CounterBean scope=application Example count: 在地址欄輸入http:/localhost:8080/servlet_example1/ApplicationBean.jsp,頁(yè)面顯示為刷新后,count值不斷加1。打開(kāi)另外一個(gè)瀏覽器頁(yè)面,觀察count值變化。當(dāng)訪問(wèn)http:/localhost:8080/servlet_example1/ApplicationBean2.jsp時(shí),count值會(huì)繼續(xù)加1.課堂練習(xí):設(shè)計(jì)一個(gè)用戶登錄頁(yè)面,將用戶登錄信息保存在User類(lèi)的對(duì)象中。要求對(duì)用戶登錄信息進(jìn)行合法性判斷(長(zhǎng)度、包含字符要求等),如果正確輸出用戶的信息,如果錯(cuò)誤給出相應(yīng)的提示。(使用jsp:useBean)【自學(xué)部分】注意:需要在web application的WEB-INF下的lib目錄下放置jdbc的驅(qū)動(dòng).ShowRs類(lèi)連接數(shù)據(jù)庫(kù):import java.io.IOException;import java.io.PrintWriter;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/* 在Servlet中直接連接數(shù)據(jù)庫(kù),并查詢顯示信息* 每個(gè)application都應(yīng)該有自己的驅(qū)動(dòng)包,放在各自項(xiàng)目的WEB-INF/lib/目錄下* author jukey*/public class ShowRs extends HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException Connection conn = null; Statement stmt = null; ResultSet rs = null; response.setContentType(text/html;charset=gb2312); PrintWriter out = response.getWriter(); out.println(); out.println(Content:); try Class.forName(com.mysql.jdbc.Driver); conn = DriverManager.getConnection(jdbc:mysql:/localhost/bbs?user=root&password=mysql); stmt = conn.createStatement(); String sql = select * from article; rs = stmt.executeQuery(sql); while(rs.next() out.println(); out.println( + rs.getString(cont) + ); out.println(); catch (SQLException ex) ex.printStackTrace(); catch (Exception ex) ex.printStackTrace(); finally if (rs != null) try rs.close(); rs = null; catch (SQLException sqlEx) sqlEx.printStackTrace(); if (stmt != null) try stmt.close(); stmt = null; catch (SQLException sqlEx) sqlEx.printStackTrace(); if (conn != null) try conn.close(); conn = null; catch (SQLException sqlEx) sqlEx.printStackTrace(); 連接數(shù)據(jù)庫(kù)時(shí)有很多重復(fù)的代碼,可以將這些代碼封裝到一個(gè)類(lèi)中,如DB.java,那么在Servlet中可以使用這個(gè)DB.java,就是在Servlet中使用JavaBean。DB.java中:getConn()getStatement()getResultSet()import java.sql.*;public class DB public static Connection getConn() Connection conn = null;try Class.forName(com.mysql.jdbc.Driver);/ 加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序conn = DriverManager.getConnection(jdbc:mysql:/localhost/mydata?user=root&password=root); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace();return conn;public static Statement getStatement(Connection conn) Statement stmt = null;try if (conn != null)stmt = conn.createStatement(); catch (SQLException e) e.printStackTrace();return stmt;public static ResultSet getResultSet(Statement stmt, String sql) /執(zhí)行一條SQL語(yǔ)句ResultSet rs = null;try if (stmt != null)rs = stmt.executeQuery(sql); catch (SQLException e) e.printStackTrace();return rs;public static void close(Connection conn) try if (conn != null) conn.close();conn = null; catch (SQLException e) e.printStackTrace();public static void close(ResultSet rs) try if (rs != null) rs.close();rs = null; catch (SQLException e) e.printStackTrace();public static void close(Statement stmt) try if (stmt != null) stmt.close();stmt = null; catch (SQLException e) e.printStackTrace();修改剛才的Servlet文件:TestDB.java文件:import java.io.IOException;import java.io.PrintWriter;import java.sql.*;import javax.servlet
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZGTX 27-2025 原生態(tài)雪域滑雪能力要求規(guī)范
- T-ZSM 0059-2024“領(lǐng)跑者”評(píng)價(jià)技術(shù)要求 數(shù)控圓鋸床
- 二零二五年度房屋租賃合同租賃雙方租賃期間租賃物租賃權(quán)法律適用協(xié)議
- 2025年度汽車(chē)行業(yè)代理招聘人才合作協(xié)議
- 2025年度餐廳員工勞動(dòng)合同試用期規(guī)定
- 鋼結(jié)構(gòu)合同補(bǔ)充協(xié)議(2025年度)安裝工程
- 二零二五年度危險(xiǎn)品車(chē)輛運(yùn)輸司機(jī)安全責(zé)任協(xié)議
- 2025年度食品飲料經(jīng)銷(xiāo)商授權(quán)及市場(chǎng)開(kāi)發(fā)協(xié)議
- 二零二五年度借車(chē)車(chē)輛損失免責(zé)合同
- 二零二五年度雙方個(gè)人教育培訓(xùn)合作協(xié)議
- 2025年湖南鐵道職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)附答案
- 個(gè)人車(chē)輛租賃給公司合同5篇
- 2025年上半年中國(guó)海油秋季校園招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 云南省勞動(dòng)合同范本
- 小學(xué)數(shù)學(xué)五年級(jí)下冊(cè)必考《質(zhì)數(shù)和合數(shù)》練習(xí)題(附質(zhì)數(shù)合數(shù)知識(shí)點(diǎn))
- 抗滑樁+預(yù)應(yīng)力錨索施工方案
- 2017版和2002版醫(yī)療器械分類(lèi)目錄對(duì)比完整版
- 飲水機(jī)濾芯更換記錄表
- 2021年廣州市事業(yè)單位《公共基礎(chǔ)知識(shí)》1000題必考題庫(kù)
- 養(yǎng)老保險(xiǎn)及職業(yè)年金相關(guān)解釋PPT課件
- 自動(dòng)控制理論52頻域:伯德圖
評(píng)論
0/150
提交評(píng)論