孫雅雯
摘 ?要: 目前Java教學(xué)中存在偏重理論知識(shí)的現(xiàn)象,在指導(dǎo)學(xué)生完成一個(gè)完整的項(xiàng)目時(shí)沒(méi)有根據(jù)項(xiàng)目的實(shí)際需求來(lái)搭建項(xiàng)目架構(gòu)、建立數(shù)據(jù)庫(kù)。針對(duì)這一教學(xué)現(xiàn)狀,基于MVC編程模式和項(xiàng)目架構(gòu)的規(guī)范化,結(jié)合項(xiàng)目實(shí)際需求進(jìn)行分析,通過(guò)對(duì)業(yè)務(wù)邏輯分析和簡(jiǎn)單的B/S模式編程案例的學(xué)習(xí),進(jìn)行代碼的理解、分析,對(duì)理論知識(shí)和實(shí)際項(xiàng)目的操作做一個(gè)銜接,讓學(xué)生能夠?qū)W會(huì)運(yùn)用書(shū)本上的知識(shí),從而提高其Java 程序設(shè)計(jì)的綜合能力。
關(guān)鍵詞: Java 程序設(shè)計(jì); B/S模式編程案例分析; MVC編程模式; 理論和實(shí)際的銜接
中圖分類號(hào):TP311.1 ? ? ? ? ?文獻(xiàn)標(biāo)志碼:A ? ? 文章編號(hào):1006-8228(2014)12-48-02
Case study of Java programming based on B/S mode
Sun Yawen
(The Information Center of Nanjing University of Technology, Nanjing, Jiangsu 210009, China)
Abstract: The current Java teaching only focuses on theoretical knowledge, which doesn't guide students to set up the project structure and the database according to the actual need of the project. Based on the MVC mode and standardization of project structure, the actual requirements of the project are analyzed. Through analyzing the business logic and studying on the simple case of B/S mode programming, code is comprehended and analyzed, theoretical knowledge and practical operation are connected. It enables the students to understand how to use the programming knowledge from books, which will improve their comprehensive ability of Java programming.
Key words: Java programming; B/S model programming case analysis; MVC programming model; the connection between theoretical knowledge and practical project
0 引言
Java是一種可以撰寫(xiě)跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,具有卓越的高效性、安全性、通用性和平臺(tái)移植性,因此被廣泛應(yīng)用于個(gè)人PC、網(wǎng)站平臺(tái)、數(shù)據(jù)管理等一系列系統(tǒng)開(kāi)發(fā)中。Java的廣泛應(yīng)用使Java人才的需求量也越來(lái)越大,許多高校的計(jì)算機(jī)專業(yè)將Java程序設(shè)計(jì)語(yǔ)言作為主要課程。盡管如此,在IT行業(yè)中往往還是很難招聘到合格的Java工作人員[1]。高校在Java教學(xué)中沒(méi)能將理論與實(shí)際項(xiàng)目緊密聯(lián)系起來(lái)是一個(gè)重要原因。因此,本文探討了Java編程案例。
1 MCV編程模式
MVC是一種多層的設(shè)計(jì)創(chuàng)建Web應(yīng)用程序的模式,其目的在于將應(yīng)用程序的輸入、處理和輸出分開(kāi)[2]。
Model是指業(yè)務(wù)模型,表示數(shù)據(jù)和業(yè)務(wù)處理。模型持有所有的數(shù)據(jù)、狀態(tài)和程序邏輯。模型與數(shù)據(jù)格式?jīng)]有關(guān)系,能為多個(gè)視圖提供數(shù)據(jù)。例如Java Bean。
View指用戶看到并與之交戶的界面,顯示數(shù)據(jù)庫(kù)記錄,最典型的就是JSP、HTML。
Controller是指控制器,是應(yīng)用程序中處理用戶交互的部分。負(fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)[3]。例如servlet、action。
MVC分層有助于管理復(fù)雜的應(yīng)用程序,同時(shí)也讓?xiě)?yīng)用程序的測(cè)試更加容易。
2 邏輯分析
2.1 B/S模式
B/S(Browser/Server)是瀏覽器和服務(wù)器結(jié)構(gòu),它是建立在廣域網(wǎng)、瀏覽器之上的,主要事物邏輯在服務(wù)器端(Server)實(shí)現(xiàn),只有極少部分在前端(Browser)實(shí)現(xiàn)。所以不論時(shí)間、地點(diǎn)、人物,以何種方式接入,只要網(wǎng)站允許,都可以訪問(wèn)。而用戶和網(wǎng)站的交互實(shí)質(zhì)上就是訪問(wèn)并且操作數(shù)據(jù)庫(kù)的過(guò)程,整個(gè)網(wǎng)站程序只是將數(shù)據(jù)庫(kù)里面的數(shù)據(jù)用一種用戶更能接受的形式表現(xiàn)出來(lái),再?gòu)挠脩舻目刹僮餍猿霭l(fā),讓用戶通過(guò)瀏覽器頁(yè)面就可簡(jiǎn)單輕松地對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。
2.2 過(guò)程分析
首先,我們需要連接數(shù)據(jù)庫(kù),按照項(xiàng)目需求建立許多張表,并且知道每張表的結(jié)構(gòu)和聯(lián)系,然后考慮如何對(duì)數(shù)據(jù)庫(kù)進(jìn)行具體操作。將需要對(duì)數(shù)據(jù)庫(kù)中的表進(jìn)行的各種操作都用SQL語(yǔ)句完成,并寫(xiě)成一個(gè)個(gè)方法,統(tǒng)一放在entityutil的package中,等待上級(jí)程序來(lái)調(diào)用。而調(diào)用程序則放在action的package中,它就像一個(gè)調(diào)度,根據(jù)前端頁(yè)面?zhèn)鬟f的需求來(lái)選擇調(diào)用entityutil中哪個(gè)方法的SQL語(yǔ)句來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作。
程序的實(shí)現(xiàn)過(guò)程:當(dāng)用戶點(diǎn)擊網(wǎng)頁(yè)上的一些按鈕時(shí),便是要對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。比如很簡(jiǎn)單的一個(gè)修改密碼的操作,當(dāng)用戶登錄完成并點(diǎn)擊修改密碼按鈕時(shí),就會(huì)跳轉(zhuǎn)到相應(yīng)的頁(yè)面或是彈出相應(yīng)的輸入框,這個(gè)是在前端頁(yè)面上控制的,緊接著根據(jù)修改要求輸入新舊密碼,或是新密碼。這個(gè)請(qǐng)求和輸入的密碼會(huì)被頁(yè)面的form傳入action中,在action中進(jìn)行選擇,找到相應(yīng)的entityutil中的具體方法語(yǔ)句并傳入?yún)?shù)以調(diào)用,最后entityutil中的SQL語(yǔ)句按照要求被執(zhí)行,完成數(shù)據(jù)庫(kù)的更新,此時(shí)修改密碼完成。其實(shí),從邏輯上分析這就是一個(gè)前端發(fā)送請(qǐng)求,后端層層調(diào)用的過(guò)程。下面我們通過(guò)一個(gè)案例分析,深入了解具體的流程和代碼應(yīng)該怎么去完成。
3 案例分析
以最簡(jiǎn)單的B/S模式網(wǎng)站登錄系統(tǒng)為例,在用戶頁(yè)面輸入登錄名、密碼,點(diǎn)擊登錄,后返回結(jié)果。若用戶名、密碼正確,則進(jìn)入網(wǎng)站系統(tǒng);若用戶名或者密碼不正確,則返回提示信息,顯示登錄失敗,需要重新登錄。
3.1 數(shù)據(jù)庫(kù)表格設(shè)計(jì)、連接
在數(shù)據(jù)庫(kù)中建立一張名為t_user的表格,表格中最基本的需要定義user_id、user_name、password三列,以u(píng)ser_id為主鍵。
在src中建立一個(gè)package用來(lái)存放數(shù)據(jù)庫(kù)連接的程序。
創(chuàng)建一個(gè)以JDBC連接數(shù)據(jù)庫(kù)的程序。
3.1.1 加載JDBC驅(qū)動(dòng)程序[4]
通過(guò)java.lang.Class類的靜態(tài)方法forName(String ?className)實(shí)現(xiàn)。
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
3.1.2 提供JDBC連接的URL
String dbURL="jdbc:microsoft:sqlserver://localhost
(數(shù)據(jù)庫(kù)IP地址):3306(端口號(hào));
· DatabaseName=databasename(數(shù)據(jù)庫(kù)名稱);
3.1.3 創(chuàng)建數(shù)據(jù)庫(kù)的連接
向java.sql.DriverManager請(qǐng)求并獲得Connection對(duì)象,再使用Driver Manager的getConnection(String url,String username,String password)方法傳入此連接的數(shù)據(jù)庫(kù)的路徑、數(shù)據(jù)庫(kù)的用戶名和密碼。
userName="username(用戶名)";
String userPwd="password(密碼)";
try Connection con=DriverManager
.getConnection(dbURL, userName, userPwd);
System.out.println("數(shù)據(jù)庫(kù)連接成功!");
catch(SQLException se) {
System.out.println("數(shù)據(jù)庫(kù)連接失??!");
se.printStackTrace(); }
數(shù)據(jù)庫(kù)連接是否成功即可根據(jù)現(xiàn)實(shí)的提示判斷。
3.2 JSP頁(yè)面設(shè)計(jì)及用戶數(shù)據(jù)輸入
在JSP頁(yè)面的form中指定將要跳轉(zhuǎn)的action,并且用post方法向服務(wù)器上傳遞參數(shù),提交到相對(duì)應(yīng)的action中。
用戶名:
密碼:
3.3 web.xml配置文件
web.xml是網(wǎng)絡(luò)程序中的一個(gè)很重要的配置文件,可通過(guò) servlet元素分配一個(gè)名稱給servlet或JSP頁(yè)面。
loginAction
action.LoginAction
loginAction
/loginaction
通過(guò)action名稱找到相應(yīng)的java文件去執(zhí)行。
3.4 在src中創(chuàng)建一個(gè)名為entity的package
用于存放entity的程序,統(tǒng)一定義變量,封裝get和set方法,以供程序調(diào)用。
3.5 在src中創(chuàng)建一個(gè)名為action的package,用于存放action類的程序
Action類是用戶請(qǐng)求和業(yè)務(wù)邏輯之間的橋梁,每個(gè)Action充當(dāng)客戶的一項(xiàng)業(yè)務(wù)代理。
通過(guò)web.xml找到相對(duì)應(yīng)的LoginAction.java文件,找到login()方法,傳入?yún)?shù)。
private void login(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException { ……
try {
sysuser=SysuserUtil.checkSysUser(database,
loginName,password);
}
……
}
3.5.1 獲取頁(yè)面?zhèn)鱽?lái)的參數(shù)loginName和password,并且定義跳轉(zhuǎn)頁(yè)面url
String userName=CharSet
.toGB2312(request.getParameter("user_name"));
String password=request.getParameter("password");
String url="./front/main.jsp";//目標(biāo)url
3.5.2 調(diào)用checkSysUser()從數(shù)據(jù)庫(kù)中進(jìn)行查詢
如果返回的結(jié)果不為空,則將結(jié)果放入session中,并且跳轉(zhuǎn)至指定的url頁(yè)面;如果返回結(jié)果中參數(shù)為空,即輸入的用戶名密碼在數(shù)據(jù)庫(kù)中沒(méi)有此記錄,則彈出窗口顯示:'對(duì)不起,用戶名或密碼不正確,或您沒(méi)有權(quán)限進(jìn)入!并返回登錄界面。
sysuser=SysuserUtil.checkSysUser(database,loginName,password);
if (sysuser.getUser_name() != null && !sysuser
.getUser_name().equals("")) {
request.getSession().removeAttribute("sessionInfo");
sessionInfo.setUser_name(sysuser.getUser_name());
request.getSession().setAttribute("sessionInfo",sessionInfo);
} else {out.println(""); }
out.println("");
3.6 在src中創(chuàng)建一個(gè)名為entityutil的package
將對(duì)數(shù)據(jù)庫(kù)表格的具體操作程序放入此類程序,更利于對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)處理。在SysuserEntity.java中找到login()中調(diào)用的checkSysUser(Database database,String userName,String password)方法,進(jìn)行數(shù)據(jù)庫(kù)處理。
String sql="Select user_name From databasename.dbo
.t_user Where user _name='" +userName + "' "
+ "And password='"+ password + "'";
try resultSet=database.getRS(sql);
while (resultSet.next())
sysuser.setUser_name(resultSet.getString("user_name"));
具體的SQL語(yǔ)句:從數(shù)據(jù)庫(kù)databasename的t_user表格中,找出user_name和password與傳入?yún)?shù)相同的結(jié)果中的user _name,并將結(jié)果集放入sysuser中返回給action中進(jìn)行判斷登錄是否成功。至此整個(gè)用戶登錄操作全部完成。
4 結(jié)束語(yǔ)
對(duì)于Java編程來(lái)說(shuō),理論知識(shí)是基礎(chǔ),此外還需要閱讀一些經(jīng)典的源代碼,模仿、修改、編寫(xiě),以實(shí)現(xiàn)相應(yīng)的功能。本文詳細(xì)介紹了一個(gè)最簡(jiǎn)單的登錄功能的實(shí)現(xiàn),從邏輯結(jié)構(gòu)的分析到功能代碼的編寫(xiě),讓讀者學(xué)會(huì)從分析項(xiàng)目需求開(kāi)始,建立、連接數(shù)據(jù)庫(kù),在MVC模式下搭建項(xiàng)目的整體架構(gòu),編寫(xiě)、修改代碼,了解怎么去調(diào)用、執(zhí)行、調(diào)試,由淺入深地完成一個(gè)完整的項(xiàng)目。Java的功能夠強(qiáng)大,基于Java的編程可以創(chuàng)建出更多更好的應(yīng)用,研究Java教學(xué)中的編程案例,可以幫助我們更好地把Java的理論教學(xué)與實(shí)際應(yīng)用緊密結(jié)合起來(lái),培養(yǎng)出Java系統(tǒng)開(kāi)發(fā)的合格人才。
參考文獻(xiàn):
[1] 梁志紅,肖欣欣.Java程序設(shè)計(jì)的教學(xué)思考[J].計(jì)算機(jī)教育,2013.16.
[2] 張超.基于JSP的MVC設(shè)計(jì)模式探究[J].電腦與信息技術(shù),2013.21(4).
[3] 劉宏堯.MVC模式與Java程序設(shè)計(jì)架構(gòu)[J].齊齊哈爾大學(xué)學(xué)報(bào),
2006.1.
[4] 齊鯤鵬,顧宏,唐達(dá).JSP數(shù)據(jù)庫(kù)連接技術(shù)在構(gòu)建信息網(wǎng)站中的研究[J].
控制工程,2002.9(5).
[5] 靳晉.基于Java技術(shù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接[J].才智,2011.18.