JSP+Servlet+JavaBean

MVC是三個單詞的縮寫:M,Model(模型);V,View( 視圖 ),C,Control(控制)。html

MVC模式的目的就是實現Web系統的職能分工,java

Model層:實現系統的業務邏輯,即javaBean部分程序員

View層:負責與用戶交互,即在界面上展現數據對象給用戶,即html,jspweb

Control層:Model與View之間溝通的橋樑,它能夠分派用戶的請求並選擇恰當的視圖以用於顯示,同時它也能夠解釋用戶的輸入並將它們映射爲模型層可執行的操做,固然就是Servlet的職責了設計模式

 

下面咱們用MVC設計模式來實現 簡單的用戶登陸過程服務器

一、控制器Servlet的實現app

系統中只有一個servlet即ControlServlet,全部頁面發起的以"  *.do  "的請求,都被web.xml配置給ControlServlet進行處理,在ControlServlet中根據‘ * ’的字符串(即解析用戶請求的路徑),調用ActionFactory生成的制定Action對象,在將處理後的URL轉發給用戶。jsp

 ControlServlet.javapost

Java代碼 
  1. package cn.netjava.servlet;   
  2.   
  3. import java.io.IOException;   
  4. import javax.servlet.ServletException;   
  5. import javax.servlet.http.HttpServlet;   
  6. import javax.servlet.http.HttpServletRequest;   
  7. import javax.servlet.http.HttpServletResponse;   
  8.   
  9. import cn.netjava.action.Action;   
  10. import cn.netjava.action.ActionFactory;   
  11.   
  12. /**  
  13.  * Servlet implementation class ControlServlet  
  14.  */  
  15. public class ControlServlet extends HttpServlet {   
  16.     private static final long serialVersionUID = 1L;   
  17.   
  18.     protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   
  19.         //獲得當前Servlet的請求路徑   
  20.         String pathName =request.getServletPath();   
  21.         // request.getContextPath();獲得項目名字   
  22.         System.out.println("pathName:"+pathName);   
  23.         //獲得請求的Action名字   
  24.         int index = pathName.indexOf(".");   
  25.         String ActionName = pathName.substring(1, index);   
  26.         System.out.println(ActionName);   
  27.         //獲取運行時參數   
  28.         String ActionClassName = this.getInitParameter(ActionName);   
  29.         //獲得Action對象   
  30.         Action action = ActionFactory.getActionFactory().getAction(ActionClassName);   
  31.         //執行Action的execute獲得要返回的URL路徑   
  32.         String url = action.execute(request, response);   
  33.         if(url==null){   
  34.             request.getRequestDispatcher("error.jsp").forward(request, response);      
  35.         }else{   
  36.             request.getRequestDispatcher(url).forward(request, response);   
  37.         }   
  38.     }   
  39.   
  40. }   

 

二、Action對象工廠類實現:ui

 

ActionFactory是一個單實例類(整個系統只須要使用其一個對象),它只提供一個Action對象,經過getAction(String ActionClassName) 的方法調用建立一個Action對象。這個方法在Control中被調用。代碼以下:   

 

Java代碼 
  1. package cn.netjava.action;   
  2. /**  
  3.  * 根據Action名字,建立Action對象  
  4.  * @author Administrator  
  5.  *  
  6.  */  
  7. public class ActionFactory {   
  8.   
  9.     //單例模式:不須要建立對象   
  10.     private ActionFactory(){   
  11.     }   
  12.     //單實例訪問方法,獲得ActionFactory對象   
  13.     public static ActionFactory getActionFactory(){   
  14.         if(af == null){   
  15.             af = new ActionFactory();   
  16.         }   
  17.         return af;   
  18.     }   
  19.     /**  
  20.      * 根據具體的Action類名字建立Action對象  
  21.      * @param ActionClassName :具體的Action類全名  
  22.      * @return:Action類型對象  
  23.      */  
  24.     public Action getAction(String ActionClassName){   
  25.         Action action = null;   
  26.         try{   
  27.             action = (Action) Class.forName(ActionClassName).newInstance();   
  28.         }catch(Exception e){   
  29.             e.printStackTrace();   
  30.         }   
  31.         return action;   
  32.     }   
  33.        
  34.     private static ActionFactory af;   
  35.        
  36.        
  37. }  
 

