论坛首页 Java企业应用论坛

使用 IBM jikes 在 Jetty 或 JBoss 中编译 JSP

浏览 16870 次
该帖已经被评为精华帖
作者 正文
   发表时间:2003-10-12  
最新的 Tomcat 4.x/5.x,Jetty 4.2.x 使用的都是 jasper2 JSP 编译器。由于 jasper2 使用 Ant 来编译 JSP,因此以前的语法有了一些改动。
将 webdefault.xml 中的:
<init-param> 
    <param-name>jspCompilerPlugin</param-name> 
    <param-value>org.apache.jasper.compiler.JikesJavaCompilerWrapper</param-value> 
</init-param>

改为:
<init-param>
    <param-name>compiler</param-name>
    <param-value>jikes</param-value>
</init-param>

很显然这里缺省的 compiler 是 modern,就是 tools.jar 中的编译器。
需要注意的是由于 jikes for Windows 没有 -encoding 选项,因此编译 JSP 时会出错。所以上述方法只能在 Linux 上使用。解决起来也很简单,一种方法是编译 jikes for Windows(可以用 MinGW 编译),与 iconv for Windows 连接,使 jikes for Windows 获得 -encoding 选项。另一种方法难度小一点,就是修改 Ant 的代码,使得对于 jikes 不使用 -encoding 选项,然后给 jikes 加一个 wrapper,使用我以前写的那个 wrapper 中相同的方法。
在 Jetty 启动时需要将 rt.jar 加入 classpath,方法是修改 Jetty 的启动脚本 bin/jetty.sh
在:
[ -f $JAVA_HOME/lib/tools.jar ] && CP="$CP$PATH_SEPARATOR$JAVA_HOME/lib/tools.ja
r"
后再加一句:
[ -f $JAVA_HOME/lib/rt.jar ] && CP="$CP$PATH_SEPARATOR$JAVA_HOME/lib/rt.jar"
CLASSPATH="$CP"
其中 $JAVA_HOME 是你安装的 JRE 的路径,例如:
/usr/local/j2sdk1.4.1/jre
对于 IBM JRE/JDK 1.4,rt.jar 要换成 core.jar。

关于在 Tomcat 中如何使用 jikes,请看:
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jasper-howto.html
   发表时间:2003-10-14  
jikes稳定性还不够好,我遇到好几次崩溃了。
0 请登录后投票
   发表时间:2003-10-14  
我们这里还不错,从来没有遇到崩溃的现象。Jikes 编译速度要比 tools.jar 快多了。我们用的是
Jetty 4.2.9+Jikes 1.18+IBM JRE 1.4.1+Redhat 7.x/Redhat Adv Server 2.1
0 请登录后投票
   发表时间:2003-10-14  
我在idea里面用jikes编译,有时候就会crash.
不过用的是windows版本的1.1.8可能和特定版本有关系。
0 请登录后投票
   发表时间:2003-11-29  
jetty网站上说,要使用jikes,除了修改webdefault.xml,还要在每个webapplication描述中增加如下内容:
5. For each web application that you add to /etc/jetty.xml, reference the webdefault.xml file as the third argument passed to the addWebApplication(); method. For example: 


        <Call name="addWebApplication">
                <Arg>/fooapp/*</Arg> 
                <Arg>webapps/fooapp/</Arg> 
========>    <Arg>etc/webdefault.xml/</Arg> 
        </Call>


我在增加第3个参数时,就是etc/webdefault.xml时,jetty无法正常启动
,把这一行隐掉,仅修改webdefault.xml,jetty还是在工作,在local/temp目录下的work目录,中看不出是jikes还是javac产生了类,
和中文相关参数是乱码。

继续把webdefault.xml中关于jasper的参数省略,就是用javac,然后重启jetty,发现新编译中的jsp_class中和中文相关参数内容也是乱码。


有3个问题:
1 为什么每次重起jetty,jsp页面要重新compile
2 上述情况下如何正确使用jikes
3 如何使用javac对jsp编译时encode,(很奇怪不编码实际使用时也正常)
0 请登录后投票
   发表时间:2003-11-29  
zingers 写道
1 为什么每次重起jetty,jsp页面要重新compile
2 上述情况下如何正确使用jikes
3 如何使用javac对jsp编译时encode,(很奇怪不编码实际使用时也正常)

1、不知道,需要 Jetty 的开发人员来解决。
2、使用 webdefault.xml 的方法是:
<Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set> 

也可以不加前面的:
<SystemProperty name="jetty.home" default="."/>

直接使用绝对路径。
3、Jetty 缺省情况下使用 tools.jar 来编译,不需任何配置就可以支持 JSP 页面中的 encoding 了。当配置使用 jikes 来编译时只有在 Linux/Unix 上支持 encoding,因为 jikes 的 Windows 版不支持字符集转换。
0 请登录后投票
   发表时间:2003-11-29  
thanks dlee
系统win2000+jetty4.21+ant已经能够使用jikes作为jasper2编译器,可惜因为jikes没有-encoding而无法继续下去
我还是在windows下先使用javac吧,以后有机会再到linux上去使用。

dlee, 你说的把jsp页面打成jar包来提高jetty运行速度,是不是把javac/jikes编译后的类(就是临时work目录下的)打成包,还是用其它方法?
0 请登录后投票
   发表时间:2003-11-29  
zingers 写道
dlee, 你说的把jsp页面打成jar包来提高jetty运行速度,是不是把javac/jikes编译后的类(就是临时work目录下的)打成包,还是用其它方法?

其实就是 JSP 页面的预编译。把所有 JSP 编译后得到的 .class 打包成一个 jar,放在 CLASSPATH 中。然后在 web.xml 中分别设置为 servlet,再映射到某个 xxx.jsp 的 URL 上。
原理很简单,不过我没做过,因为对于我们的应用必要性不大。
0 请登录后投票
   发表时间:2003-11-29  
上次就看到你说你们的表现层早不用JSP了,那你们现在如何处理表现层呢,velocity,xml,or others?
0 请登录后投票
   发表时间:2003-11-29  
zingers 写道
上次就看到你说你们的表现层早不用JSP了,那你们现在如何处理表现层呢,velocity,xml,or others?

应该是属于 XML 吧。我们直接把前台需要的数据以 XML 格式通过 XMLHTTP 接口发给浏览器,由浏览器用 JavaScript 来做呈现(通过几层 DOM 树的映射和自定义的映射逻辑将 XML DOM 中的数据映射到 HTML DOM 的页面显示控件),所以不需要在服务器端实现 MVC 架构。服务器端全部都是用 Servlet 实现的,几乎不写 JSP。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics