<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的基本語法,逛了一些壇子,這類的文章實在是太多了。就在blogjava里面,都有博友正在推出系列的講座。我一一翻閱過,所以覺得這里應該講一些他們沒有講到的地方。如果您還不了解JSP的語法,并且對這個部分比較關注,您可以去alecwen的博客 看看,那里有alecwen博友有關JSP基本語法&用法的文章,比較簡潔實用。

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

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

     

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

     

    簡單的,只有一句代碼。我們在初學java的時候,寫一個hello world應該都遠遠不止這點代碼,里面一定有文章。并且,您發現了嗎:第一次訪問hello.jsp,瀏覽器停頓了一下下,才顯示出了"Hello, JSP/Servlet"這句話,后面再次訪問,就不會再停頓了。是的,這正是因為第一次訪問jsp的時候,JSP有個轉譯的過程。這個過程包括以下幾個步驟:

    1、根據jsp文件生成java文件;

    2、調用編譯器對java文件進行編譯;

    3、如果編譯通過,載入JVM運行;

    4、將執行結果返回。

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


    以目前的情況,我們并沒有必要把代碼一句一句的都去搞懂。因為大部分的代碼所有jsp文件轉換出來都是相同,是JSP容器已經設定好的。所以我們只關注其中的部分。

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

     

    出現了找不到javax.servlet這個包的情況,我的機機上就是這種情況。怎么辦呢?趕緊google一下解決辦法。

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

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

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

    接著我們會關注的是_jspService這個函數,這個函數源自javax.servlet.Servlet的HttpJSPPage,對于JSP/Servlet創建者,不用重新定義,只需要重載,如果是JSP創建的,那么重載的過程由JSP容器來完成了。這個函數大家可以把它看作是一個callback,由用戶編寫,但由系統來調用。

    最后我們來看看那句在JSP里面的"out.println"在java代碼里面再次出現了。out對實質是JSPWriter的實例,這個對象負責將字符串等等發送到客戶端顯示。

    步驟3&4不屬于本文的范疇,不過我想在將來對這個部分做進一步的解釋,因為我對JVM還蠻有興趣的哦。

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

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

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

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲AV无码一区二区二三区软件| 国产又黄又爽又刺激的免费网址 | 日本免费高清视频| 免费一级毛片不卡不收费| 亚洲av无码一区二区三区四区| 国产亚洲福利一区二区免费看| 韩国二级毛片免费播放| 亚洲日本一线产区和二线产区对比| 色se01短视频永久免费| 亚洲精品伊人久久久久| 免费电影在线观看网站| 亚洲中文字幕无码久久2020| 久久国产精品免费一区二区三区| 亚洲人成网站18禁止一区| 日日躁狠狠躁狠狠爱免费视频| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 456亚洲人成在线播放网站| 免费精品国产自产拍在线观看图片| 亚洲日本va在线观看| 永久黄网站色视频免费直播| 成人国产网站v片免费观看| 久久精品亚洲乱码伦伦中文| 无码专区AAAAAA免费视频| 亚洲一卡2卡4卡5卡6卡残暴在线| 午夜电影免费观看| 国产无限免费观看黄网站| 久久精品国产亚洲AV麻豆不卡| 成年人视频免费在线观看| 亚洲av无码专区青青草原| 亚洲一级片内射网站在线观看| 日本卡1卡2卡三卡免费| 亚洲人成电影网站色www| 亚洲情侣偷拍精品| 99久久免费中文字幕精品| 亚洲国产精品无码观看久久| 最新精品亚洲成a人在线观看| 3344免费播放观看视频| 蜜芽亚洲av无码一区二区三区| 亚洲国产精品无码久久一线| 一级黄色免费毛片| 亚洲黄网在线观看|