【原創】三分鍾教你學會MVC框架——基於java web開發(2)


    沒想到我的上一篇博客有這么多人看,還有幾位看完之后給我留言加油,不勝感激,備受鼓勵,啥都別說了,繼續系列文章之第二篇。(如果沒看過我第一篇博客的朋友,可以到我的主頁上先瀏覽完再看這篇文章,以免上下文對不上)

    前面已經創建完項目了,那么下面一個步驟就是逐一新建在MVC框架中負責V(視圖)、C(控制器)、M(模型)的對應文件。

第一步:創建項目(已完成)

第二步:新建負責V(視圖)的JSP文件

    在文件夾Web-Root下新建名為MyJsp.jsp的JSP文件,代碼如下:

 

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 7 <html>
 8 <head></head>
 9              <!--對於初學者,上面的代碼都可以暫時不必理會 -->
10 <body>
11     <form action="login.do"  method="post">      <!--所提交的表單,action為"login.do",發出請求是post-->
12 <p>賬號:<input type="text" name="id" /></p>      <!--所輸入的"賬號"在提交后的標示是"id",下同 -->
13                                                     
14 <p>密碼:<input type="text" name="password" />
15       
16 <p><input type="submit" value="登錄"> </p>           <!--表單提交按鈕,顯示名稱為"登錄"-->
17     </form>
18   </body>
19 </html>

 

    在創建完之后,記得在web.xml中,將<welcome-file-list>節點中的內容改成上面這個文件的文件名MyJsp.jsp。(建議初學者做完這個步驟之后先運行一遍項目,看看效果如何,再看看有沒有出錯的地方)
    如果運行的效果如下圖,那應該就沒什么問題了。

      所謂的V(視圖),通俗地來講,就是用戶所看到的內容。具體到這個java web項目,就是用戶所看到的頁面。

第三步:新建負責C(控制器)的Servlet

      首先,要在src目錄下新建一個包,包名為cc.MyMVC.servlet。然后,再在該包下新建一個servlet文件,名為MyServlet,代碼如下:

 1 package cc.MyMVC.servlet;
 2 import java.io.IOException;
 3 import javax.servlet.ServletException;
 4 import javax.servlet.http.HttpServlet;
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 
 8 import cc.MyMVC.POJO.MyPOJO;
 9 
10 public class MyServlet extends HttpServlet {
11     public MyServlet() {
12         super();
13     }
14     
15     public void destroy() {
16         super.destroy();
17     }
18 
19     public void doGet(HttpServletRequest request, HttpServletResponse response)
20             throws ServletException, IOException {
21     }
22 
23 //以下為關鍵代碼,初學者只需看此處,其他地方都可以暫且不管
24     public void doPost(HttpServletRequest request, HttpServletResponse response)//處理post請求的方法
25             throws ServletException, IOException {
26         boolean b=false;
27         MyPOJO myPOJO=new MyPOJO();//新建MyPOJO類的對象myPOJO
28         
29         //根據標示名獲取JSP文件中表單所包含的參數
30         String id=request.getParameter("id");
31         String password=request.getParameter("password");
32         
33         b=myPOJO.login(id,password);//使用模型對賬號和密碼進行驗證,返回一個boolean類型的對象
34         
35         if(b){  //如果驗證結果為真,跳轉至登錄成功頁面
36             response.sendRedirect("LoginSuccessful.jsp");
37         }
38         else {  //如果驗證結果為假,跳轉至登錄失敗頁面
39             response.sendRedirect("LoginFailed.jsp");
40         }
41         
42     }
43     
44     public void init() throws ServletException {
45     }
46 }

     很不幸,第三步提到的模型(M)還沒有創建,大家可以略過。大家可以看到,這個servlet中doGet方法里的代碼都被刪光光了,無法處理get請求。而這個對我們這個項目可以說是毫無影響,看到我們第二步創建的jsp文件,會發現表單提交的方式是post請求,所以,我們只需要實現doPost方法就好了,並且這個方法將處理提交的post請求。

     控制器(C)的作用,就是對流程的控制,接收視圖傳來的參數,交由模型進行處理,再根據處理的結果決定下一步的操作。具體到本項目,servlet接收jsp傳來的參數id和password,交由POJO處理,根據返回的boolean結果跳轉到登錄成功(失敗)的頁面。

 