三、Action接口類定義:

全部的事件處理(即Action)類都必須實現這個接口

Java代碼 
  1. package cn.netjava.action;   
  2.   
  3. public interface Action {   
  4.     /**  
  5.      * 全部的具體Action實現這個接口  
  6.      * @param request 請求對象  
  7.      * @param response 應答對象  
  8.      * @return :結果頁面  
  9.      */  
  10.     public String execute(javax.servlet.http.HttpServletRequest request,javax.servlet.http.HttpServletResponse response);   
  11.        
  12. }  
 

 四、web.xml中配置請求發送給控制器Servlet

 

最後,咱們只須要在wex.xml中對MVC結構的配置:

視圖頁面中的請求都是以<動做名字>.do結尾,當這個請求到達web服務器後,會被服務器轉向給控制器處理,控制器在根據解析出的動做名,調用對應的Action對象,處理結果,並輸出結果頁面,因此web.xml中必須有以下配置:

Java代碼 
  1. <servlet>   
  2.     <servlet-name>controlServlet</servlet-name>   
  3.     <servlet-class>cn.netjava.servlet.ControlServlet</servlet-class>   
  4.     <init-param>   
  5.         <param-name>loginAction</param-name>   
  6.         <param-value>cn.netjava.action.LoginAction</param-value>   
  7.     </init-param>   
  8.   </servlet>   
  9.   <servlet-mapping>   
  10.     <servlet-name>controlServlet</servlet-name>   
  11.     <url-pattern>*.do</url-pattern>   
  12.   </servlet-mapping>  
 

 四、具體的Action類實現(即對登陸動做進行處理的類)

 

Java代碼 
  1. package cn.netjava.action;   
  2.   
  3. import javax.servlet.http.HttpServletRequest;   
  4. import javax.servlet.http.HttpServletResponse;   
  5.   
  6. public class LoginAction implements Action {   
  7.   
  8.     public String execute(HttpServletRequest request,   
  9.             HttpServletResponse response) {   
  10.         // 獲得用戶名和密碼   
  11.         String userName = request.getParameter("userName");   
  12.         String userPwd = request.getParameter("userPwd");   
  13.         if (userName.equals("netjava") && userPwd.equals("netjava")) {   
  14.             request.setAttribute("userName", userName);   
  15.             return "main.jsp";   
  16.         } else {   
  17.             return "login.jsp";   
  18.         }   
  19.     }   
  20.   
  21. }  
 

 若是登陸成功,跳轉到 main.jsp頁面,不然,返回login,jsp頁面

 

如下是main.jsp和login.jsp頁面:

main.jsp

Html代碼 
  1. <%@ page language="java" contentType="text/html; charset=utf-8"  
  2.     pageEncoding="utf-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10. <h1 style="color:red"><%=request.getAttribute("userName") %>登陸成功</h1>  
  11. </body>  
  12. </html>  
 

 login.jsp

Html代碼 
  1. <%@ page language="java" contentType="text/html; charset=utf-8"  
  2.     pageEncoding="utf-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  7. <title>用戶登陸</title>  
  8. </head>  
  9. <body>  
  10. <form action="loginAction.do" method="post">  
  11.     用戶名:<input type="text" name="userName" id="userName"><br>  
  12.     密碼:<input type="password" name="userPwd" id="userPwd"><br>  
  13.     <input type="submit" value="登陸"/>  
  14. </form>  
  15. </body>  
  16. </html>  
 

 最後作個總結吧:之前咱們與服務器進行交互,可能jsp頁面和servlet中都將html和java代碼參雜在一塊兒,這會致使系統的系統維護困難、分工不清;例如在加有jsp代碼段的網頁中,程序員與美工之間的配合就很是困難!MVC結構的系統會從根本上強制咱們將web系統中的數據對象、業務邏輯、用戶界面三者分離,使得程序員(Java開發人員)集中精力於業務邏輯,界面程序員(HTML和JSP開發人員)集中精力於表現形式上。

出處:http://blog.csdn.net/liupeng900605/article/details/6985344

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息