隨筆 - 20  文章 - 57  trackbacks - 0
          <2010年12月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿(2)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          51CTO

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          MVC

          MVC

          MVC含義

          一種軟件構(gòu)架,簡(jiǎn)單的說(shuō)就是在做軟件的時(shí)候,可以將軟件分為不同的模塊,不同的模塊實(shí)現(xiàn)了不同功能。

          MVC 組成部分

          Model 模型

          View 視圖

          Controller 控制器 

          MVC就是三種組成部分的縮寫(xiě)。

          MVC 不同模塊的功能

          Model(模型層) 程序員編寫(xiě)程序應(yīng)用的功能,數(shù)據(jù)庫(kù)設(shè)計(jì)等。屬于后臺(tái)操作。

          View (視圖層) 前臺(tái)界面,也就是用戶(hù)可以看到的圖形見(jiàn)面,一般在web中是一些*.jsp*.html。

          Controller(控制器) 處理前臺(tái)和后臺(tái)請(qǐng)求。

          MVC 優(yōu)點(diǎn)

          采用MVC的優(yōu)點(diǎn)太多了,說(shuō)再多不如你在真正的項(xiàng)目中自己體會(huì),在這里不做太多解釋。

          MVC 包結(jié)構(gòu)




          雖然,這并不能說(shuō)明所有MVC框架所有的包模式,不過(guò)我覺(jué)得新手對(duì)于這個(gè)包結(jié)構(gòu)還是比較容易接受的。

          DAO  模式

          DAO層,最主要的作用是:完成數(shù)據(jù)的操作。在這層,你可以完成對(duì)任何表的數(shù)據(jù)操作,不過(guò)個(gè)人認(rèn)為DAO層最大的作用是簡(jiǎn)單了編程人員的編程邏輯,簡(jiǎn)單的說(shuō)就是將一個(gè)大的問(wèn)題,分成了幾個(gè)比較小的問(wèn)題,這樣不管在測(cè)試還是在維護(hù)都起著很大的方便。

          Factory  工廠

          Factory 工廠在這里也可以說(shuō)成是DAO的工廠,這里Factory僅僅產(chǎn)生了DAO。那么Factory工廠模式有什么好處呢?

          MVC中的Factory 層,你完全可以把它想象成現(xiàn)實(shí)中的工廠,生產(chǎn)某些東西,如果在程序中使用工廠模式,你可以簡(jiǎn)化編程代碼,相當(dāng)與現(xiàn)實(shí)中你需要某個(gè)產(chǎn)品不需要自己去生產(chǎn),完全可以去工廠“拿”一個(gè),這樣程序的編程更加符合現(xiàn)實(shí)中的邏輯。

          MVC  總結(jié)

          本節(jié),我僅僅是將MVC的編輯思想簡(jiǎn)單的介紹了一下,我沒(méi)有加入一些詳細(xì)的例子,因?yàn)槲矣X(jué)得你在接觸MVC的時(shí)候,最好先了解MVC的編程思想,如果你要了解MVC的編程思想之后,你再接觸MVC的編程時(shí),你就會(huì)覺(jué)得特別簡(jiǎn)單。

          最后,希望我這篇文章可以讓大家簡(jiǎn)單的了解MVC的編程模式。

          posted @ 2011-01-25 09:30 tovep 閱讀(2198) | 評(píng)論 (9)編輯 收藏
               摘要: ForEach小結(jié)            <c:forEach>標(biāo)簽具有以下一些屬性:              var:迭代參數(shù)的名稱(chēng)。在迭代體中可以使用...  閱讀全文
          posted @ 2011-01-24 08:37 tovep 閱讀(2371) | 評(píng)論 (0)編輯 收藏

          通過(guò)以下Servlet程序和web.xml來(lái)說(shuō)明web.xml的配置以及過(guò)程


          創(chuàng)建一個(gè)Login的HTML文件



          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
            <head>
              <title>login.html</title>
             
              <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
              <meta http-equiv="description" content="this is my page">
              <meta http-equiv="content-type" content="text/html; charset=UTF-8">
           
           </head>
            <body>
              <form action="test1" method="post">
                <table border="0" width="379" height="79">
                  <tr>
                    <td>帳號(hào):</td>
                    <td><input type="text" name="username"></td>
                  </tr>
                  <tr>
                    <td>密碼:</td>
                    <td><input type="password" name="password"></td>
                  </tr>
                  <tr>
                    <td colspan="5" align="center"><input type="submit" value="登錄"></td>
                  </tr>
                </table>
              </form>
            </body>
          </html>



          以上HTML標(biāo)簽中要說(shuō)明的是:
          <form>標(biāo)簽中的 action="test_Web_xml" 和 method="post" 分別定義了Html將登陸的信息發(fā)送給了誰(shuí),以及發(fā)送信息的方法!


          創(chuàng)建一個(gè)Servlet程序

          public class LoginServlet extends HttpServlet{
             
              public void doPost(HttpServletRequest request, HttpServletResponse response)
                  throws ServletException, IOException {
                  String username = null;
                  username = request.getParameter("username");
                  String password = null;
                  password = request.getParameter("password");
                 
                  if(username.equals("username")&&password.equals("password")){
                      request.getRequestDispatcher("成功登陸?。?!").forward(request,response);
                  }else{
                      request.getRequestDispatcher("登陸失敗!??!").forward(request,response);   
                  }
              }
          }



          web.xml配置


          <?xml version="1.0" encoding="UTF-8"?>
          <web-app version="2.5"
              xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
              http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
            
             
              <servlet>
                <servlet-name>
                Login
                </servlet-name>
               
                <servlet-class>
                  com.rise.LoginServlet
                  </servlet-class>
               </servlet>
           
           
               <servlet-mapping>
                <servlet-name>
                 Login
                </servlet-name>
                <url-pattern>
                /test1

                </url-pattern>

               </servlet-mapping>
             
             
             
            <welcome-file-list>
              <welcome-file>index.jsp</welcome-file>
            </welcome-file-list>
          </web-app>



          我理解web.xml的作用就是將頁(yè)面和后臺(tái)程序正確連接!!!



          通過(guò)一張圖片說(shuō)明我理解的web.xml的作用






          以上的內(nèi)容是我自己對(duì)web.xml的理解,我覺(jué)得很簡(jiǎn)單,但真正寫(xiě)程序的時(shí)候部署程序是非常復(fù)雜的!

          posted @ 2010-12-11 20:43 tovep 閱讀(6314) | 評(píng)論 (2)編輯 收藏
             

          什么是JDBC

          JDBC是由一組Java語(yǔ)言編寫(xiě)的類(lèi)和接口組成,用來(lái)處理關(guān)系數(shù)據(jù)庫(kù)!利用JDBC的API,可用Java語(yǔ)法去訪問(wèn)各種各樣的SQL數(shù)據(jù)庫(kù)。
          個(gè)人認(rèn)為:
          把JDBC當(dāng)做是一門(mén)連接Java程序連接數(shù)據(jù)庫(kù)的技術(shù)不如把JDBC當(dāng)做連接程序和數(shù)據(jù)庫(kù)的橋梁。

          以下我要寫(xiě)的例子是用純Java的Driver來(lái)連接數(shù)據(jù)庫(kù)的方式。連接的數(shù)據(jù)庫(kù)是mysql。


          JDBC編程步驟


                 1.加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)(jar文件)
                      //需要下載一個(gè)數(shù)據(jù)庫(kù)的jar包,并導(dǎo)入相應(yīng)的JDBC項(xiàng)目中,創(chuàng)建路徑!
                      Class.forName("com.mysql.jdbc.Driver");
                
                 2.獲得數(shù)據(jù)庫(kù)連接
                      DriverManager.getConnection("jdbc:mysql://Database_IP:3306/DATABASE","DATAROOT","PASSWORD");//返回Connection————獲得數(shù)據(jù)庫(kù)連接
                 
                 3.創(chuàng)建語(yǔ)句
                      String sql = "SQL_TORUNNING";
                      向DATABASE發(fā)送一個(gè)執(zhí)行語(yǔ)句
                      Statement stmt = conn.createStatement();//創(chuàng)建一個(gè) Statement 對(duì)象來(lái)將 SQL 語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù).
                           Statement—————SQL_RUNNING!!!
                
                 4.執(zhí)行查詢(xún)
                      ResultSet rs = Statement.executeQuery(SQL_RUNNING);//執(zhí)行SQL_RUNNING命令,返回ResultSet
                      //如果執(zhí)行的數(shù)據(jù)庫(kù)語(yǔ)句不是對(duì)數(shù)據(jù)庫(kù)中的內(nèi)容進(jìn)行修改的話(huà),則用 Statement.executeQuery()
                      //如果執(zhí)行的數(shù)據(jù)庫(kù)語(yǔ)句是修改數(shù)據(jù)庫(kù)中的內(nèi)容進(jìn)行修改的話(huà),則用 Statement.executeUpdate()
                      //當(dāng)然他們返回值的類(lèi)型也不同!
                          //根據(jù)命令的不同Statement的方法也不同
                            
                              創(chuàng)建一個(gè)表      
                              Statement.execute(create a table)
                             
                              增刪改查Insert、update、delete...
                              Statement.executeUpdate()
                            
                              查詢(xún)語(yǔ)句Select
                              Statement.executeQuery(Select);
                            
                 5.遍歷結(jié)果集
                      while(ResultSet.next()){
                          ResultSet.getInt(int);
                          ResultSet.getString(int);
                          ......
                      }
                 
                 
                 6.關(guān)閉數(shù)據(jù)庫(kù)連接
                         Connection.close();
               
                

          步驟分析


          (圖一)


          1.加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)

                  
                   我們來(lái)看圖一,工廠和幾個(gè)農(nóng)村之間有一條河,不能夠直接進(jìn)行溝通,工廠就相當(dāng)于一個(gè)Java程序,而幾個(gè)農(nóng)村就相當(dāng)于不同的數(shù)據(jù)庫(kù);
                   工廠為B村生產(chǎn)一些材料,但是生產(chǎn)出來(lái)之后并不能直接交給B村,然后工廠的廠長(zhǎng)就想在工廠和B村之間架設(shè)一座橋梁來(lái)運(yùn)送生產(chǎn)出來(lái)的材料——我們大可把數(shù)據(jù)庫(kù)驅(qū)動(dòng)加載當(dāng)做這個(gè)架設(shè)橋梁的想法。


                   在程序中我們要怎么做呢?   
                   在加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)的時(shí)候,必須要將相應(yīng)的mysql-connector-java-5.0.4-bin.jar包,然后將jar包導(dǎo)入相應(yīng)的項(xiàng)目中如下圖
                  
                   在mysql-connector-java-5.0.4-bin.jar右擊建立路徑,就相當(dāng)于import的過(guò)程——我不確定這么說(shuō)對(duì)不對(duì),但我是這么理解的。
                   建立路徑后,你的項(xiàng)目將出現(xiàn)一個(gè)新的文件,如下圖
                  
                   這樣的話(huà),你就可以順利加載數(shù)據(jù)庫(kù)驅(qū)動(dòng),否則當(dāng)你在運(yùn)行的時(shí)候會(huì)出現(xiàn)找不到Driver.class的異常,也就是無(wú)法加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)。
                       Class.forName("com.mysql.jdbc.Driver");



          2.獲得數(shù)據(jù)庫(kù)連接

                  
                   既然廠長(zhǎng)有想法和B村之間架設(shè)一座橋梁,那就要和B村商量一下??!然后,廠長(zhǎng)就要去河的對(duì)岸,那條河呢?就是在工廠和B村之間的那條河(這條河就相當(dāng)于Database_IP),然后去找B村的村長(zhǎng)(在這里要明白是B村的村長(zhǎng)不是A村的,所以不能找錯(cuò)了!!!),找到B村村長(zhǎng),“我要在工廠和B村之間建設(shè)一座橋,來(lái)運(yùn)輸我們的東西”,下一步談的當(dāng)然是條件了,工廠老板說(shuō)“我要B村出資90%,剩下的由工廠出?。?#8221;村長(zhǎng)當(dāng)然不干了,這橋當(dāng)然也就沒(méi)法建設(shè)了!!!所以只有當(dāng)兩者都滿(mǎn)意的情況下才可以建設(shè)橋梁(比如,各處50%)其實(shí)談條件的過(guò)程就相當(dāng)于驗(yàn)證數(shù)據(jù)庫(kù)的"DATAROOT"和"PASSWORD"!!!只有兩者都正確的情況下才可以進(jìn)行下一步的計(jì)劃——也就是建設(shè)橋梁?。。?br />
                   在程序中的過(guò)程如下:
                   Connection conn = null;
                   conn = DriverManager.getConnection("jdbc:mysql://Database_IP:3306/DATABASE","DATAROOT","PASSWORD");
                   //返回Connection————獲得數(shù)據(jù)庫(kù)連接


          3.創(chuàng)建語(yǔ)句


                   橋已經(jīng)建好了,然后工廠要準(zhǔn)備一些卡車(chē)來(lái)運(yùn)輸生產(chǎn)的貨物,然后農(nóng)村需要根據(jù)不同的貨物來(lái)處理這些貨物,有些貨物直接卸在B村就可以了,但有些貨物卸在B村之后,B村要做一些處理然后運(yùn)回工廠?。?!
                 
                   這個(gè)過(guò)程在程序是怎么體現(xiàn)的呢?
                   String sql = "SQL_TORUNNING";
                   向DATABASE發(fā)送一個(gè)執(zhí)行語(yǔ)句
                   Statement stmt = conn.createStatement();//創(chuàng)建一個(gè) Statement 對(duì)象來(lái)將 SQL 語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù).
                   Statement—————SQL_RUNNING!!!


          4.處理數(shù)據(jù)庫(kù)發(fā)送來(lái)的消息

                   如果工廠運(yùn)輸?shù)紹村的貨物,只要B村的村長(zhǎng)給工廠開(kāi)一張條就行了;但也會(huì)有一些貨物需要運(yùn)回工廠??!

                   在程序中:
                   ResultSet rs = Statement.executeQuery(SQL_RUNNING);//執(zhí)行SQL_RUNNING命令,返回ResultSet
                   //如果執(zhí)行的數(shù)據(jù)庫(kù)語(yǔ)句不是對(duì)數(shù)據(jù)庫(kù)中的內(nèi)容進(jìn)行修改的話(huà),則用 Statement.executeQuery()——需要返回一些貨物
                   //如果執(zhí)行的數(shù)據(jù)庫(kù)語(yǔ)句是修改數(shù)據(jù)庫(kù)中的內(nèi)容進(jìn)行修改的話(huà),則用 Statement.executeUpdate()——開(kāi)張條就行了
                   //當(dāng)然他們返回值的類(lèi)型也不同!
                   //根據(jù)命令的不同Statement的方法也不同
                            
                           創(chuàng)建一個(gè)表      
                           Statement.execute(create a table)
                             
                           增刪改查Insert、update、delete...
                           Statement.executeUpdate()
                            
                           查詢(xún)語(yǔ)句Select
                           Statement.executeQuery(Select);
                            


          5.處理數(shù)據(jù)庫(kù)傳回的內(nèi)容


                  這個(gè)過(guò)程由工廠完成,如果是返回的一些貨物的話(huà),工廠要做一些處理。
           
                  處理的過(guò)程:
                          while(ResultSet.next()){
                          ResultSet.getInt(int);
                          ResultSet.getString(int);
                          ......
                      }

          6.關(guān)閉數(shù)據(jù)庫(kù)

                  這樣的話(huà),工廠和B村的交易就完成,在現(xiàn)實(shí)世界中工廠和B村之間的橋梁不會(huì)被拆除,因?yàn)榻ㄒ蛔鶚虻拇鷥r(jià)很大,但在程序和數(shù)據(jù)庫(kù)之間架設(shè)一座橋梁簡(jiǎn)直太簡(jiǎn)單了,所以在這里我們要把這座橋梁拆除。

                  Connection.close();




          簡(jiǎn)單的舉了一個(gè)例子來(lái)說(shuō)明數(shù)據(jù)庫(kù)和程序之間是怎么連接的,望對(duì)大家有所幫助。








          posted @ 2010-12-09 18:37 tovep 閱讀(1676) | 評(píng)論 (1)編輯 收藏
          SQL語(yǔ)言是操作數(shù)據(jù)庫(kù)的基礎(chǔ)語(yǔ)言,對(duì)于不同的數(shù)據(jù)庫(kù)語(yǔ)言產(chǎn)品,SQL語(yǔ)言大多是通用的,本篇博客旨在介紹一些最常用的SQL語(yǔ)句。希望對(duì)大家能有所幫助。
          注:
          本文中的紅色字體黃色背景的內(nèi)容為SQL語(yǔ)句??!
          笨人也是菜鳥(niǎo),如果我寫(xiě)的有錯(cuò)誤,大家一定要指出來(lái)?。。。『昧?,廢話(huà)不說(shuō)了,切入正題:

          首先,使用status查看MySQL當(dāng)前的信息



          1.使用show databases;語(yǔ)句查看當(dāng)前數(shù)據(jù)庫(kù):
              



          2.使用create database DATABASE_NAME;語(yǔ)句來(lái)創(chuàng)建DATABASE_NAME數(shù)據(jù)庫(kù)



          這樣,我們創(chuàng)建好了一個(gè)名字為database_name的數(shù)據(jù)庫(kù)。
          注:數(shù)據(jù)庫(kù)語(yǔ)句對(duì)字母大小寫(xiě)不敏感!


          3.使用use DATABASE_NAME;切換到使用DATABASE_NAME數(shù)據(jù)庫(kù)模式。




          4.在database_name數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)表:

            create table if not exists table_name      -- 如果表table_name不存在則創(chuàng)建       
               (id int primary key auto_increment,     -- 創(chuàng)建int類(lèi)型為主鍵,且自動(dòng)增長(zhǎng)      
                name varchar(200) not null,            -- 創(chuàng)建字符類(lèi)型的列,最大長(zhǎng)度是200字節(jié)
                age int(3),                            -- 創(chuàng)建int類(lèi)型,長(zhǎng)度為3個(gè)字節(jié)         
                sex varchar(2),                        -- 創(chuàng)建字符類(lèi)型,長(zhǎng)度是2個(gè)字節(jié)        
                salary float(11,2),                    -- 創(chuàng)建float類(lèi)型的列,長(zhǎng)度為2個(gè)字節(jié)   

                address varchar(50),                   -- 創(chuàng)建字符類(lèi)型,長(zhǎng)度為50個(gè)字節(jié)       
                birthday date                          -- 創(chuàng)建日期類(lèi)型                       
               );                                                                            






          這樣就創(chuàng)建好了一張表,可以用 describe 或則 desc來(lái)查看表的結(jié)構(gòu)
          describe table_name;
          desc table_name;   
              



              

          這樣數(shù)據(jù)就創(chuàng)建好了一張表,我們可以用show tables; 來(lái)查看數(shù)據(jù)庫(kù)中所有表

          然后,我們就可以看見(jiàn)我們創(chuàng)建的表
          ====================================================================================
          數(shù)據(jù)庫(kù)最具核心的用法——對(duì)數(shù)據(jù)庫(kù)表的數(shù)據(jù)的增刪改查

          向表中增加數(shù)據(jù)(要了加入表的結(jié)構(gòu),看哪項(xiàng)可以為空)
          insert table_name (name,age,sex) values ('tovep',22,'男');

          向表中加入數(shù)據(jù)的時(shí)候,并不是要把所有的信息都要寫(xiě)近期,只要表中結(jié)構(gòu)設(shè)置為可以為空的都
          可以不寫(xiě)!!
          id不用寫(xiě),因?yàn)樗亲詣?dòng)增長(zhǎng)的!

          要想查看表中的內(nèi)容,可以用select語(yǔ)句———為了說(shuō)明下面的情況,我加入了多條信息
          select * from table_name;      -- 將table_name表中的所有數(shù)據(jù)都打印出來(lái)





          select name from table_name;      --查看所有人的名字



          select * from table_name where id<5;     --將表中id小于100的都打印出來(lái)




          在使用select 語(yǔ)句查詢(xún)的時(shí),常常用到別名
          select t.name,t.id,t.age from table_name as t;



          select 語(yǔ)句中的where表示查詢(xún)的條件
          where中還可以使用like與"%"對(duì)字符類(lèi)型的列進(jìn)行模糊查詢(xún)
          select * from table_name where name like 't%';






          update語(yǔ)句:修改數(shù)據(jù)

          update 表名 set 字段名 =  '修改的值'

          update table_name set name='tvoep1' where id>2;




          刪除用
          delete from 表名 where 判斷信息

          delete from table_name where id=5;


          這樣的話(huà)就刪除了id=5的信息


          ====================================================================================


          使用drop 來(lái)刪除表或者數(shù)據(jù)庫(kù)
          drop table table_name;




          drop database database_name;













          posted @ 2010-12-06 11:04 tovep 閱讀(2319) | 評(píng)論 (2)編輯 收藏
          主頁(yè)
          主站蜘蛛池模板: 尉犁县| 长兴县| 深泽县| 新化县| 景宁| 宿州市| 同仁县| 来凤县| 海晏县| 呼图壁县| 漳州市| 常宁市| 远安县| 海阳市| 潜山县| 汤原县| 沽源县| 泾源县| 防城港市| 定安县| 扎鲁特旗| 金秀| 微山县| 鄂尔多斯市| 广饶县| 马边| 江都市| 永寿县| 绥棱县| 醴陵市| 松江区| 垦利县| 定结县| 乾安县| 福建省| 河源市| 通海县| 渭源县| 富川| 碌曲县| 桃园市|