zhangsenwei

          張森煒的博客

          聯(lián)系 管理
            19 Posts :: 8 Stories :: 55 Comments :: 0 Trackbacks
            先嘮叨兩句:

                  之前一直在搞開發(fā),一次偶然的機(jī)會(huì)一下成了講師。在當(dāng)講師的時(shí)間里我體會(huì)到了一個(gè)講師和一個(gè)開發(fā)人員的區(qū)別,在公司開發(fā)項(xiàng)目時(shí)我個(gè)人注重功能的實(shí)現(xiàn),關(guān)于技術(shù)是枝零八碎,就是我們說(shuō)的什么都知道,但都沒有細(xì)細(xì)的研究過(guò)。就這次偶然的機(jī)會(huì)讓我有機(jī)會(huì)對(duì)技術(shù)進(jìn)行了一下系統(tǒng)整理。但是在我成為講師的日子里發(fā)現(xiàn)我的學(xué)員都是開發(fā)經(jīng)驗(yàn)少,代碼寫的不多的,自己認(rèn)為很簡(jiǎn)單的東西應(yīng)該自己能夠搞定但結(jié)果恰恰相反,之前一直想找機(jī)會(huì)寫一系列類似系統(tǒng)的文章,但白天實(shí)在沒有時(shí)間,這次我也算是下了狠心,哪怕晚上多熬熬也要把他寫出來(lái)。
                 這一系列文章我不想去介紹太多的新技術(shù)和一些非常炫的頁(yè)面效果,而是想為初學(xué)者或者想學(xué)習(xí)ssh編程的人提供一條快速入門的通道,這也就是我為什么要把本系列文章的名字起為《SSH快速開發(fā)與整合》的原因。
                 由于之前沒有寫過(guò)這么系統(tǒng)的文章,所以在書寫過(guò)程中會(huì)有一些不足之處,希望大家多多擔(dān)待。

          好了廢話不說(shuō)了,我們開始正式的內(nèi)容。

          本系列文章中將會(huì)使用到 MyEclipse6.5 Bule 版開發(fā)工具,Tomcat6.0 Web服務(wù)和Mysql6.0數(shù)據(jù)庫(kù),這些資源都可以從網(wǎng)上找到。




          第一部分
          Struts

          1 基礎(chǔ)知識(shí)回顧

          為了能夠更清晰的了解struts 框架工作原理,我們需要對(duì) JSP 部分知識(shí)點(diǎn)進(jìn)行回顧。

          1.1   web應(yīng)用程序中的Model1Model2模型

                  在最早的 Java Web 應(yīng)用程序中,JSP文件幾乎擔(dān)任了所有的工作如圖1-1所示。其中包括了頁(yè)面的顯示、請(qǐng)求跳轉(zhuǎn)的控制、業(yè)務(wù)的處理等等,這種方式在實(shí)際的項(xiàng)目開發(fā)中項(xiàng)目要是代碼量少點(diǎn)也就無(wú)所謂了,如果代碼量大的情況下要用這種方式開發(fā)出來(lái)的程序html代碼、java代碼、javascript腳本代碼混在一起對(duì)于后期代碼的維護(hù)是一件非常麻煩的事。所以這種方式的開發(fā)沒有被業(yè)界給出什么明確的定義。



          為了解決這種問(wèn)題Sun公司制定了兩種架構(gòu)模式 Model 1 Model 2
           

          1.1.1          Model 1



           

          為了解決直接在JSP頁(yè)面上寫代碼可讀性差的問(wèn)題,我們將原先寫在JSP頁(yè)面上的業(yè)務(wù)邏輯代碼提出來(lái)寫到JavaBean中如圖1-2。此時(shí)JSP充當(dāng)了視圖層為客戶端提供了請(qǐng)求和響應(yīng),再由Jsp調(diào)用JavaBean進(jìn)行處理業(yè)務(wù)邏輯。這種架構(gòu)方式我們往往稱之為 Model 1

          Model1中,我們可以看出 Jsp 不但完成了對(duì)客戶端的請(qǐng)求和應(yīng)答工作還擔(dān)任著調(diào)用不同業(yè)務(wù)類的請(qǐng)求跳轉(zhuǎn)工作。但這個(gè)架構(gòu)比起直接在JSP頁(yè)面上寫代碼已經(jīng)好多了,Model1中已經(jīng)將業(yè)務(wù)代碼從頁(yè)面中的控制代碼和Html代碼中進(jìn)行了分離。至少當(dāng)程序業(yè)務(wù)代碼出現(xiàn)問(wèn)題時(shí),我們不再會(huì)到JSP頁(yè)面中去尋找修改業(yè)務(wù)邏輯代碼了。

          此時(shí)Model1比起直接在JSP頁(yè)面上寫代碼已經(jīng)強(qiáng)多了,但是對(duì)于大型項(xiàng)目而言還是不能夠滿足,畢竟JSP頁(yè)面中還有控制跳轉(zhuǎn)的代碼存在。

           

          1.1.1          Model 2


           

          為了解決Mdel1中控制器代碼和HTMLJavaScript代碼寫在一起,Sun公司制定了Model2,在Model2中引入了“控制器”概念,而控制器往往由Servlet充當(dāng)。此時(shí)JSP頁(yè)面中只剩下了HTML代碼和一些客戶端javascript腳本代碼,請(qǐng)求由控制器Servlet進(jìn)行控制跳轉(zhuǎn)到不同的JAVABean或者JSP頁(yè)面,這樣Jsp中只提供對(duì)客戶的界面視圖我們用英文單詞View表示,而Servlet只完成請(qǐng)求的跳轉(zhuǎn)工作我們可以用英文Controller表示,JavaBean中完成業(yè)務(wù)邏輯和數(shù)據(jù)的封裝我們可以用Model表示,這樣我們將 View - Controller - Model三個(gè)單詞的第一個(gè)字母提取出來(lái)就是我們所謂的 MVC 模式了。

           

          1.2  MVC的概述

          MVCModel(模型) - View視圖()-Controller(控制器)三個(gè)單詞的縮寫。MVCJ2EE的一種模式,是針對(duì)于整個(gè)應(yīng)用程序結(jié)構(gòu)而言的,所以MVC模式從尺度上來(lái)講要比我們平時(shí)所說(shuō)的java設(shè)計(jì)模式要大。關(guān)于java設(shè)計(jì)模式在此就不做過(guò)多的講解了,讀者可以參考閻宏博士所寫的《Java與模式》

          J2EE中有很多技術(shù)都可以實(shí)現(xiàn)MVC模式比如我們馬上要學(xué)習(xí)的struts框架技術(shù)就是MVC的一種實(shí)現(xiàn),還有 JSFWebWork等等。

              接下來(lái)我們需要搞清楚的一個(gè)問(wèn)題就是J2EEMVCStruts他們之間樣的關(guān)系。在此我們拿 宇宙 、太陽(yáng)系 、地球來(lái)進(jìn)行說(shuō)明,我們都知道我們的地球是隸屬于太陽(yáng)系的,但是這個(gè)太陽(yáng)系中不僅僅只有地球,還有火星、木星等等星球構(gòu)成。例子中的太陽(yáng)系就相當(dāng)于MVC模式而地球相當(dāng)于struts,從而我們知道MVC模式并不是只有struts能夠?qū)崿F(xiàn),還有其他很多技術(shù)可以實(shí)現(xiàn),像上面提到過(guò)的JSFWebWork等等技術(shù),所以我們只能夠說(shuō)strutsMVC模式的一種實(shí)現(xiàn)方式。而MVCJ2EE之間的關(guān)系就像太陽(yáng)系和宇宙的關(guān)系一樣,宇宙中有很多類似于太陽(yáng)系的星系,所以MVC知識(shí)J2EE中的一種模式,如圖1-4所示:





           

          1.3 配置一個(gè) Servlet

          為了讓讀者對(duì)程序有更深的理解,在程序?qū)嵗腥慷疾扇∈止ご罱ê团渲谩?/span>(此處作者使用的是MyEclipse6.5Bule版本)

               首先我們?cè)?/span>MyEclipse中創(chuàng)建一個(gè)web應(yīng)用程序步驟如下:

          (1) 選擇 File 單 → New Project ”,如圖1-5所示。


           

          (2)在彈出的New Project窗口中,選擇“Web Project”,然后點(diǎn)擊“Next”按鈕,如圖1-6所示。

                
                                     圖1-6                                                                                 圖1-7
           

          (3)在“New Web Project”對(duì)話框的“Project Name:”為web工程起個(gè)名字,此處我們起名為 frist_Servlet 。將J2EE Specification Level選中 Java EE5.0 其他的不需要改變,默認(rèn)就好了,單擊“Finish”按鈕,如圖 1-7 所示。

          (4)對(duì)準(zhǔn)創(chuàng)建好的web工程下的“src目錄右鍵” → 選擇“New” → 選擇“Class,如圖1-8所示。



           

          (5)在彈出的New Java Class對(duì)話框中的 Name:”中輸入HelloWord,其他的不需改變,點(diǎn)擊“Finish”按鈕,如圖1-9所示。


           

          (6)修改HelloWorld類的代碼,讓其繼承于javax.servlet.http.HttpServlet類,代碼如下:


          1 package com.study.struts.;
          2 
          3 import javax.servlet.http.HttpServlet;
          4 
          5 public class HelloWorld extends HttpServlet{
          6 
          7 }
          8 
           

          注意:在web應(yīng)用程序中要想使一個(gè)普通的Class類變成一個(gè)Serlvet 就必須讓這個(gè)普通類繼承與javax.servlet.http.HttpServlet類。

           

          (7)HelloWorld重寫父類javax.servlet.http.HttpServlet中的“doGet 方法,并輸出“HelloWorld”,具體代碼如下:

           1 import javax.servlet.ServletException;
           2 import javax.servlet.http.HttpServlet;
           3 import javax.servlet.http.HttpServletRequest;
           4 import javax.servlet.http.HttpServletResponse;
           5 
           6 public class HelloWorld extends HttpServlet {
           7     @Override
           8     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
           9             throws ServletException, IOException {
          10         System.out.println("HelloWorld");
          11     }
          12 }
          13 
           

          (8)打開“WebRoot”目錄 WEB-INFweb.xml”文件,如圖所示。在打開的“web.xml”文件中配置 HelloWorld

              
           1 <?xml version="1.0" encoding="UTF-8"?>
           2 <web-app version="2.5" 
           3     xmlns="http://java.sun.com/xml/ns/javaee" 
           4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
           6     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
           7     <servlet>
           8        <servlet-name>helloWorld</servlet-name>
           9        <servlet-class> com.study.struts.HelloWorld</servlet-class>
          10     </servlet>
          11     <servlet-mapping>
          12       <servlet-name>helloWorld</servlet-name>
          13       <url-pattern>*.do</url-pattern>
          14     </servlet-mapping>
          15   <welcome-file-list>
          16     <welcome-file>index.jsp</welcome-file>
          17   </welcome-file-list>
          18 </web-app>
          19 

            (9)打開“WebRoot”目錄中的“index.jsp”文件,并修改代碼如下:
           1 <%@ page language="java" pageEncoding="GB18030"%>
           2 <html>
           3     <head>
           4         <title>手工配置的第一個(gè)Servlet</title>
           5     </head>
           6     <body>
           7          <href="click.do">點(diǎn)擊測(cè)試Servlet程序</a>
           8     </body>
           9 </html>
          10 
           

          注意:在“index.jsp”頁(yè)面第一句代碼中:

          <%@ page language="java" pageEncoding="GB18030"%>

                有一個(gè)pageEncoding 屬性,他表示當(dāng)前jsp頁(yè)面的編碼格式,GB18030為編碼集,pageEncoding 屬性默認(rèn)為ISO-8859-1編碼集,而ISO-8859-1編碼中是不支持中文字符的,換句話說(shuō)也就是如果當(dāng)前頁(yè)面pageEncoding="ISO-8859-1" 那么當(dāng)前頁(yè)面中是不允許出現(xiàn)中文字符的,所以此處我們將pageEncoding的值改為“GB18030。在Java編程中常見的編碼集有以下幾種:

          編碼集名稱

          是否支持中文

          ISO-8859-1

          不支持

          UTF-8

          支持

          GB2312

          支持

          GBK

          支持

          GB18030

          支持

           

          (10) 部署應(yīng)用程序,如圖1-11所示。


           

          (11)運(yùn)行web程序,如圖1-12所示,在 IE 瀏覽器地址欄輸入http://localhost:8080/frist_Servlet 如圖1-13所示。

           

                  
                         圖1-12                                                                                          圖1-13
           

          由于我們?cè)?/span>9步中寫過(guò)  <a href="click.do">點(diǎn)擊測(cè)試Servlet程序</a>  代碼當(dāng)我們點(diǎn)擊超鏈接“點(diǎn)解測(cè)試Servlet程序”時(shí),瀏覽器將會(huì)發(fā)出一個(gè) click.do 的請(qǐng)求,此時(shí)web應(yīng)用程序會(huì)接收到瀏覽器發(fā)出的click.do請(qǐng)求,因?yàn)槲覀冊(cè)诘?/span>8步中為web.xml配置過(guò)如下代碼:

          1 <servlet-mapping>
          2    <servlet-name>helloWorld</servlet-name>
          3    <url-pattern>*.do</url-pattern>
          4 </servlet-mapping>
          5 
           

          其中 <url-pattern>*.do</url-pattern> 表示只要jsp頁(yè)面發(fā)出的所有以 .do 結(jié)尾的請(qǐng)求都會(huì)被攔截。攔截后的請(qǐng)求會(huì)自動(dòng)找到 <servlet-name>helloWorld</servlet-name> 并取得到值 helloWorld ,并會(huì)帶著“helloWorld”值到下面這段代碼去尋找<servlet>的子標(biāo)簽<servlet-name>的值和“helloWorld”相等的一項(xiàng)。

          1 <servlet>
          2 <servlet-name>helloWorld</servlet-name>
          3 <servlet-class> com.study.struts.HelloWorld</servlet-class>
          4 </servlet>
          5 
           

          當(dāng)請(qǐng)求被尋找到后程序會(huì)自動(dòng)將請(qǐng)求跳轉(zhuǎn)到所對(duì)應(yīng)的<servlet-class>標(biāo)簽所配置的類中執(zhí)行doGet 方法,調(diào)用流程如圖1-14所示。


           

          程序最后會(huì)在Eclipse控制臺(tái)上打印“”,運(yùn)行結(jié)果如圖1-15所示:



          本文章為Zhangsenwei(張森煒)原創(chuàng),任何外部引用或摘抄請(qǐng)注明出處,并保持內(nèi)容和格式不變,未經(jīng)作者同意不得用于任何盈利目的,謝謝合作!
          posted on 2009-08-31 13:15 張森煒 閱讀(308) 評(píng)論(0)  編輯  收藏 所屬分類: SSH

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 北海市| 乐陵市| 礼泉县| 柏乡县| 明星| 琼结县| 开化县| 仁化县| 民丰县| 旌德县| 曲靖市| 承德市| 乐清市| 龙游县| 琼海市| 平利县| 镇雄县| 萨迦县| 商城县| 当涂县| 宁晋县| 安西县| 拉孜县| 承德市| 湄潭县| 高安市| 望都县| 新竹县| 鱼台县| 正镶白旗| 孝义市| 台中市| 云梦县| 靖边县| 南投县| 舒城县| 克东县| 洛宁县| 江永县| 达尔| 云龙县|