2007-09-12

tomcat5文档 之 Jasper 2 JSP Engine

关键字: tomcat jasper jsp
1.简介

Tomcat 5.0使用Jasper 2 JSP Engine实现JavaServer Pages 2.0规范。

Jasper 2通过重新设计显著提高了性能,此外下面的通用代码得到了改进:

    1.JSP Custom Tag Pooling - 针对JSP 自定义标签的java对象例示现在可以共享和重用了。这显著的推进了使用自定义标签的JSP页面的性能。
    2.Background JSP compilation - 如果你对已经编译过的JSP页面做了修改,Jasper 2能在后台对该页面重新编译。之前编译好的页面仍然能满足请求,一旦新页面编译完成,它将覆盖老页面。这有助于提高正式服务器上你的JSP页面的可用性。
    3.Recompile JSP when included page changes - Jasper 2现在能检测出一个在JSP页面中被被包含的页面的改变,并重新编译包含了该页面的JSP文件。
    4.Ant used to compile JSP pages - 现在使用Ant Build Tool来完成JSP的java源代码的编译工作。

Jasper用class org.apache.jasper.servlet.JspServlet实现。

2.配置

缺省情况下,在web应用开发服务器上Jasper已经被配置好了。查看"正式服务器配置"节获得在正式服务器上使用Jasper的配置信息。

实现Jasper的servlet已经通过使用全局$CATALINA_BASE/conf/web.xml文件中的初始化参数被配置好了。

checkInterval 

如果"development"属性为false且"reloading"为true,则使用后台编译。"checkInterval"是查看JSP页面是否需要重新编译的两次检查时间间隔(单位:秒)。缺省值为300。

 compiler

Ant将要使用的JSP页面编译器。请查阅Ant文档获得更多信息。缺省为javac。

classdebuginfo

编译成class文件时是否附带调试信息。缺省为true。

classpath

编译servlet时要使用的class path,缺省情况下,该路径基于你当前的web应用动态生成。

development

是否让Jasper使用开发模式(这将在每次访问时都检查JSP的修改情况)。缺省为true。

enablePooling 

决定是否共享标签处理器。缺省为true。

ieClassId

当使用标签时,将要发送给Internet Explorerd的class-id的值。缺省为:8AD9C840-044E-11D1-B3E9-00805F499D93。

 fork

可以在多个JVM上执行Ant对JSP的编译。缺省为true。

javaEncoding

对java源文件采用的字符编码。缺省为UTF-8。

 keepgenerated

是否保存每个页面生成的java源代码,而不删除。缺省为true。

largefile

是否将JSP页面的静态内容保存在外部数据文件中,以减少生成的servlet尺寸。缺省为false。

mappedfile

是否对每个输入行都用一条print语句来生成静态内容,以方便调试。缺省为true。

reloading

是否让Jasper检查修改过的JSP页面。缺省为true。

scratchdir

当编译JSP页面时使用的临时目录。缺省为当前web应用的work目录。

trimSpaces

是否去掉模板文本中行为和指令之间的空格。缺省为false。

3.正式服务器配置

当在正式服务器上使用Jasper 2时,你应该考虑改变以下的缺省配置:

development

为了打开后台编译开关,将此项设为false。

fork

Ant 使用的内部JVM javac编译器有个著名的内存泄漏。且Ant需要java编译被同步,比如在某一刻只有一个JSP页面能被编译。将fork设为true或不设(此时取缺省值),Ant就分别在单独的JVM上编译各个JSP页面。这样就去掉了JSP编译的同步,且阻止了所有的javac类被例示,随后被Tomcat上运行的JVM当作垃圾回收了。这也产生了一些知名的javac的问题,包括内存泄漏、Windows下JAR文件的同步。
4.编译web应用

使用Ant是用JSPC编译web应用的首选方法。用下面的脚本预编译一个web应用:

