<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的語法,并且對(duì)這個(gè)部分比較關(guān)注,您可以去alecwen的博客 看看,那里有alecwen博友有關(guān)JSP基本語法&用法的文章,比較簡潔實(shí)用。

    選擇什么樣的題材來寫第二篇呢?我在第一篇里面有提到“JSP需要經(jīng)過轉(zhuǎn)譯成servlet”,那干脆就在這里講講這個(gè)轉(zhuǎn)譯過程。對(duì)于網(wǎng)頁設(shè)計(jì)人員來說,這個(gè)部分的知識(shí)比較多余,也不適合沒有程序設(shè)計(jì)基礎(chǔ)的人看,對(duì)于程序設(shè)計(jì)人員來說,應(yīng)該可以加深您對(duì)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等等,一是太占資源,偶的本本跑起比較慢:(;二是對(duì)于新手往往會(huì)在太多的菜單選項(xiàng)里面迷失方向,甚至花很大精力在建立工程、添加\刪除工程文件等等事情上,難以專注于要學(xué)習(xí)的東西),JSP的調(diào)試是比較難的。雖然運(yùn)行方式非常的簡單,您只需要在瀏覽器地址欄輸入您發(fā)布的jsp文件路徑,回車即可測(cè)試,但如果JSP包含有錯(cuò)誤(包括編譯式錯(cuò)誤&運(yùn)行時(shí)異常),都會(huì)輸出一堆看不太懂的調(diào)用堆棧。堆棧里面往往會(huì)提及xxx.java文件的xxx行,但對(duì)于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"%> 

     

    簡單的,只有一句代碼。我們?cè)诔鯇W(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)用編譯器對(duì)java文件進(jìn)行編譯;

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

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

    我們先看第一個(gè)步驟。由jsp轉(zhuǎn)化而成的java文件在什么位置呢?我們?cè)赥omcat的安裝目錄下搜索一下,比如剛才的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,可能文件名或者路徑稍有不同,請(qǐng)注意變通。還有需要提醒的是,完成環(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,對(duì)于JSP/Servlet創(chuàng)建者,不用重新定義,只需要重載,如果是JSP創(chuàng)建的,那么重載的過程由JSP容器來完成了。這個(gè)函數(shù)大家可以把它看作是一個(gè)callback,由用戶編寫,但由系統(tǒng)來調(diào)用。

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

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

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

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

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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲视频在线观看视频| a毛片成人免费全部播放| 日韩高清在线免费观看| 日韩亚洲Av人人夜夜澡人人爽| 亚洲伊人久久大香线蕉结合| 久久午夜伦鲁片免费无码| 亚洲二区在线视频| 37pao成人国产永久免费视频| 国产亚洲AV手机在线观看| 羞羞漫画页面免费入口欢迎你 | 95免费观看体验区视频| 亚洲国产综合无码一区| jizz免费在线影视观看网站| 亚洲成熟xxxxx电影| 国产精品视频免费一区二区| 日韩大片免费观看视频播放| 中文字幕亚洲第一在线| 亚洲成人一区二区| 本免费AV无码专区一区| 亚洲色WWW成人永久网址| 99在线精品免费视频九九视| 亚洲桃色AV无码| 性感美女视频免费网站午夜| 久久国产精品萌白酱免费| 国产精品亚洲综合网站| 美女视频黄频a免费| 狠狠色伊人亚洲综合成人| 大陆一级毛片免费视频观看| 国产成年无码久久久免费| 午夜在线亚洲男人午在线| 亚洲国产亚洲综合在线尤物| 亚洲综合熟女久久久30p| 国产无遮挡吃胸膜奶免费看| 久久精品国产免费观看三人同眠| 色哟哟国产精品免费观看| 亚洲精品一品区二品区三品区| 成人在线免费观看| 亚洲一级毛片免费观看| 永久免费AV无码网站国产| 久久久久免费视频| 永久免费精品影视网站|