1. 下载 Jetty 6 的压缩包
2. 将 Jetty 6 下的 jsp 2.1 目录下的文件复制到 Jetty 7 的 lib 目录
3. 运行 java -jar start.jar --list-options 来检查是否支持 JSP
4. 编辑 jetty.ini 文件,在 OPTIONS 中增加 jsp一项,如下
OPTIONS=Server,jmx,resources,websocket,ext,jsp
5. 启动 Jetty 即可。
而在 Jetty 8 (最新版是M1) 默认是支持 JSP 的,不过访问JSP文件出现以下错误:
org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac. A full JDK (not just JRE) is required
以上摘自开源中国上的,不过如果出现了这个错误,请看我对应的上一篇博客有详细解决方法。
如果以上解决不了支持JSP问题的话,如果你又是在elipse中集成的jetty,安装的是jetty插件的话,编译环境里的lib目录里直接包含了jsp2.1的二个包,把这二个包作为运行环境也就是从软件里去掉这二个包,让它调用jetty里自带的应该就没有问题了。
如果还是不行,试试lib下缺少jasper.jar 包。
如果还是不行的话,可以再参考下边的方法:
从Jetty-9.2开始,使用Apache Jasper作为默认JSP容器实现。在前面的版本中使用的是Glassfish Jasper,在后面的版本中也可以继续使用它。 Jetty发布默认激活jsp模块,默认,模块设置到Apache Jasper。为了改为使用Glassfish Jasper,编辑$JETTY_HOME/start.d/jsp.mod,改变下面的行:
# # Jetty JSP Module # [depend] servlet jsp-impl/${jsp-impl}-jsp [ini-template] # JSP Configuration # Select JSP implementation, choices are # glassfish : The reference implementation # default in jetty <= 9.1 # apache : The apache version # default jetty >= 9.2 jsp-impl=apache # To use a non-jdk compiler for JSP compilation when using glassfish uncomment next line # -Dorg.apache.jasper.compiler.disablejsr199=true
注意一些JSP的特征能否使用依赖于你选择的JSP容器实现。也注意你不能预编译一种容器的jsp,而部署另一个。
预编译
你能按照你选择的JSP容器(Glassfish或者Apache)提供的指导手册预编译jsp。或者如果你选择使用maven,你能用jetty-jspc-maven插件为你做。
如果你预编译你的jsp,并且自定义了输出包前缀(默认是org.apache.jsp),你应该配置你的webapp上下文告诉Jetty关于你的自定义报名。你能使用servlet上下文的初始化参数org.eclipse.jetty.servlet.jspPackagePrefix做这。
例如,假定你预编译你的jsp,使用自定义包前缀com.acme,那么你将在web.xml中增加:
<context-param> <param-name>org.eclipse.jetty.servlet.jspPackagePrefix</param-name> <param-value>com.acme</param-value> </context-param>
注意:Jetty的maven插件jetty-jspc-maven-plugin和jetty-maven-plugin都只能用Apache Jasper
运行时编译JSP
根据你选择的不同的JSP容器,配置项和编译特性将是不同的。
Apache JSP容器
默认,Apache JSP容器将查找Eclipse Java Compiler(jdt)。jetty发布自带了一个在$JETTY_HOME/lib/apache-jsp。如果你希望用不同的编译器,你将需要配置compilerClassName初始参数在JspServlet,并带上类名。 下表是Apache JspServlet的参数介绍:
初始参数 | 描述 | 默认值 | webdefault.xml |
---|---|---|---|
classpath | 用于jsp编译的Classpath。只有在jetty中的org.apache.catalina.jsp_classpath上下文属性不被设置时才使用。 | - | - |
classdebuginfo | 在class文件中包括debugging信息。 | TRUE | - |
checkInterval | 后台重编译检查的间隔,单位秒。只有development=false才使用。 | 0 | - |
development | development=true时,每个请求都做重编译检查。看modificationTestInterval | TRUE | - |
displaySourceFragment | 是否将源码片段包含在异常信息中 | TRUE | - |
errorOnUseBeanInvalidClassAttribute | 当在一个useBean行为中class属性的值不是一个有效的bean类时,是否产生一个error | TRUE | - |
fork | Ant应该fork它的JSP页的Java编译吗? | TRUE | FALSE |
keepgenerated | 你想保留生成的Java文件吗? | TRUE | - |
trimSpaces | 指令和行为间的空格应该被裁剪吗? | FALSE | - |
enablePooling | 确定标签处理器池是否被激活 | TRUE | - |
engineOptionsClass | 允许指定的Options类用于配置Jasper。否则,默认的EmbeddedServletOptions将被使用。 | - | - |