孫雅雯
摘 ?要: 目前Java教學中存在偏重理論知識的現(xiàn)象,在指導學生完成一個完整的項目時沒有根據(jù)項目的實際需求來搭建項目架構、建立數(shù)據(jù)庫。針對這一教學現(xiàn)狀,基于MVC編程模式和項目架構的規(guī)范化,結合項目實際需求進行分析,通過對業(yè)務邏輯分析和簡單的B/S模式編程案例的學習,進行代碼的理解、分析,對理論知識和實際項目的操作做一個銜接,讓學生能夠學會運用書本上的知識,從而提高其Java 程序設計的綜合能力。
關鍵詞: Java 程序設計; B/S模式編程案例分析; MVC編程模式; 理論和實際的銜接
中圖分類號:TP311.1 ? ? ? ? ?文獻標志碼:A ? ? 文章編號: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是一種可以撰寫跨平臺應用軟件的面向對象的程序設計語言,具有卓越的高效性、安全性、通用性和平臺移植性,因此被廣泛應用于個人PC、網站平臺、數(shù)據(jù)管理等一系列系統(tǒng)開發(fā)中。Java的廣泛應用使Java人才的需求量也越來越大,許多高校的計算機專業(yè)將Java程序設計語言作為主要課程。盡管如此,在IT行業(yè)中往往還是很難招聘到合格的Java工作人員[1]。高校在Java教學中沒能將理論與實際項目緊密聯(lián)系起來是一個重要原因。因此,本文探討了Java編程案例。
1 MCV編程模式
MVC是一種多層的設計創(chuàng)建Web應用程序的模式,其目的在于將應用程序的輸入、處理和輸出分開[2]。
Model是指業(yè)務模型,表示數(shù)據(jù)和業(yè)務處理。模型持有所有的數(shù)據(jù)、狀態(tài)和程序邏輯。模型與數(shù)據(jù)格式沒有關系,能為多個視圖提供數(shù)據(jù)。例如Java Bean。
View指用戶看到并與之交戶的界面,顯示數(shù)據(jù)庫記錄,最典型的就是JSP、HTML。
Controller是指控制器,是應用程序中處理用戶交互的部分。負責從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)[3]。例如servlet、action。
MVC分層有助于管理復雜的應用程序,同時也讓應用程序的測試更加容易。
2 邏輯分析
2.1 B/S模式
B/S(Browser/Server)是瀏覽器和服務器結構,它是建立在廣域網、瀏覽器之上的,主要事物邏輯在服務器端(Server)實現(xiàn),只有極少部分在前端(Browser)實現(xiàn)。所以不論時間、地點、人物,以何種方式接入,只要網站允許,都可以訪問。而用戶和網站的交互實質上就是訪問并且操作數(shù)據(jù)庫的過程,整個網站程序只是將數(shù)據(jù)庫里面的數(shù)據(jù)用一種用戶更能接受的形式表現(xiàn)出來,再從用戶的可操作性出發(fā),讓用戶通過瀏覽器頁面就可簡單輕松地對數(shù)據(jù)庫進行操作。
2.2 過程分析
首先,我們需要連接數(shù)據(jù)庫,按照項目需求建立許多張表,并且知道每張表的結構和聯(lián)系,然后考慮如何對數(shù)據(jù)庫進行具體操作。將需要對數(shù)據(jù)庫中的表進行的各種操作都用SQL語句完成,并寫成一個個方法,統(tǒng)一放在entityutil的package中,等待上級程序來調用。而調用程序則放在action的package中,它就像一個調度,根據(jù)前端頁面?zhèn)鬟f的需求來選擇調用entityutil中哪個方法的SQL語句來實現(xiàn)對數(shù)據(jù)庫的操作。
程序的實現(xiàn)過程:當用戶點擊網頁上的一些按鈕時,便是要對數(shù)據(jù)庫進行操作。比如很簡單的一個修改密碼的操作,當用戶登錄完成并點擊修改密碼按鈕時,就會跳轉到相應的頁面或是彈出相應的輸入框,這個是在前端頁面上控制的,緊接著根據(jù)修改要求輸入新舊密碼,或是新密碼。這個請求和輸入的密碼會被頁面的form傳入action中,在action中進行選擇,找到相應的entityutil中的具體方法語句并傳入?yún)?shù)以調用,最后entityutil中的SQL語句按照要求被執(zhí)行,完成數(shù)據(jù)庫的更新,此時修改密碼完成。其實,從邏輯上分析這就是一個前端發(fā)送請求,后端層層調用的過程。下面我們通過一個案例分析,深入了解具體的流程和代碼應該怎么去完成。
3 案例分析
以最簡單的B/S模式網站登錄系統(tǒng)為例,在用戶頁面輸入登錄名、密碼,點擊登錄,后返回結果。若用戶名、密碼正確,則進入網站系統(tǒng);若用戶名或者密碼不正確,則返回提示信息,顯示登錄失敗,需要重新登錄。
3.1 數(shù)據(jù)庫表格設計、連接
在數(shù)據(jù)庫中建立一張名為t_user的表格,表格中最基本的需要定義user_id、user_name、password三列,以user_id為主鍵。
在src中建立一個package用來存放數(shù)據(jù)庫連接的程序。
創(chuàng)建一個以JDBC連接數(shù)據(jù)庫的程序。
3.1.1 加載JDBC驅動程序[4]
通過java.lang.Class類的靜態(tài)方法forName(String ?className)實現(xiàn)。
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
3.1.2 提供JDBC連接的URL
String dbURL="jdbc:microsoft:sqlserver://localhost
(數(shù)據(jù)庫IP地址):3306(端口號);
· DatabaseName=databasename(數(shù)據(jù)庫名稱);
3.1.3 創(chuàng)建數(shù)據(jù)庫的連接
向java.sql.DriverManager請求并獲得Connection對象,再使用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)實的提示判斷。
3.2 JSP頁面設計及用戶數(shù)據(jù)輸入
在JSP頁面的form中指定將要跳轉的action,并且用post方法向服務器上傳遞參數(shù),提交到相對應的action中。
用戶名:
密碼:
3.3 web.xml配置文件
web.xml是網絡程序中的一個很重要的配置文件,可通過 servlet元素分配一個名稱給servlet或JSP頁面。
loginAction
action.LoginAction
loginAction
/loginaction
通過action名稱找到相應的java文件去執(zhí)行。
3.4 在src中創(chuàng)建一個名為entity的package
用于存放entity的程序,統(tǒng)一定義變量,封裝get和set方法,以供程序調用。
3.5 在src中創(chuàng)建一個名為action的package,用于存放action類的程序
Action類是用戶請求和業(yè)務邏輯之間的橋梁,每個Action充當客戶的一項業(yè)務代理。
通過web.xml找到相對應的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,并且定義跳轉頁面url
String userName=CharSet
.toGB2312(request.getParameter("user_name"));
String password=request.getParameter("password");
String url="./front/main.jsp";//目標url
3.5.2 調用checkSysUser()從數(shù)據(jù)庫中進行查詢
如果返回的結果不為空,則將結果放入session中,并且跳轉至指定的url頁面;如果返回結果中參數(shù)為空,即輸入的用戶名密碼在數(shù)據(jù)庫中沒有此記錄,則彈出窗口顯示:'對不起,用戶名或密碼不正確,或您沒有權限進入!并返回登錄界面。
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)建一個名為entityutil的package
將對數(shù)據(jù)庫表格的具體操作程序放入此類程序,更利于對數(shù)據(jù)庫的數(shù)據(jù)處理。在SysuserEntity.java中找到login()中調用的checkSysUser(Database database,String userName,String password)方法,進行數(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ù)相同的結果中的user _name,并將結果集放入sysuser中返回給action中進行判斷登錄是否成功。至此整個用戶登錄操作全部完成。
4 結束語
對于Java編程來說,理論知識是基礎,此外還需要閱讀一些經典的源代碼,模仿、修改、編寫,以實現(xiàn)相應的功能。本文詳細介紹了一個最簡單的登錄功能的實現(xiàn),從邏輯結構的分析到功能代碼的編寫,讓讀者學會從分析項目需求開始,建立、連接數(shù)據(jù)庫,在MVC模式下搭建項目的整體架構,編寫、修改代碼,了解怎么去調用、執(zhí)行、調試,由淺入深地完成一個完整的項目。Java的功能夠強大,基于Java的編程可以創(chuàng)建出更多更好的應用,研究Java教學中的編程案例,可以幫助我們更好地把Java的理論教學與實際應用緊密結合起來,培養(yǎng)出Java系統(tǒng)開發(fā)的合格人才。
參考文獻:
[1] 梁志紅,肖欣欣.Java程序設計的教學思考[J].計算機教育,2013.16.
[2] 張超.基于JSP的MVC設計模式探究[J].電腦與信息技術,2013.21(4).
[3] 劉宏堯.MVC模式與Java程序設計架構[J].齊齊哈爾大學學報,
2006.1.
[4] 齊鯤鵬,顧宏,唐達.JSP數(shù)據(jù)庫連接技術在構建信息網站中的研究[J].
控制工程,2002.9(5).
[5] 靳晉.基于Java技術實現(xiàn)數(shù)據(jù)庫的連接[J].才智,2011.18.