開啓Jasper的JSP預編譯支持

    不少Java Web容器(如Tomcat, Jetty等等)都採用Apache Jasper作爲其JSP容器,用它來對JSP文件進行編譯,調用由JSP編譯成的Servlet等。在這類Web容器中,只要將jsp文件按擴展名映射到org.apache.jasper.servlet.JspServlet,就可以將JSP全權交由Jasper來處理,免去了自行編寫JSP處理邏輯的麻煩。

    JSP預編譯是指在部署一個Web應用前(或部署時),就將Web應用中所有的JSP文件編譯成Servlet的.class文件,這樣在客戶端訪問JSP時,JSP容器不再對JSP文件進行編譯,而是直接尋找編譯好的.class文件進行加載和調用。JSP預編譯可以提高Web應用的性能,同時,Web應用開發者可以在部署前就將所有JSP編譯成.class文件,然後將JSP文件刪去,這樣可以使JSP代碼不被不該看的人看到。編譯成的.class文件應放在Web應用的WEB-INF/classes目錄下,包名爲org.apache.jsp,文件名模式爲“JSP文件的主名_擴展名.class”,例如index.jsp對應的.class文件爲index_jsp.class。

    部署時進行JSP編譯的方法不在本文討論範圍之內,我們只討論如何讓Jasper啓用JSP預編譯支持。

    在JspServlet(它是一個servlet)的初始化參數裏有一個“usePrecompiled”,我們只要將其設爲True即可啓用JSP預編譯支持。不同的Web容器在不同的地方進行此項配置,我們以Jetty 6.1.24爲例:在etc/webdefault.xml中有如下一段:

  <servlet id="jsp">
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>logVerbosityLevel</param-name>
        <param-value>DEBUG</param-value>
    </init-param>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
 
    與這裏面所有的init-param標籤並列地,再添加一個如下內容的init-param標籤即可:
 
    <init-param>
        <param-name>usePrecompiled</param-name>
        <param-value>true</param-value>
    </init-param>
   
    也可以通過修改Jetty 6.1.24代碼來進行,在org.mortbay.jetty.webapp.WebXmlConfiguration.initServlet(Node)方法中的以“if (id!=null && id.equals("jsp"))”打頭的代碼塊中添加如下一條語句即可:

    holder.setInitParameter("usePrecompiled", "true");
   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章