tomcat5文档 之 Jasper 2 JSP Engine
关键字: tomcat jasper jsp1.简介
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 |
当使用 |
|
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应用:
- <project name="Webapp Precompilation" default="all" basedir=".">
- <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>
- <target name="compile">
- <mkdir dir="${webapp.path}/WEB-INF/classes"/>
- <mkdir dir="${webapp.path}/WEB-INF/lib"/>
- <javac destdir="${webapp.path}/WEB-INF/classes"
- optimize="off"
- debug="on" failonerror="false"
- srcdir="${webapp.path}/WEB-INF/src"
- excludes="**/*.smap">
- <classpath>
- <pathelement location="${webapp.path}/WEB-INF/classes"/>
- <fileset dir="${webapp.path}/WEB-INF/lib">
- <include name="*.jar"/>
- </fileset>
- <pathelement location="${tomcat.home}/common/classes"/>
- <fileset dir="${tomcat.home}/common/lib">
- <include name="*.jar"/>
- </fileset>
- <pathelement location="${tomcat.home}/shared/classes"/>
- <fileset dir="${tomcat.home}/shared/lib">
- <include name="*.jar"/>
- </fileset>
- <fileset dir="${tomcat.home}/bin">
- <include name="*.jar"/>
- </fileset>
- </classpath>
- <include name="**" />
- <exclude name="tags/**" />
- </javac>
- </target>
- <target name="all" depends="jspc,compile">
- </target>
- </project>
下面的命令行执行上面的脚本(替换$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。
评论
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>
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 56333 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
我的相册
共 13 张
最近加入圈子
最新评论
-
Gwt-Ext学习笔记之基础篇
问题已经解决
-- by chinahcl -
Gwt-Ext学习笔记之基础篇
[ERROR] Unable to find 'com/google/gwt/u ...
-- by chinahcl -
Gwt-Ext学习笔记之基础篇
谢谢楼主,楼主厉害
-- by chinahcl -
Seam实例教程(环境配置)
不好意思,为什么照你这样做的,但是会报错, 10:30:39,562 INFO ...
-- by yuyanshan -
Seam实例教程(环境配置)
总算自己弄明白了
-- by afadgaeg






评论排行榜