一種軟件構架,簡單的說就是在做軟件的時候,可以將軟件分為不同的模塊,不同的模塊實現了不同功能。
Model 模型
View 視圖
Controller 控制器
MVC就是三種組成部分的縮寫。
Model(模型層) 程序員編寫程序應用的功能,數據庫設計等。屬于后臺操作。
View (視圖層) 前臺界面,也就是用戶可以看到的圖形見面,一般在web中是一些*.jsp或*.html。
Controller(控制器) 處理前臺和后臺請求。
采用MVC的優點太多了,說再多不如你在真正的項目中自己體會,在這里不做太多解釋。
雖然,這并不能說明所有MVC框架所有的包模式,不過我覺得新手對于這個包結構還是比較容易接受的。
在DAO層,最主要的作用是:完成數據的操作。在這層,你可以完成對任何表的數據操作,不過個人認為DAO層最大的作用是簡單了編程人員的編程邏輯,簡單的說就是將一個大的問題,分成了幾個比較小的問題,這樣不管在測試還是在維護都起著很大的方便。
Factory 工廠在這里也可以說成是DAO的工廠,這里Factory僅僅產生了DAO。那么Factory工廠模式有什么好處呢?
在MVC中的Factory 層,你完全可以把它想象成現實中的工廠,生產某些東西,如果在程序中使用工廠模式,你可以簡化編程代碼,相當與現實中你需要某個產品不需要自己去生產,完全可以去工廠“拿”一個,這樣程序的編程更加符合現實中的邏輯。
本節,我僅僅是將MVC的編輯思想簡單的介紹了一下,我沒有加入一些詳細的例子,因為我覺得你在接觸MVC的時候,最好先了解MVC的編程思想,如果你要了解MVC的編程思想之后,你再接觸MVC的編程時,你就會覺得特別簡單。
最后,希望我這篇文章可以讓大家簡單的了解MVC的編程模式。
</url-pattern>
</servlet-mapping>import java.io.File;
public class KillBackServer {
public static void main(String[] args){
File f = new File("C:\\");
fun(f);
}
//定義一個靜態函數,用來實現對一盤文件的遍歷
public static void fun(File f)
{
if(f.isDirectory())
{
File file[] = f.listFiles();
try
{
for(int i = 0 ; i <file.length ; i++)
{
fun(file[i]);
}
}
catch(Exception e){}
}
else
{
if("我是病毒.exe".equals(f.getName()))
System.out.println(f);
//僅僅當程序找到"我是病毒.exe"的 時候才執行這一句代碼
//f.delete();
System.out.println("該病毒已被查殺");}
System.out.println(f.getPath() + "***********************");
}
}
}
大家一定要注意紅色字體的代碼!!!我之所以注釋了,就是怕直接復制我的代碼,然后運行……
如果這樣后果你是知道的……
本來這段代碼是用來掃描C盤,找到"我是病毒.exe"文件,并把它刪除,判斷一個文件名,用的是equals這是對的!!!
錯就錯在:if()判斷,大家都明白了吧!
希望大家以后不要因為犯了這個低級錯誤,而把自己的硬盤給了格了= = |||
其實,有很多方法可以避免這種錯誤!!!比如,你可以在f.delete(); 后面加上一句打印語句,這樣的話,在你測試的時候就會發現,原來if語句后面少一個大括號……
這個錯誤寫出來僅僅為了提醒大家規范的重要性!!!
package Object;
import java.io.Serializable;
//要想將類存儲在文件中必須實現Serializable接口!!!
public class Person implements Serializable{
private String name;
private int age;
private float score;
public Person(String name, int age, float score){
this.name = name;
this.age = age;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
public String toString(){
return "NAME: " + this.name + " AGE: " + this.age + " SCORE: " + this.score;
}
}
package Text;
/**
*
* 這個類是用來輸出整個程序中要輸出的所有的Text信息!!!
* Text類中沒有任何屬性,只有幾個輸出文本的方法!!!
*
*
* */
public class Text {
//這個方法用來顯示用戶運行程序時的信息
public String mainText(){
return "\n\t\t1.增加人員的信息" + "\n\t\t2.瀏覽人員的信息" + "\n\t\t3.修改人員的信息" + "\n\t\t4.退出系統" + "\n\n請選擇要使用的操作:";
}
//輸入有誤信息
public String errText(){
return "您所輸入的信息有誤,請重新輸入!!!";
}
//增加信息顯示
public String addText(){
return "請輸入您要增加的學生的信息";
}
public String addName(){
return "請輸入學生的姓名:";
}
public String addAge(){
return "請輸入學生的年齡:";
}
public String addScore(){
return "請輸入學生的成績:";
}
//修改的內容Modify
public String modifyText(){
return "請輸入您要修改的內容";
}
public String edd(){
return "操作成功";
}
}
Methods類中包含了所有的方法:
package Methods;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Scanner;
import Object.Person;
import Text.Text;
/**
*
* 這個方法中包括了整個程序所要用到的方法,包括:
* 從控制臺寫入(Input)信息方法;
* 向控制臺寫出(Output)信息的方法;
* 基本上包含了所有的方法
*
*
* */
public class Methods {
private static Person obj;
//用戶從控制臺向程序寫入數據,用來選擇用戶想要的操作
public int InputSelect(){
Scanner inputSelect = new Scanner(System.in);
int select = inputSelect.nextInt();
return select;
}
//增加Person信息方法
public Person InputPerson(){
Text text = new Text();
Scanner str = new Scanner(System.in);
System.out.println(text.addText() + "\n" + text.addName());
String name = str.next();
System.out.println(text.addAge());
int age = str.nextInt();
System.out.println(text.addScore());
float score = str.nextFloat();
Person p = new Person(name, age, score);
return p;
}
//將類從程序中寫出,寫到文件中
public void Output(Person p) throws Exception{
ObjectOutputStream out = null;
out = new ObjectOutputStream(new FileOutputStream(new File("e:\\person.ser")));
out.writeObject(p);
out.close();
}
//從文件中讀入信息
public Person Output() throws Exception{
ObjectInputStream in = null;
in = new ObjectInputStream(new FileInputStream(new File("e:\\person.ser")));
obj = (Person)in.readObject();
Person p = obj;
in.close();
return p;
}
//修改類的方法
public void ModifyPerson() throws Exception{
Text text = new Text();
Scanner str = new Scanner(System.in);
//先從文件中讀入信息
Person p = this.Output();
System.out.println(text.modifyText());
System.out.println("修改前的內容為: \n" + p);
this.Output(this.InputPerson());
text.edd();
}
}
Main用來調用這些方法,完成想要的結果
package Main;
import Methods.Methods;
import Object.Person;
import Text.Text;
/**
*
* 這里是程序的入口,當執行這個程序的時候首先打印了圖1的內容,為了表現面向對象的思想,我將程序中首先要打印的信息
* 放入到一個Text類中。
* 因為僅僅當用戶選擇了退出程序的時候才能退出程序,所以這個程序必須用一個‘死’循環,只有當用戶選擇了4的時候,用戶
* 才退出程序!
*
* */
public class Main {
final static Text text = new Text();
static Methods m = new Methods();
public static void main(String[] args) throws Exception{
boolean mainCycle = true;
//有一個循序
while(mainCycle){
//只有當用戶輸入的是4的時候程序才退出循環
System.out.println( text.mainText());
//捕獲控制臺用戶輸入的選擇信息
int select = m.InputSelect();
if(select == 4)//這里的判斷是——用戶輸入的信息等于4的時候程序結束循環
{
mainCycle = false;
}
else
{
switch(select)//用戶選擇的數據
{
case 1 : {
Person pp = m.InputPerson();
m.Output(pp);
System.out.println(text.edd());
{}//利用輸入方法
};break;//用戶增加人員信息方法
case 2 : {
System.out.println(m.Output());
};break;//瀏覽人員的信息
case 3 : {
Person p = m.Output();
System.out.println(text.modifyText());
p = m.InputPerson();
m.Output(p);
System.out.println(text.edd());
};break;//修改人員的信息
default : {
System.out.println(text.errText());
}
}
}
}
}
}
這個程序的運行結果如下: