及得在之前的一片博客中,已經把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;
}
}