MVC開發模式的流程分析

及得在之前的一片博客中,已經把MVC說的我認爲比較清楚了,但是作爲我本人來講,絕不敢說自己這MVC這種模式是精通的,但是,自我的理解和認識我覺得還算是可以的,之前我由於中午太困,好像那一張圖畫的並不完整,深感歉意,MVC這種思想類的東西,無關語言,無關具體技術,我的理解是一種開發思想,至於思想類的東西,學的好不好,關鍵是思想的理解。

首先,在先簡單的再說一下MVC的基礎架構,我儘量以最通俗的方式來說:

我們有時候會聽到web-service或者web-service-dao等,那麼問題來了,這些都是什麼鬼,其實說白了吧,這兩者都是mvc的架構,爲什麼這樣說呢,如前者web-service,這就好理解了,這一個應用架構中,主要分三種東西,1:Model模型,2:View視圖,3:Controller:控制器,說到這,你應該就明白mvc的又來了吧,在View和Controller一塊又被叫做web層,而在MOdel裏面:這個也是mvc中最爲複雜的,Model有,數據對象,對象的service,dao,持久層等,而在web-service中model只有數據對象與service構成業務層,業務邏輯由控制器調用service的方法操作數據庫,所以叫做web-service的mvc開發模式,至於web-service-dao開發模式,這個無非就是在數據對象和service之間再抽出的一層,因爲有的項目肯可能會操作複雜的數據關係,與其這樣,不如把純粹操作某一個表的方法放到dao中,我這裏相信已經說的很清楚了,不再贅述,而service在去執行dao方法,同樣的最後給控制器調用,

下面我做了一份簡單的實例:


下面是單一登錄流程的代碼:

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'login.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <h3>This is Login Index Page</h3>
    <form action="/EmpManagerSystem/LoginController" method="post">
	    <h4>Username:<input type="text" name="username" ></h4>
	    <h4>Password:<input type="text" name="password"></h4>
	    <h4><input type="submit" value="Login"></h4>
	</form>
  </body>
</html>

LoginController.java

package Controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import Model.AdminModel;
import Model.AdminService;

public class LoginController extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		String Username=request.getParameter("username");
		String Password=request.getParameter("password");
		out.print("<h3>獲取到的用戶名:"+Username+"</h3>");
		out.print("<h3>獲取到的密碼是:"+Password+"</h3>");
		
		AdminModel loginuser=new AdminModel();
		loginuser.setUsername(Username);
		loginuser.setPassword(Password);
		if(AdminService.CheckLogin(loginuser)){
			out.print("<h3>登錄成功</h3>");
			request.getRequestDispatcher("/WEB-INF/ShowMain.jsp").forward(request, response);
		}else{
			out.print("<h3>登錄失敗</h3>");
			request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
		}
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		doGet(request, response);
	}

}

數據對象:AdminModel.java

package Model;

public class AdminModel {
	/*
	 * This is Admin Object
	 */
	private String  Username;
	private String Password;
	public String getUsername() {
		return Username;
	}
	public void setUsername(String username) {
		Username = username;
	}
	public String getPassword() {
		return Password;
	}
	public void setPassword(String password) {
		Password = password;
	}
}
AdminService.java:

package Model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import Tools.Md5Tools;
/*
 * 獲取全部的用戶資源-用戶名和密碼
 */
public class AdminService {
	private static ArrayList<AdminModel> AdminArrayList=new ArrayList<AdminModel>();
	private static Connection conn=null;
	private static PreparedStatement ps=null;
	private static ResultSet res=null;
	public AdminService(){
		//必須重新清空
		AdminArrayList=null;
	}
	public static ArrayList<AdminModel> GetAdminSource(){
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("加載驅動錯誤");
		}
		try {
			
			conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/empmanage","root","toor");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("數據庫連接錯誤");
		}
		try {
			ps=conn.prepareStatement("select * from admin");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("Sql語句預編譯");
		}
		try {
			res=ps.executeQuery();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("執行sql語句錯誤");
		}
		try {
			
			while(res.next()){
				AdminModel obj=new AdminModel();
				obj.setUsername(res.getString("name"));
				obj.setPassword(res.getString("password"));
				AdminArrayList.add(obj);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("關係對象轉化錯誤");
		}
		try {
			res.close();
			ps.close();
			conn.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return AdminArrayList;
	}
	//驗證登錄的用戶名密碼是否正確
	public static Boolean CheckLogin(AdminModel obj){
		ArrayList<AdminModel> p =new ArrayList<AdminModel>();
		
		p=AdminService.GetAdminSource();
		for(AdminModel TemObj:p){
			//以MD5的方式驗證密碼
			String temp_password=Md5Tools.GetMd5String(obj.getPassword());
			
			if(obj.getUsername().equals(TemObj.getUsername())&&temp_password.equals(TemObj.getPassword())){
				return true;
			}else{
				continue;
			}
		}
		return false;
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章