1. 程式人生 > >開啟Jasper的JSP預編譯支援

開啟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");
   

相關推薦

開啟Jasper的JSP編譯支援

    不少Java Web容器(如Tomcat, Jetty等等)都採用Apache Jasper作為其JSP容器,用它來對JSP檔案進行編譯,呼叫由JSP編譯成的Servlet等。在這類Web容器中,只要將jsp檔案按副檔名對映到org.apache.jasper.ser

錯誤:fatal error C1083: 無法開啟編譯標頭檔案:“Debug/DistanceMeasure.pch”: No such file or directory

錯誤:fatal error C1083: 無法開啟預編譯標頭檔案:“Debug/DistanceMeasure.pch”: No such file or  directory  這種錯誤是不存在預編譯的.pch檔案,即沒有建立。 網上各種方法都是不使用預編譯,其實這樣

HbuildX(綠版)開啟對less等的編譯

HbuildX開啟對less的預編譯 在使用HbuildX十分(綠色的版本)的時候安裝less,sass等外掛後發現每次儲存less檔案後一定要從文件中應用外部命令才會使我們的CSS檔案發生對應改變,十分的浪費時間,然後網上找HbuildX開啟對less的預編譯,發現搜到的都是Hbuil

無法開啟編譯標頭檔案的解決方法及編譯頭原理[ZZ]

1。用VC.NET編輯程式,按Ctrl+F7,出現下列錯誤: fatal error C1083: 無法開啟預編譯標頭檔案:“Debug/UGFace.pch”: No such file or  directory   解決方法:修改:專案->屬性->C/C

fatal error C1083: 無法開啟編譯標頭檔案 的解決方法

在VS中移植工程,尤其是含有StdAfx.h和StdAfx.cpp這兩個檔案的工程,重新編譯時常發生“fatal error C1083: 無法開啟預編譯標頭檔案”的錯誤。如何解決呢?下面以VS2010為例說明解決步驟 1. 在解決方案資源管理器中,工程名上點右鍵,選擇“屬

error無法開啟編譯標頭檔案的解決方法及編譯頭原理

1。用VC.NET編輯程式,按Ctrl+F7,出現下列錯誤: fatal error C1083: 無法開啟預編譯標頭檔案:“Debug/UGFace.pch”: No such file or directory 解決方法:修改:專案->屬性->C/C++

MySQL的JDBC驅動原始碼解析 編譯開啟

一、背景         現在我們淘寶持久化大多數是採用iBatis+MySQL做開發的,大家都知道,iBatis內建引數,形如#xxx#的,均採用了sql預編譯的形式,舉例如下: <span style="font-size:18px;"><sel

ANPM-Apache_httpd-Nginx-PHP-MySQL 官方編譯包源(Pre-Built Packages Repository)收集

apache httpd nginx php mysql ANPM-Apache_httpd-Nginx-PHP-MySQL 官方預編譯包源(Pre-Built Packages Repository)收集Apache_httpdNginxhttp://nginx.org/en/linux

IIS編譯提升載入速度

microsoft -i for 感覺 初始化 重新 -m 選擇 req 當我們把站點部署在IIS7或IIS6S的時候,每當IIS或是ApplicationPool重新啟動後,第一次請求站點反應總是非常慢。原因大家都知道(不知道能夠參考這個動畫說明ASP.NET網

SQL攻擊-編譯--緩存

可維護性 ins 可讀性 問號 wid 都是 比較 緩存 query PreparedStatement l 它是Statement接口的子接口; l 強大之處: 防SQL攻擊; 提高代碼的可讀性、可維護性; 提高效率! l 學習PreparedS

C編譯

class copy lin turn -- urn ces stdio.h std /* ============================================================================ Name

VC++ 使用編譯

radius 而已 tools filters mpi 鏈接 res 普通 mov 一、使用默認的預編譯頭 要使用預編譯頭,我們必須指定一個頭文件,這個頭文件包含我們不會經常改變的代碼和其他的頭文件,然後我們用這個頭文件來生成一個預編譯頭文件(.pch文件),想

編譯封裝

cti array etc 元素 傳遞 param name 名稱 結構 /** * 獲取查詢結果並封裝為一個對象數組 * @param $sql 需要執行的SQL語句 * @param array $arr 預編譯語

#include”* .h“ 在查找編譯頭使用時跳過

ios warning 跳過 ima stream bsp 分享 strong ges warning C4627: “#include <windows.h>”: 在查找預編譯頭使用時跳過 解決辦法: 原因是沒有在cpp文件

mybatis深入理解之 # 與 $ 區別以及 sql 編譯

tcl nec from esql 校驗 ntp code 理解 替換字符串 mybatis 中使用 sqlMap 進行 sql 查詢時,經常需要動態傳遞參數,例如我們需要根據用戶的姓名來篩選用戶時,sql 如下: select * from user where nam

一張圖掌握移動Web前端所有技術(大前端、工程化、編譯、自動化)

移動前端 web 工程化 webpack 你要的移動web前端都在這裏!大前端方向:移動Web前端、Native客戶端、Node.js、大前端框架:React、Vue.js、Koa跨終端技術:HTML 5、CSS 3、JavaScript跨平臺框架:React Native、Cordova前端

深入理解C語言的編譯指令之include

get http npe target info pdb tfs mar 語言 慫b促64u父猩84卵ml0http://www.facebolw.com/space/2101977 0俜垂屹17該性膠1http://tushu.docin.com/hmd622 6PD

NDK開發使用cMake方式 - 添加其他的編譯

csdn per highlight 方式 make ati lists sdn jni NDK 開發使用cMake方式,網上能找到不少的教程,這裏推薦一篇博文: http://blog.csdn.net/wl9739/article/details/52607010 關於

MySQL的編譯功能

.cn 支持 right amp print div 服務 nec rom 1、預編譯的好處   大家平時都使用過JDBC中的PreparedStatement接口,它有預編譯功能。什麽是預編譯功能呢?它有什麽好處呢?   當客戶發送一條SQL語句給服務器後,服務器總是

php mysqli編譯

name use value sel sele mys rom sqli 2-2 <?php /** * mysqli預編譯 */ //1、創建mysqli對象 $mysqli = new MYSQLI("wk.php","root","root","db_