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,改变下面的行:
[depend]
servlet
jsp-impl/${jsp-impl}-jsp
[ini-template]
jsp-impl=apache
注意一些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容器将查找EclipseJavaCompiler(jdt)。jetty发布自带了一个在$JETTY_HOME/lib/apache-jsp。如果你希望用不同的编译器,你将需要配置compilerClassName初始参数在JspServlet,并带上类名。
下表是Apache 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将被使用。 |
- |
- |
mappedFile |
支持mapped Files。产生一个servlet,有一个打印申明JSP文件的每一行 |
TRUE |
- |
suppressSmap |
为JSR45调试的SMAP信息的产生 |
FALSE |
- |
dumpSmap |
转储SMAP JSR45信息到一个文件 |
FALSE |
- |
genStrAsCharArray |
为产生Strings的选项 |
FALSE |
- |
ieClassId |
当使用<jsp:plugin>标签时,class-id值被送到Internet Explorer |
clsid:8AD9C840-044E-11D1-B3E9-00805F499D93 |
- |
maxLoadedJsps |
一个web应用能加载的JSP的最大值。如果超过了这个值,最近最少使用那个的JSP将被卸载。0或者负值表示没有限制。 |
-1 |
- |
jspIdleTimeout |
一个JSP被卸载前空闲的最大时间,单位秒。0或者负值表示永不卸载。 |
-1 |
- |
scratchDir |
servlet被生成的文件夹 |
- |
- |
compilerClassName |
如果不设置,默认是Eclipse jdt编译器。 |
- |
- |
compiler |
如果Eclipse jdt编译器在classpath中不能找到时使用。它是Ant应该调用的编译器的类名。 |
- |
- |
compilerTargetVM |
编译器期望的目标vm。 |
1.7 |
- |
compilerSourceVM |
为jdt编译器设置源兼容性级别。 |
1.7 |
- |
javaEncoding |
编译使用编码方式。 |
UTF8 |
modificationTestInterval |
如果development=true,重编译检查的间隔,通过一个请求触发。 |
4 |
- |
xpoweredBy |
产生一个X-Powered-By响应头 |
FALSE |
FALSE |
recompileOnFail |
如果一个JSP编译失败,modificationTestInterval应该被忽略并且触发下一个重编译尝试吗?只用在开发模式,默认被停止,因为编译可能代价较高导致过多的资源被用。 |
- |
-
|
Glassfish JSP容器
为了编译.jsp文件进入Java classes,你需要一个Java编译器。如果你正在使用一个完整的JDK,你能从JVM得到Java编译器,否则,你可以从一个第三方Jar。
默认Glassfish JSP容器尝试用JDK的编译器。注意:当用JDK编译器时,系统不保存你的class文件到磁盘,除非你用saveBytecode初始化参数,将在下面描述。
如果你不有完整的JDK,你能配置Eclipse Java Compiler,在Jetty的$JETTY_HOME/lib/jsp/文件夹下。你需要定义一个系统属性,防止Glassfish JSP引擎默认使用JVM中的编译器。
当使用独立的标准版时,最好的方式是使用未注释的系统属性org.apache.jasper.compiler.disablejsr199,在jsp module中:
-Dorg.apache.jasper.compiler.disablejsr199=true
或者为了嵌入的使用,仅仅定义这作为一个通常的系统属性。
配置
JSP引擎有一些配置参数。一些参数仅影响预编译,而一些影响运行时预编译检查。在不同版本的JSP引擎间参数也有不同。下面列出了配置参数、他们的含义和他们的默认设置。所有参数都在webdefault.xml的org.apache.jasper.JspServlet实例中定义:
理解Glassfish JSP参数
初始参数
描述
默认值
webdefault.xml
development |
development=true,重编译检查在每个请求时都执行。看modificationTestInterval。 |
TRUE |
- |
fork |
Ant应该fork它的JSP页的Java编译? |
TRUE |
FALSE |
keepgenerated |
你想保留产生的Java文件? |
FALSE |
- |
saveBytecode |
如果class文件作为byte arrays被产生,他们在编译结束时应该被保存到磁盘吗? |
FALSE |
- |
trimSpaces |
在指令和行为之间的空白应该被裁剪吗? |
FALSE |
- |
enablePooling |
确定标签处理器池是否被激活。 |
TRUE |
- |
mappedFile |
支持mapped Files。产生一个servlet,有一个打印申明JSP文件的每一行 |
TRUE |
- |
sendErrorToClient |
如果false,栈轨迹,等,被送到标准错误代替客户端的浏览器。 |
FALSE |
- |
classdebuginfo |
在class文件中包括debugging信息。 |
TRUE |
- |
checkInterval |
后台重编译检查的间隔,单位秒。只有development=false才使用。 |
0 |
- |
suppressSmap |
为JSR45调试的SMAP信息的产生 |
FALSE |
- |
dumpSmap |
转储SMAP JSR45信息到一个文件 |
FALSE |
- |
genStrAsCharArray |
为产生Strings的选项 |
FALSE |
- |
genStrAsByteArray |
为产生Strings的选项 |
TRUE |
- |
defaultBufferNone |
- |
FALSE |
- |
errorOnUseBeanInvalidClassAttribute |
- |
FALSE |
- |
scratchDir |
servlet被生成的文件夹。Jetty设置这个值根据为webapp设置的[/display/JETTY/Temporary+Directories work dir] |
- |
- |
compiler |
在运行时确定。对Jetty来说是Eclipse jdt compiler。 |
- |
- |
compilerTargetVM |
编译器期望的目标vm。 |
1.5 |
- |
compilerSourceVM |
为jdt编译器设置源兼容性级别。 |
1.5 |
- |
javaEncoding |
编译使用编码方式。 |
UTF8 |
- |
modificationTestInterval |
如果development=true,重编译检查的间隔,通过一个请求触发。 |
0 |
- |
xpoweredBy |
产生一个X-Powered-By响应头。 |
FALSE |
FALSE |
usePrecompiled/use-precompiled |
- |
FALSE |
- |
validating/enableTldValidation |
是否根据模式(schema)验证标签文件。 |
FALSE |
- |
reload-interval |
如果reload-interval=0,则不做JSP的运行时检查,否则设置检查间隔,不管development=true还是development=false。 |
- |
- |
initial-capacity/initialCapacity |
映射JSP到class和JSP文件的哈希映射表的初始容量 |
- |
- |
通常存在很多困惑在关于development、checkInterval和modificationTestInterval参数,和JSP运行时重编译。这里是分解出的各种选项:
1)对每个请求检查JSP文件重编译
<init-param>
<param-name>development></param-name>
<param-value>true></param-value>
</init-param>
2)大约每N秒检查一次,通过请求触发定时的计算。下面是每60秒检查:
<init-param>
<param-name>development></param-name>
<param-value>true></param-value>
</init-param>
<init-param>
<param-name>modificationTestInterval></param-name>
<param-value>60></param-value>
</init-param>
3)不做检查,但在第一次使用时编译JSP。(注意“reload-interval”参数相当于“development=false”和“checkInterval=0”组合的简写):
<init-param>
<param-name>reload-interval></param-name>
<param-value>-1></param-value>
</init-param>
4)不做任何请求时检查,但启动一个后台线程执行每N秒检查一次。下面的例子每60秒检查一次:
<init-param>
<param-name>development></param-name>
<param-value>false></param-value>
</init-param>
<init-param>
<param-name>checkInterval></param-name>
<param-value>60></param-value>
</init-param>
修改配置
不考虑你正在使用哪一个JSP容器,有几个选项用于修改JspServlet配置。
重载webdefault.xml
你能拷贝Jetty自带的$JETTY_HOME/etc/webdefault.xml,修改,然后用它代替自带的版本。下面展示如何使用Jetty Maven插件达到这个目地:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<webApp>
<defaultsDescriptor>src/main/resources/webdefault.xml</defaultsDescriptor>
</webApp>
</plugin>
如果你正在使用Jetty发行版,你想改变JSP设置为一个或者多个你的webapp,拷贝$JETTY_HOME/etc/webdefault.xml文件到某个地方,修改,然后用context xml文件设置这个文件为你的webapp的defaultsDescriptor。下面是一个例子:
<Configure class=>"org.eclipse.jetty.webapp.WebAppContext">
<Set name=>"contextPath">/foo</Set>
<Set name=>"war"><SystemProperty name=>"jetty.home" >default=>"."/>/webapps/foobar.war</Set>
<Set name=>"defaultsDescriptor">/home/smith/dev/webdefault.xml</Set>
</Configure>
如果你想改变JSP设置为所有webapp,直接编辑$JETTY_HOME/etc/webdefaults.xml即可。
在web.xml中配置JSP Servlet
另一个选择是在你的webapp的WEB-INF/web.xml中为JSPServlet增加一个条目,改变或者增加初始化参数。你也可以增加(但不移除)servlet-mappings。你能用在$JETTY_HOME/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>keepgenerated</param-name>
<param-value>>true</param-value>
</init-param>
...
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspf</url-pattern>
<url-pattern>*.jspx</url-pattern>
<url-pattern>*.xsp</url-pattern>
<url-pattern>*.JSP</url-pattern>
<url-pattern>*.JSPF</url-pattern>
<url-pattern>*.JSPX</url-pattern>
<url-pattern>*.XSP</url-pattern>
</servlet-mapping>
<servlet id=>"my-servlet">
<servlet-name>myServlet</servlet-name>
<servlet-class>com.acme.servlet.MyServlet</servlet-class>
...
用JSTL标签库
JavaServer Pages Standlard Tag Library(JSTL)是Jetty发布版本的一部分(在$JETTY_HOME/lib/jsp)中。
用JSF标签库
下面提供关于使用JSF标签库的信息。
在Jetty发布中使用JSF标签库
如果你想在你的webapp中使用JSF,你需要拷贝JSF实现Jar(你选择的JSF实现中包含META-INF/*.tld文件的jar)进入Jetty的共享容器库文件夹。你能放他们到lib文件夹匹配你选择的JSP容器(或者Glassfish JSP的$JETTY_HOME/lib/jsp,或者Apache JSP的$JETTY_HOME/lib/apache-jsp),或者放它们进入$JETTY_HOME/lib/ext。
用Jetty Maven插件使用JSF标签库
你应该使你的JSF Jar依赖插件,而不是webapp自身。例如:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<webApp>
<contextPath>/${artifactId}</contextPath>
</webApp>
<scanIntervalSeconds>5</scanIntervalSeconds>
</configuration>
<dependencies>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.0.8</version>
</dependency>
</dependencies>
</plugin>
分享到:
相关推荐
- 安装完成后,配置Jetty的启动脚本或配置文件以启用热部署功能。这通常涉及到修改`start.ini`或`jetty.xml`文件,启用`webapp-watch`模块。 - 创建一个名为`webapps`的目录,作为Jetty的Web应用部署目录。 - 将...
在Jetty中,可以通过配置文件启用JSP支持,并自定义JSP引擎的相关参数。 ##### 4.2 启动配置 Jetty提供了多种启动方式,包括命令行启动、作为服务启动等。不同的启动方式适用于不同的场景。 ##### 4.3 会话管理 ...
Jetty还提供了许多其他功能,如WebSocket支持、HTTP/2协议支持(尽管在6.1.9版本中可能不包含此特性,因为HTTP/2是在后续版本中引入的)、多线程模型以及与各种应用框架的集成,比如Spring和JSP。 文件“jetty6.1.9...
8. **模块化**:Jetty的lib目录可能包含多个模块的JAR,如jetty-util.jar、jetty-http.jar等,这种模块化设计使得用户可以根据需求选择启用或禁用特定的功能。 9. **部署Web应用程序**:Jetty可以通过解压WAR文件或...
2. **模块化**: Jetty的组件设计允许开发者根据需要选择启用或禁用特定功能,以达到最优的性能和资源利用率。 3. **高性能**: 通过优化的线程模型和异步I/O处理,Jetty在处理高并发请求时表现出色。 4. **可嵌入**...
这个版本的Jetty提供了对Java Servlet 3.1规范的支持,包括WebSocket和JSP处理能力。它的特点是小巧、快速且易于集成到各种Java应用中。 绿色版的Jetty 9.2.3意味着它是一个自包含的发行版,无需安装即可使用。...
Jetty的插件系统使得扩展服务器功能变得容易,例如添加对JSP、JNDI或JMX的支持。每个插件都有对应的配置选项,可以在`start.ini`中启用。 总的来说,Jetty服务器因其灵活性、易用性和高性能,成为许多Java开发者的...
你还可以通过模块化扩展Jetty的功能,例如添加对JSP的支持。 总的来说,Jetty以其轻量、高效和灵活的特性,在Java Web开发中占有一席之地。无论是快速原型开发还是生产环境部署,Jetty都是一个值得考虑的选择。通过...
首先,Jetty服务器的核心功能在于支持HTTP和HTTPS协议,能够处理静态文件、Servlet和JSP。在8.1.5版本中,它提供了对Servlet 3.0规范的全面支持,这意味着开发者可以利用其增强的异步处理能力、过滤器链和安全特性。...
Jetty以其小巧的体积、快速的启动时间和对现代Web技术的支持而受到开发者的青睐。这个资源包包含了Jetty 7.5.x版本的所有组件和必要文件,使得用户可以方便地在本地或生产环境中部署和运行基于Java Servlet和JSP的...
为了在Jetty服务器上启用Axis2服务,你需要将这个WAR文件部署到Jetty的"webapps"目录下。 **部署步骤** 1. 首先,确保你已经下载并安装了Jetty服务器。 Jetty通常会有一个解压即用的结构,包含一个"start.jar"文件...
Apache以其丰富的模块化设计和广泛的支持,常被用作前端服务器处理HTTP请求,而Jetty则以其轻量级、快速和对Java应用的优化而受到开发者的喜爱,尤其适合运行Java Servlet和JSP应用。本配置案例主要探讨如何将Apache...
首先,让我们理解标题中的核心组件: 1. **嵌入式Jetty**:Jetty是一个轻量级、开源的HTTP服务器和Servlet容器,常用于Java应用。嵌入式Jetty允许我们将Jetty直接集成到应用程序中,无需单独部署或管理服务器进程。...
Eclipse Jetty 9.0 插件是一个用于集成Jetty服务器到Eclipse IDE的工具,使得开发者可以在Eclipse环境中方便地开发、测试和部署基于Java Servlet和JSP的应用程序。由于Eclipse官方仓库中的插件往往较旧,可能不支持...
1. **HTTPS支持**:Jetty可以配置为使用OpenSSL提供的SSL/TLS功能,以提供安全的HTTPS连接。通过设置Jetty的SSL端口和证书路径,可以确保Web应用的数据传输安全。 2. **证书管理**:开发或测试环境中,OpenSSL可...
此外,Jetty还提供了对JSP(JavaServer Pages)的支持,尽管它不包含在基础发行版中,但可以通过添加相应的模块来启用。 3. **模块化设计**:Jetty的模块化架构使得用户可以根据需要选择加载特定的功能模块,如...
Jetty是由Eclipse基金会维护的一个开源项目,它符合Java Servlet和JSP规范。与其他Web服务器相比,Jetty以其小型化、快速响应和低内存占用而著称。由于其模块化设计,Jetty可以轻松地集成到各种项目中,无需复杂的...
- 将插件部署到支持JSP的Web服务器环境,如Tomcat或Jetty。 - 配置插件以连接到网站数据库或其他数据源。 - 在网站的HTML或JSP页面中插入适当的代码,以启用RSS订阅链接。 - 测试生成的RSS feed,确保在不同阅读...
【jsp在线电影网站系统】是一个基于JavaServer Pages (JSP) 技术构建的在线娱乐平台,主要功能是提供在线电影的播放服务。这个系统利用了JSP的强大动态网页生成能力,结合后端服务器处理,为用户带来流畅的观影体验...
6. **Servlet容器**:JSP运行在Servlet容器(如Tomcat、Jetty)中,容器负责处理JSP的生命周期管理、请求响应以及与其他Web组件的交互。 7. **MVC模式**:尽管JSP最初设计为视图层技术,但随着Web应用复杂性的增加...