第四步:修改web.xml文件,注冊servlet並且建立action與servlet之間的映射。

    前面說到,MyServlet.servlet會處理提交的請求,那么,為什么servlet會接收到這個請求呢?因為,我事先修改了web.xml文件,在里面添加了相應的代碼。web.xml的完整代碼如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" 
 3     xmlns="http://java.sun.com/xml/ns/javaee" 
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7 <!--以上內容暫時不需要理解,如果不明白可跳過-->
 8 
 9   <servlet>
10     <servlet-name>MyServlet</servlet-name><!--定義servlet的名稱 -->
11     <servlet-class>cc.MyMVC.servlet.MyServlet</servlet-class><!--對應servlet所屬的文件名 -->
12   </servlet>
13 
14   <servlet-mapping> <!-- 建立servlet與action之間的映射 -->
15     <servlet-name>MyServlet</servlet-name>  <!-- 映射中servlet的名稱,已定義 -->
16     <url-pattern>/login.do</url-pattern>    <!-- 所對應的action -->
17   </servlet-mapping>
18 <!--以上內容為新添加的代碼,請重點關注-->
19 
20     
21   <welcome-file-list>     <!--welcome-file-list開頭-->
22     <welcome-file>MyJsp.jsp</welcome-file>   <!--設置歡迎頁面,也就是項目啟動后瀏覽器展示的第一個頁面-->
23   </welcome-file-list>    <!--welcome-file-list結尾-->
24  
25 </web-app>

    看到關於action的那一行XML代碼,是否想到了什么呢?沒錯,就是jsp表單中所定義的action。試着修改,看看會有什么效果?

第五步:新建M(模型)的POJO文件

    POJO(Plain Ordinary Java Objects)簡單的Java對象,實際就是普通JavaBeans,是為了避免和EJB混淆所創造的簡稱。POJO實質上可以理解為簡單的實體類,顧名思義POJO類的作用是方便程序員使用數據庫中的數據表。——《百度百科》

    首先,在src文件下新建包,包名為cc.MyMVC.POJO。然后在該包下新建class文件,名為MyPOJO。

    為了讓讀者,尤其是初學者更快地理解MVC,而不是將精力耗費在理解POJO以及數據庫操作上面,我將POJO進行了盡可能的簡化。代碼如下:

 1 package cc.MyMVC.POJO;
 2 
 3 public class MyPOJO {
 4     public boolean login(String id,String password){
 5       if(id.equals("admin")&&password.equals("123456")){//判斷用戶名以及密碼是否與設定相符
 6           return true;
 7       }
 8       else return false;
 9     }
10 }

第六步:新建V(視圖)中的另外兩個JSP文件
    在Web-Root文件夾下新建兩個jsp文件,分別命名為LoginSuccessful.jsp以及LoginFailed.jsp。代碼如下:

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6 
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10   </head>
11   <body>
12     Login Successful. <br>
13   </body>
14 </html>
 1 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6 
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10   </head>
11   
12   <body>
13     Login Failed. <br>
14   </body>
15 </html>

第七步:跑項目,看效果

      (1)輸入賬號:admin,密碼:123456 將會跳轉到頁面如下:

     (2)輸入錯誤的賬號或錯誤的密碼,將會跳轉到頁面如下:

      直到這里,示例項目已經構建和演示完畢了。為了簡化說明,狠心把許多重要但是對此次說明可能有妨礙的知識點給砍掉了。例如,web.xml為什么可以決定歡迎頁,為什么可以進行servlet的配置;HTTP中的post請求以及get請求又是什么樣的?諸如此類,不一而足。再提一下林信良老師的《Servlet&JSP學習筆記》,里面有更加詳細的講解,強烈推薦!
      MVC框架,主要是對應用的分層,在web項目中尤其流行,算是最基礎的分層模式。初學者可能還不了解MVC框架的作用,甚至會覺得這樣做故作高深,最后像我當初那樣,把所有的代碼都擠到一個或幾個jsp文件當中。其實,隨着項目規模的逐漸龐大以及團隊成員的增加,分層的思想不僅有助於分工合作,還增加了項目的伸縮性,降低了測試和debug的工作量和難度。

      最后,一句話,實踐最重要!

      歡迎大家給我留言。剛開始寫技術博客,很多東西都不懂,虛心接受各路大牛的批評建議。如果有不明白的地方,請給我留言,如果是我所能夠回答的一定會盡快回復。我關注的領域主要是在java web開發、J2EE等方面,對linux、php、算法等方面都比較感興趣,如果有想看的專題入門文章別的地方找不到,沒問題,告訴我,如果合適的話,我來寫!

                                                                   

 

 

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM