<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    51CTO

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    MVC

    MVC

    MVC含義

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

    MVC 組成部分

    Model 模型

    View 視圖

    Controller 控制器 

    MVC就是三種組成部分的縮寫。

    MVC 不同模塊的功能

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

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

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

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

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

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




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

    DAO  模式

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

    Factory  工廠

    Factory 工廠在這里也可以說成是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)單的介紹了一下,我沒有加入一些詳細(xì)的例子,因?yàn)槲矣X得你在接觸MVC的時(shí)候,最好先了解MVC的編程思想,如果你要了解MVC的編程思想之后,你再接觸MVC的編程時(shí),你就會(huì)覺得特別簡(jiǎn)單。

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

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

    通過以下Servlet程序和web.xml來說明web.xml的配置以及過程


    創(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)簽中要說明的是:
    <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)程序正確連接?。?!



    通過一張圖片說明我理解的web.xml的作用






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

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

    什么是JDBC

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

    以下我要寫的例子是用純Java的Driver來連接數(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ì)象來將 SQL 語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù).
                     Statement—————SQL_RUNNING!!!
          
           4.執(zhí)行查詢
                ResultSet rs = Statement.executeQuery(SQL_RUNNING);//執(zhí)行SQL_RUNNING命令,返回ResultSet
                //如果執(zhí)行的數(shù)據(jù)庫(kù)語(yǔ)句不是對(duì)數(shù)據(jù)庫(kù)中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeQuery()
                //如果執(zhí)行的數(shù)據(jù)庫(kù)語(yǔ)句是修改數(shù)據(jù)庫(kù)中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeUpdate()
                //當(dāng)然他們返回值的類型也不同!
                    //根據(jù)命令的不同Statement的方法也不同
                      
                        創(chuàng)建一個(gè)表      
                        Statement.execute(create a table)
                       
                        增刪改查Insert、update、delete...
                        Statement.executeUpdate()
                      
                        查詢語(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)

            
             我們來看圖一,工廠和幾個(gè)農(nóng)村之間有一條河,不能夠直接進(jìn)行溝通,工廠就相當(dāng)于一個(gè)Java程序,而幾個(gè)農(nóng)村就相當(dāng)于不同的數(shù)據(jù)庫(kù);
             工廠為B村生產(chǎn)一些材料,但是生產(chǎn)出來之后并不能直接交給B村,然后工廠的廠長(zhǎng)就想在工廠和B村之間架設(shè)一座橋梁來運(yùn)送生產(chǎn)出來的材料——我們大可把數(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的過程——我不確定這么說對(duì)不對(duì),但我是這么理解的。
             建立路徑后,你的項(xiàng)目將出現(xiàn)一個(gè)新的文件,如下圖
            
             這樣的話,你就可以順利加載數(shù)據(jù)庫(kù)驅(qū)動(dòng),否則當(dāng)你在運(yùn)行的時(shí)候會(huì)出現(xiàn)找不到Driver.class的異常,也就是無法加載數(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è)一座橋,來運(yùn)輸我們的東西”,下一步談的當(dāng)然是條件了,工廠老板說“我要B村出資90%,剩下的由工廠出!!”村長(zhǎng)當(dāng)然不干了,這橋當(dāng)然也就沒法建設(shè)了?。?!所以只有當(dāng)兩者都滿意的情況下才可以建設(shè)橋梁(比如,各處50%)其實(shí)談條件的過程就相當(dāng)于驗(yàn)證數(shù)據(jù)庫(kù)的"DATAROOT"和"PASSWORD"?。?!只有兩者都正確的情況下才可以進(jìn)行下一步的計(jì)劃——也就是建設(shè)橋梁!??!

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


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

             如果工廠運(yùn)輸?shù)紹村的貨物,只要B村的村長(zhǎng)給工廠開一張條就行了;但也會(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)行修改的話,則用 Statement.executeQuery()——需要返回一些貨物
             //如果執(zhí)行的數(shù)據(jù)庫(kù)語(yǔ)句是修改數(shù)據(jù)庫(kù)中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeUpdate()——開張條就行了
             //當(dāng)然他們返回值的類型也不同!
             //根據(jù)命令的不同Statement的方法也不同
                      
                     創(chuàng)建一個(gè)表      
                     Statement.execute(create a table)
                       
                     增刪改查Insert、update、delete...
                     Statement.executeUpdate()
                      
                     查詢語(yǔ)句Select
                     Statement.executeQuery(Select);
                      


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


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

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

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

            Connection.close();




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








    posted @ 2010-12-09 18:37 tovep 閱讀(1663) | 評(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ǔ)句!!
    笨人也是菜鳥,如果我寫的有錯(cuò)誤,大家一定要指出來?。。?!好了,廢話不說了,切入正題:

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



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



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



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


    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類型為主鍵,且自動(dòng)增長(zhǎng)      
          name varchar(200) not null,            -- 創(chuàng)建字符類型的列,最大長(zhǎng)度是200字節(jié)
          age int(3),                            -- 創(chuàng)建int類型,長(zhǎng)度為3個(gè)字節(jié)         
          sex varchar(2),                        -- 創(chuàng)建字符類型,長(zhǎng)度是2個(gè)字節(jié)        
          salary float(11,2),                    -- 創(chuàng)建float類型的列,長(zhǎng)度為2個(gè)字節(jié)   

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






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



        

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

    然后,我們就可以看見我們創(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í)候,并不是要把所有的信息都要寫近期,只要表中結(jié)構(gòu)設(shè)置為可以為空的都
    可以不寫??!
    id不用寫,因?yàn)樗亲詣?dòng)增長(zhǎng)的!

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





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



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




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



    select 語(yǔ)句中的where表示查詢的條件
    where中還可以使用like與"%"對(duì)字符類型的列進(jì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;


    這樣的話就刪除了id=5的信息


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


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




    drop database database_name;













    posted @ 2010-12-06 11:04 tovep 閱讀(2309) | 評(píng)論 (2)編輯 收藏
    主頁(yè)
    主站蜘蛛池模板: 亚洲乱码国产乱码精华| 成年免费大片黄在线观看岛国| 亚洲一区二区无码偷拍| 国产亚洲精品岁国产微拍精品| 天天摸天天碰成人免费视频| 久久精品成人免费看| 日本高清免费中文在线看| 亚洲综合欧美色五月俺也去| 亚洲国产天堂久久综合网站| 亚洲精品成人区在线观看| 日本大片在线看黄a∨免费| 无码国产精品一区二区免费 | 色婷婷亚洲一区二区三区| 亚洲国产日韩在线人成下载| 亚洲va久久久噜噜噜久久狠狠| 亚洲国产黄在线观看| 啦啦啦手机完整免费高清观看 | 中文亚洲AV片不卡在线观看| 日韩免费无砖专区2020狼| 国产va免费精品观看精品| 亚洲黄色免费观看| 日韩免费观看一区| 国产精品区免费视频| 中文字幕无线码中文字幕免费 | 亚洲另类激情专区小说图片| 永久在线毛片免费观看| 日韩欧美一区二区三区免费观看| 最近中文字幕大全免费视频| 一级毛片免费观看不卡的| 成全高清在线观看免费 | 亚洲AV无码一区二区乱孑伦AS| 国产成人A亚洲精V品无码| 亚洲福利在线播放| 亚洲天堂免费在线视频| 亚洲成人高清在线| 亚洲国产综合精品一区在线播放| 日本中文一区二区三区亚洲| 亚洲精品高清一二区久久| 国产亚洲av片在线观看18女人| 国产专区一va亚洲v天堂| 美腿丝袜亚洲综合|