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

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

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

    posts - 4,comments - 15,trackbacks - 0

    原本的打算是在第二篇介紹JSP的基本語法,逛了一些壇子,這類的文章實(shí)在是太多了。就在blogjava里面,都有博友正在推出系列的講座。我一一翻閱過,所以覺得這里應(yīng)該講一些他們沒有講到的地方。如果您還不了解JSP的語法,并且對這個(gè)部分比較關(guān)注,您可以去alecwen的博客 看看,那里有alecwen博友有關(guān)JSP基本語法&用法的文章,比較簡潔實(shí)用。

    選擇什么樣的題材來寫第二篇呢?我在第一篇里面有提到“JSP需要經(jīng)過轉(zhuǎn)譯成servlet”,那干脆就在這里講講這個(gè)轉(zhuǎn)譯過程。對于網(wǎng)頁設(shè)計(jì)人員來說,這個(gè)部分的知識(shí)比較多余,也不適合沒有程序設(shè)計(jì)基礎(chǔ)的人看,對于程序設(shè)計(jì)人員來說,應(yīng)該可以加深您對JSP&Servlet的理解,最最重要的,我認(rèn)為有了這個(gè)部分的知識(shí),可以方便你進(jìn)行JSP的相關(guān)調(diào)試。從我現(xiàn)在的經(jīng)驗(yàn)來講,在不借助于大型的IDE的情況下(只為學(xué)習(xí)目的的話,我是不喜歡用大型IDE的,比如Netbean,Eclipse等等,一是太占資源,偶的本本跑起比較慢:(;二是對于新手往往會(huì)在太多的菜單選項(xiàng)里面迷失方向,甚至花很大精力在建立工程、添加\刪除工程文件等等事情上,難以專注于要學(xué)習(xí)的東西),JSP的調(diào)試是比較難的。雖然運(yùn)行方式非常的簡單,您只需要在瀏覽器地址欄輸入您發(fā)布的jsp文件路徑,回車即可測試,但如果JSP包含有錯(cuò)誤(包括編譯式錯(cuò)誤&運(yùn)行時(shí)異常),都會(huì)輸出一堆看不太懂的調(diào)用堆棧。堆棧里面往往會(huì)提及xxx.java文件的xxx行,但對于JSP開發(fā)來說,看不到這些文件,甚至不知道有這些文件的存在。所以,大多數(shù)情況下,JSP里面是不提倡寫太過復(fù)雜的java代碼的。

    好了,正式開始研究JSP到Servlet的轉(zhuǎn)換過程。接著上篇講的例子。在/webapp/hello.jsp(http://localhost:8080/tianlinux/hello.jsp)里邊有如下的代碼:

     

    1<% out.println("Hello, JSP/Servlet"%> 

     

    簡單的,只有一句代碼。我們在初學(xué)java的時(shí)候,寫一個(gè)hello world應(yīng)該都遠(yuǎn)遠(yuǎn)不止這點(diǎn)代碼,里面一定有文章。并且,您發(fā)現(xiàn)了嗎:第一次訪問hello.jsp,瀏覽器停頓了一下下,才顯示出了"Hello, JSP/Servlet"這句話,后面再次訪問,就不會(huì)再停頓了。是的,這正是因?yàn)榈谝淮卧L問jsp的時(shí)候,JSP有個(gè)轉(zhuǎn)譯的過程。這個(gè)過程包括以下幾個(gè)步驟:

    1、根據(jù)jsp文件生成java文件;

    2、調(diào)用編譯器對java文件進(jìn)行編譯;

    3、如果編譯通過,載入JVM運(yùn)行;

    4、將執(zhí)行結(jié)果返回。

    我們先看第一個(gè)步驟。由jsp轉(zhuǎn)化而成的java文件在什么位置呢?我們在Tomcat的安裝目錄下搜索一下,比如剛才的hello.jap,%tomcat%表示tomcat的安裝目錄,則在如下的路徑%tomcat%\work\Catalina\localhost\tianlinux\org\apache\jsp\找到了hello_jsp.java文件。打開看看。這里我們偏偏題,看看大家一般用什么文本編輯器?不要告訴我說您寫一個(gè)簡單的java文件都要用IDE哦,也不要告訴我您還在使用寒磣的notepad哦^_^,我推薦使用notepad++。功能跟UltraEdit基本類似,但UE是付費(fèi)的(雖然在偉大的祖國,基本上沒有需要真正付費(fèi)的,但誰知道這種天堂般的日子什么時(shí)候會(huì)到頭呢?),notepad++是完全免費(fèi)的,并且加入了sourceforge,遵從GPL,作者是臺(tái)灣人侯今吾,侯工可是學(xué)法國文學(xué)出生的哦~。在臺(tái)灣企業(yè)工作了2年多,跟很多臺(tái)灣籍工程師有所接觸,別的不說,感覺在敬業(yè)精神&技術(shù)能力上,大陸工程師還是普遍落后于海峽那邊的同胞的,這跟受到的教育&經(jīng)濟(jì)水平是有直接聯(lián)系的。扯遠(yuǎn)了,反正為了一句話,為了民族xxx產(chǎn)業(yè),為了實(shí)現(xiàn)自我xxx,也為了大把的銀子,大家一起努力了~。好了,打開那個(gè)hello_jsp.java了嗎?我們看到如下的代碼:

     1package org.apache.jsp;
     2
     3import javax.servlet.*;
     4import javax.servlet.http.*;
     5import javax.servlet.jsp.*;
     6
     7public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase
     8    implements org.apache.jasper.runtime.JspSourceDependent {
     9
    10  private static java.util.List _jspx_dependants;
    11
    12  public Object getDependants() {
    13    return _jspx_dependants;
    14  }

    15
    16  public void _jspService(HttpServletRequest request, HttpServletResponse response)
    17        throws java.io.IOException, ServletException {
    18
    19    JspFactory _jspxFactory = null;
    20    PageContext pageContext = null;
    21    HttpSession session = null;
    22    ServletContext application = null;
    23    ServletConfig config = null;
    24    JspWriter out = null;
    25    Object page = this;
    26    JspWriter _jspx_out = null;
    27    PageContext _jspx_page_context = null;
    28
    29
    30    try {
    31      _jspxFactory = JspFactory.getDefaultFactory();
    32      response.setContentType("text/html");
    33      pageContext = _jspxFactory.getPageContext(this, request, response,
    34         nulltrue8192true);
    35      _jspx_page_context = pageContext;
    36      application = pageContext.getServletContext();
    37      config = pageContext.getServletConfig();
    38      session = pageContext.getSession();
    39      out = pageContext.getOut();
    40      _jspx_out = out;
    41
    42 out.println("Hello, JSP/Servlet"); 
    43    }
     catch (Throwable t) {
    44      if (!(t instanceof SkipPageException)){
    45        out = _jspx_out;
    46        if (out != null && out.getBufferSize() != 0)
    47          out.clearBuffer();
    48        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
    49      }

    50    }
     finally {
    51      if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
    52    }

    53  }

    54}

    55
    56


    以目前的情況,我們并沒有必要把代碼一句一句的都去搞懂。因?yàn)榇蟛糠值拇a所有jsp文件轉(zhuǎn)換出來都是相同,是JSP容器已經(jīng)設(shè)定好的。所以我們只關(guān)注其中的部分。

    首先是import語句組。這里import了javax.servlet,注意這個(gè)包并不是JDK里面默認(rèn)包含的包,所以現(xiàn)在如果在cmd里面輸入javac hello_jsp.java(當(dāng)然要在這個(gè)文件的路徑下輸入!)可能會(huì)出現(xiàn)下面的畫面

     

    出現(xiàn)了找不到j(luò)avax.servlet這個(gè)包的情況,我的機(jī)機(jī)上就是這種情況。怎么辦呢?趕緊google一下解決辦法。

    1、在環(huán)境變量設(shè)置里面找到classpath,然后把%tomcat%/common/lib添加進(jìn)去。注意Tomcat的版本更新十分頻繁,如果版本不是5.5.12,可能文件名或者路徑稍有不同,請注意變通。還有需要提醒的是,完成環(huán)境變量的設(shè)置以后,需要重新開啟cmd哦。

    2、運(yùn)氣好的GGMM現(xiàn)在已經(jīng)可以正確編譯了吧^_^,但偶不是。目前沒有搞清楚是什么原因,我將/common/lib加入到classpath后仍然找不到servlet等包,所以我采用了笨辦法,將/common/lib下的這三個(gè)文件:servlet-api.jar,jsp-api.jar,jasper-runtime.jar都手動(dòng)加到了classpath里面,就OK了~各位有沒有更好的方法或者知道1不能成功的原因的,還望不吝賜教哦。

    不知道您發(fā)現(xiàn)沒有,我在寫這篇博客的時(shí)候正在聽林憶蓮的《我坐在這里》,一首很好聽的,快節(jié)奏的歌,翻唱自Lene Martin的《Sitting down here》。我喜歡在工作的時(shí)候聽歌,這里推薦給大家這兩首:)。

    接著我們會(huì)關(guān)注的是_jspService這個(gè)函數(shù),這個(gè)函數(shù)源自javax.servlet.Servlet的HttpJSPPage,對于JSP/Servlet創(chuàng)建者,不用重新定義,只需要重載,如果是JSP創(chuàng)建的,那么重載的過程由JSP容器來完成了。這個(gè)函數(shù)大家可以把它看作是一個(gè)callback,由用戶編寫,但由系統(tǒng)來調(diào)用。

    最后我們來看看那句在JSP里面的"out.println"在java代碼里面再次出現(xiàn)了。out對實(shí)質(zhì)是JSPWriter的實(shí)例,這個(gè)對象負(fù)責(zé)將字符串等等發(fā)送到客戶端顯示。

    步驟3&4不屬于本文的范疇,不過我想在將來對這個(gè)部分做進(jìn)一步的解釋,因?yàn)槲覍VM還蠻有興趣的哦。

    以上就是今天的分享,包括jsp到j(luò)ava文件的轉(zhuǎn)換&javax包的import方法。希望大家覺得有用。
    PS:有朋友留言在第一篇,要求介紹一些其他的JSP容器,由于這個(gè)部分我目前只用過Tomcat,所以將在未來對其他的JSP容器有了使用經(jīng)驗(yàn)再向大家介紹。

    posted on 2007-05-31 21:28 tianlinux 閱讀(1163) 評論(4)  編輯  收藏 所屬分類: JSP/Servlet

    FeedBack:
    # re: JSP-Servlet學(xué)習(xí)筆記(二)——JSP到Servlet
    2007-05-31 22:05 | java夜未眠
    寫的聽好,挺喜歡,加油  回復(fù)  更多評論
      
    # re: JSP-Servlet學(xué)習(xí)筆記(二)——JSP到Servlet
    2007-06-11 19:12 | 凌宇清輝♂毐
    比較細(xì)節(jié),提到一些其他講座或者教程沒有提到的東西,這些對實(shí)踐來說還是很重要的,贊一個(gè)。  回復(fù)  更多評論
      
    # re: JSP-Servlet學(xué)習(xí)筆記(二)——JSP到Servlet
    2009-02-19 23:57 | 飯粒
    很好啊,又懂了一點(diǎn),我是一個(gè)沒有學(xué)過JAVA的人。
    謝謝  回復(fù)  更多評論
      
    # re: JSP-Servlet學(xué)習(xí)筆記(二)——JSP到Servlet
    2009-02-20 00:00 | 飯粒
    怎么沒有了呢,我還想再看看呢,真是吊人胃口...
    你寫的很好,我希望還能看你的大作。  回復(fù)  更多評論
      

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久精品国产亚洲网站| 激情综合亚洲色婷婷五月| 色欲A∨无码蜜臀AV免费播| 国产91成人精品亚洲精品| 十八禁无码免费网站| 亚洲熟妇丰满xxxxx| 亚洲中文字幕无码久久综合网| 亚洲欧美国产精品专区久久| 亚洲欧洲日产国码一级毛片| 最近2022中文字幕免费视频| 国产成人亚洲精品电影| 久久久久亚洲精品美女| 免费国产污网站在线观看| 亚洲综合中文字幕无线码| 两性刺激生活片免费视频| 亚洲国产精品无码成人片久久| 国产人在线成免费视频| 9i9精品国产免费久久| 亚洲色丰满少妇高潮18p| 亚洲AV无码一区二区三区系列 | 一边摸一边桶一边脱免费视频 | 男女作爱免费网站| 97久久精品亚洲中文字幕无码 | 亚洲精品人成无码中文毛片| 在线美女免费观看网站h| 色婷婷综合缴情综免费观看 | 亚洲av永久无码一区二区三区| 3344永久在线观看视频免费首页 | 亚洲人成无码www久久久| jzzjzz免费观看大片免费| 波多野结衣亚洲一级| 国产av无码专区亚洲av桃花庵| 全亚洲最新黄色特级网站| av网站免费线看| 亚洲日韩AV无码一区二区三区人| 亚洲ⅴ国产v天堂a无码二区| 亚洲一本大道无码av天堂| 国产精品免费视频播放器| 嫖丰满老熟妇AAAA片免费看| 久久成人无码国产免费播放| 亚洲自国产拍揄拍|