xml 代码
  1. <project name="Webapp Precompilation" default="all" basedir=".">  
  2.   
  3.   <target name="jspc">  
  4.   
  5.     <taskdef classname="org.apache.jasper.JspC" name="jasper2" >  
  6.       <classpath id="jspc.classpath">  
  7.         <pathelement location="${java.home}/../lib/tools.jar"/>  
  8.         <fileset dir="${tomcat.home}/bin">  
  9.           <include name="*.jar"/>  
  10.         </fileset>  
  11.         <fileset dir="${tomcat.home}/server/lib">  
  12.           <include name="*.jar"/>  
  13.         </fileset>  
  14.         <fileset dir="${tomcat.home}/common/lib">  
  15.           <include name="*.jar"/>  
  16.         </fileset>  
  17.       </classpath>  
  18.     </taskdef>  
  19.   
  20.     <jasper2  
  21.              validateXml="false"  
  22.              uriroot="${webapp.path}"  
  23.              webXmlFragment="${webapp.path}/WEB-INF/generated_web.xml"  
  24.              outputDir="${webapp.path}/WEB-INF/src" />  
  25.   
  26.   </target>  
  27.   
  28.   <target name="compile">  
  29.   
  30.     <mkdir dir="${webapp.path}/WEB-INF/classes"/>  
  31.     <mkdir dir="${webapp.path}/WEB-INF/lib"/>  
  32.   
  33.     <javac destdir="${webapp.path}/WEB-INF/classes"  
  34.            optimize="off"  
  35.            debug="on" failonerror="false"  
  36.            srcdir="${webapp.path}/WEB-INF/src"  
  37.     excludes="**/*.smap">  
  38.       <classpath>  
  39.         <pathelement location="${webapp.path}/WEB-INF/classes"/>  
  40.         <fileset dir="${webapp.path}/WEB-INF/lib">  
  41.           <include name="*.jar"/>  
  42.         </fileset>  
  43.         <pathelement location="${tomcat.home}/common/classes"/>  
  44.         <fileset dir="${tomcat.home}/common/lib">  
  45.           <include name="*.jar"/>  
  46.         </fileset>  
  47.         <pathelement location="${tomcat.home}/shared/classes"/>  
  48.         <fileset dir="${tomcat.home}/shared/lib">  
  49.           <include name="*.jar"/>  
  50.         </fileset>  
  51.         <fileset dir="${tomcat.home}/bin">  
  52.           <include name="*.jar"/>  
  53.         </fileset>  
  54.       </classpath>  
  55.       <include name="**" />  
  56.       <exclude name="tags/**" />  
  57.     </javac>  
  58.   
  59.   </target>  
  60.   
  61.   <target name="all" depends="jspc,compile">  
  62.   </target>  
  63.   
  64. </project>  
  65.    

下面的命令行执行上面的脚本(替换$TOMCAT_HOME$WEBAPP_PATH):

$ANT_HOME/ant -Dtomcat.home=<$TOMCAT_HOME> -Dwebapp.path=<$WEBAPP_PATH>

然后在预编译期间生成的servlets声明和映射加入到web应用的部署描述符中。将${webapp.path}/WEB-INF/generated_web.xml插入到${webapp.path}/WEB-INF/web.xml内适当的地方。重新启动web应用(使用管理器)并测试以检验预编译的servlets运行的很好。在web应用描述符中放入一个一个适当的记号也可以被用来自动插入Ant过滤功能生成的servlet声明和映射。这就是Tomcat发布的所有web应用怎样作为构造过程的一部分被自动编译的。

5.使用Jikes

如果使用Jikes编译JSP页面:

    1.下载并安装jikes。jikes必须支持-encoding选项。执行jikes -help查阅编译时对-encoding的支持。
    2.设置初始化参数compiler为jikes。
    3.启动Tomcat时增加一条环境变量-Dbuild.compiler.emacs=true。这个改变jikes输出的错误信息格式使之和Jasper兼容。
    4.如果得到jikes不能使用UTF-8 encoding的错误报告,试着将初始化参数javaEncoding设为ISO-8859-1

评论
Lily-liu 2008-05-14
编译后信息:
E:\depcomp>ant jspc
Buildfile: build.xml

jspc:

BUILD FAILED
E:\depcomp\build.xml:149: org.apache.jasper.JasperException: The absolute uri: h
ttp://jakarta.apache.org/tomcat/examples-taglib cannot be resolved in either web
.xml or the jar files deployed with this application

Total time: 6 seconds
而我的target是这样编写的:
<target name="jspc">

<taskdef classname="org.apache.jasper.JspC" name="jasper2" >
<classpath id="jspc.classpath">
<pathelement location="${java.home}/../lib/tools.jar"/>
<fileset dir="${tomcat.home}/bin">
<include name="*.jar"/>
</fileset>
<fileset dir="${tomcat.home}/server/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${tomcat.home}/common/lib">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>

<jasper2
validateXml="false"
uriroot="${webapp.path}"
webXmlFragment="${webapp.path}/WEB-INF/generated_web.xml"
outputDir="${webapp.path}/WEB-INF/src" />

</target>
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

julycn
搜索本博客
我的相册
E09a394b-4b16-328b-8e1d-9ef916ee23c2-thumb
seam.jpg
共 13 张
存档
最新评论