孫雅雯
摘 ?要: 目前Java教學(xué)中存在偏重理論知識(shí)的現(xiàn)象,在指導(dǎo)學(xué)生完成一個(gè)完整的項(xiàng)目時(shí)沒有根據(jù)項(xiàng)目的實(shí)際需求來搭建項(xiàng)目架構(gòu)、建立數(shù)據(jù)庫。針對(duì)這一教學(xué)現(xiàn)狀,基于MVC編程模式和項(xiàng)目架構(gòu)的規(guī)范化,結(jié)合項(xiàng)目實(shí)際需求進(jìn)行分析,通過對(duì)業(yè)務(wù)邏輯分析和簡單的B/S模式編程案例的學(xué)習(xí),進(jìn)行代碼的理解、分析,對(duì)理論知識(shí)和實(shí)際項(xiàng)目的操作做一個(gè)銜接,讓學(xué)生能夠?qū)W會(huì)運(yùn)用書本上的知識(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是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,具有卓越的高效性、安全性、通用性和平臺(tái)移植性,因此被廣泛應(yīng)用于個(gè)人PC、網(wǎng)站平臺(tái)、數(shù)據(jù)管理等一系列系統(tǒng)開發(fā)中。Java的廣泛應(yīng)用使Java人才的需求量也越來越大,許多高校的計(jì)算機(jī)專業(yè)將Java程序設(shè)計(jì)語言作為主要課程。盡管如此,在IT行業(yè)中往往還是很難招聘到合格的Java工作人員[1]。高校在Java教學(xué)中沒能將理論與實(shí)際項(xiàng)目緊密聯(lián)系起來是一個(gè)重要原因。因此,本文探討了Java編程案例。
1 MCV編程模式
MVC是一種多層的設(shè)計(jì)創(chuàng)建Web應(yīng)用程序的模式,其目的在于將應(yīng)用程序的輸入、處理和輸出分開[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ù)庫記錄,最典型的就是JSP、HTML。
Controller是指控制器,是應(yīng)用程序中處理用戶交互的部分。負(fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)[3]。例如servlet、action。
MVC分層有助于管理復(fù)雜的應(yīng)用程序,同時(shí)也讓應(yīng)用程序的測試更加容易。
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ǎng)站的交互實(shí)質(zhì)上就是訪問并且操作數(shù)據(jù)庫的過程,整個(gè)網(wǎng)站程序只是將數(shù)據(jù)庫里面的數(shù)據(jù)用一種用戶更能接受的形式表現(xiàn)出來,再從用戶的可操作性出發(fā),讓用戶通過瀏覽器頁面就可簡單輕松地對(duì)數(shù)據(jù)庫進(jìn)行操作。
2.2 過程分析
首先,我們需要連接數(shù)據(jù)庫,按照項(xiàng)目需求建立許多張表,并且知道每張表的結(jié)構(gòu)和聯(lián)系,然后考慮如何對(duì)數(shù)據(jù)庫進(jìn)行具體操作。將需要對(duì)數(shù)據(jù)庫中的表進(jìn)行的各種操作都用SQL語句完成,并寫成一個(gè)個(gè)方法,統(tǒng)一放在entityutil的package中,等待上級(jí)程序來調(diào)用。而調(diào)用程序則放在action的package中,它就像一個(gè)調(diào)度,根據(jù)前端頁面?zhèn)鬟f的需求來選擇調(diào)用entityutil中哪個(gè)方法的SQL語句來實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作。
程序的實(shí)現(xiàn)過程:當(dāng)用戶點(diǎn)擊網(wǎng)頁上的一些按鈕時(shí),便是要對(duì)數(shù)據(jù)庫進(jìn)行操作。比如很簡單的一個(gè)修改密碼的操作,當(dāng)用戶登錄完成并點(diǎn)擊修改密碼按鈕時(shí),就會(huì)跳轉(zhuǎn)到相應(yīng)的頁面或是彈出相應(yīng)的輸入框,這個(gè)是在前端頁面上控制的,緊接著根據(jù)修改要求輸入新舊密碼,或是新密碼。這個(gè)請(qǐng)求和輸入的密碼會(huì)被頁面的form傳入action中,在action中進(jìn)行選擇,找到相應(yīng)的entityutil中的具體方法語句并傳入?yún)?shù)以調(diào)用,最后entityutil中的SQL語句按照要求被執(zhí)行,完成數(shù)據(jù)庫的更新,此時(shí)修改密碼完成。其實(shí),從邏輯上分析這就是一個(gè)前端發(fā)送請(qǐng)求,后端層層調(diào)用的過程。下面我們通過一個(gè)案例分析,深入了解具體的流程和代碼應(yīng)該怎么去完成。
3 案例分析
以最簡單的B/S模式網(wǎng)站登錄系統(tǒng)為例,在用戶頁面輸入登錄名、密碼,點(diǎn)擊登錄,后返回結(jié)果。若用戶名、密碼正確,則進(jìn)入網(wǎng)站系統(tǒng);若用戶名或者密碼不正確,則返回提示信息,顯示登錄失敗,需要重新登錄。
3.1 數(shù)據(jù)庫表格設(shè)計(jì)、連接
在數(shù)據(jù)庫中建立一張名為t_user的表格,表格中最基本的需要定義user_id、user_name、password三列,以u(píng)ser_id為主鍵。
在src中建立一個(gè)package用來存放數(shù)據(jù)庫連接的程序。
創(chuàng)建一個(gè)以JDBC連接數(shù)據(jù)庫的程序。
3.1.1 加載JDBC驅(qū)動(dòng)程序[4]
通過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ù)庫IP地址):3306(端口號(hào));
· DatabaseName=databasename(數(shù)據(jù)庫名稱);
3.1.3 創(chuàng)建數(shù)據(jù)庫的連接
向java.sql.DriverManager請(qǐng)求并獲得Connection對(duì)象,再使用Driver Manager的getConnection(String url,String username,String password)方法傳入此連接的數(shù)據(jù)庫的路徑、數(shù)據(jù)庫的用戶名和密碼。
userName="username(用戶名)";
String userPwd="password(密碼)";
try Connection con=DriverManager
.getConnection(dbURL, userName, userPwd);
System.out.println("數(shù)據(jù)庫連接成功!");
catch(SQLException se) {
System.out.println("數(shù)據(jù)庫連接失敗!");
se.printStackTrace(); }
數(shù)據(jù)庫連接是否成功即可根據(jù)現(xiàn)實(shí)的提示判斷。
3.2 JSP頁面設(shè)計(jì)及用戶數(shù)據(jù)輸入
在JSP頁面的form中指定將要跳轉(zhuǎn)的action,并且用post方法向服務(wù)器上傳遞參數(shù),提交到相對(duì)應(yīng)的action中。
用戶名:
密碼:
3.3 web.xml配置文件
web.xml是網(wǎng)絡(luò)程序中的一個(gè)很重要的配置文件,可通過 servlet元素分配一個(gè)名稱給servlet或JSP頁面。
loginAction
action.LoginAction
loginAction
/loginaction
通過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ù)代理。
通過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 獲取頁面?zhèn)鱽淼膮?shù)loginName和password,并且定義跳轉(zhuǎn)頁面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ù)庫中進(jìn)行查詢
如果返回的結(jié)果不為空,則將結(jié)果放入session中,并且跳轉(zhuǎn)至指定的url頁面;如果返回結(jié)果中參數(shù)為空,即輸入的用戶名密碼在數(shù)據(jù)庫中沒有此記錄,則彈出窗口顯示:'對(duì)不起,用戶名或密碼不正確,或您沒有權(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ù)庫表格的具體操作程序放入此類程序,更利于對(duì)數(shù)據(jù)庫的數(shù)據(jù)處理。在SysuserEntity.java中找到login()中調(diào)用的checkSysUser(Database database,String userName,String password)方法,進(jìn)行數(shù)據(jù)庫處理。
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語句:從數(shù)據(jù)庫databasename的t_user表格中,找出user_name和password與傳入?yún)?shù)相同的結(jié)果中的user _name,并將結(jié)果集放入sysuser中返回給action中進(jìn)行判斷登錄是否成功。至此整個(gè)用戶登錄操作全部完成。
4 結(jié)束語
對(duì)于Java編程來說,理論知識(shí)是基礎(chǔ),此外還需要閱讀一些經(jīng)典的源代碼,模仿、修改、編寫,以實(shí)現(xiàn)相應(yīng)的功能。本文詳細(xì)介紹了一個(gè)最簡單的登錄功能的實(shí)現(xiàn),從邏輯結(jié)構(gòu)的分析到功能代碼的編寫,讓讀者學(xué)會(huì)從分析項(xiàng)目需求開始,建立、連接數(shù)據(jù)庫,在MVC模式下搭建項(xiàng)目的整體架構(gòu),編寫、修改代碼,了解怎么去調(diào)用、執(zhí)行、調(diào)試,由淺入深地完成一個(gè)完整的項(xiàng)目。Java的功能夠強(qiáng)大,基于Java的編程可以創(chuàng)建出更多更好的應(yīng)用,研究Java教學(xué)中的編程案例,可以幫助我們更好地把Java的理論教學(xué)與實(shí)際應(yīng)用緊密結(jié)合起來,培養(yǎng)出Java系統(tǒng)開發(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ù)庫連接技術(shù)在構(gòu)建信息網(wǎng)站中的研究[J].
控制工程,2002.9(5).
[5] 靳晉.基于Java技術(shù)實(shí)現(xiàn)數(shù)據(jù)庫的連接[J].才智,2011.18.