Jetty:配置JSP支持
选择JSP实现
从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将被使用 | - | - |
| 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实例中定义:
| 初始參数 | 描写叙述 | 默认值 | 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,栈轨迹,等,被送到标准错误取代client的浏览器。 | 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->
<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:配置JSP支持的更多相关文章
- 内置Jetty配置JSP支持过程中的常见报错
目录 1. 常见报错及解决 1.1 JSP support not configured 1.2 JSTL标签解析 1.3 JSP编译 1.4 JSP实现依赖 1.5 EL表达式支持 2. 小结 1. ...
- springboot 配置jsp支持
springboot默认并不支持jsp模板,所以需要配置. 下面是一个可以运行的例子: 首先配置属性文件: spring.http.encoding.force=true spring.http. ...
- 搭建SpringBoot、Jsp支持学习笔记
Spring Boot 添加JSP支持 大体步骤: (1) 创建Maven web project: (2) 在pom.xml文件添加依赖: (3) ...
- Springboot-添加对jsp支持
1,在项目的配置文件加入以下依赖 <dependency> <groupId>javax.servlet</groupId> <artifactId>j ...
- Spring Boot 添加JSP支持【转】
Spring Boot 添加JSP支持 大体步骤: (1) 创建Maven web project: (2) 在pom.xml文件添加依赖: (3) ...
- springboot(二)配置SpringBoot支持自动装载Servlet
Servlet详解:https://blog.csdn.net/yanmiao0715/article/details/79949911 Web 技术成为当今主流的互联网 Web 应用技术之一,而 S ...
- Springboot(二)springboot之jsp支持
参考恒宇少年的博客:https://www.jianshu.com/p/90a84c814d0c springboot内部对jsp的支持并不是特别理想,而springboot推荐的视图是Thymele ...
- IntelliJ IDEA使用(二):tomcat和jetty配置
上一讲用idea创建了maven web项目,接下来我们把项目发布到tomcat和jetty运行,以便进一步地开发和调试 配置tomcat 第一.打开菜单栏 第二.点击设置按钮,添加应用服务器,选择t ...
- 阿里云服务器Linux CentOS安装配置(五)jetty配置、部署
阿里云服务器Linux CentOS安装配置(五)jetty配置.部署 1.官网下载jetty:wget http://repo1.maven.org/maven2/org/eclipse/jetty ...
随机推荐
- windows服务怎么向应用程序发消息(部署在同一台机,非SCOKET)
命名管道:NamedPipeClientStream & NamedPipeClientStream 参考实例:http://msdn.microsoft.com/zh-cn/library/ ...
- 基于visual Studio2013解决C语言竞赛题之0414特殊平方数
题目 解决代码及点评 这道题依旧是通过for循环,遍历所有四位数,然后根据题目要求判断数的性质即可 /**************************************** ...
- NYOJ-开灯问题
开灯问题 时间限制:3000 ms | 内存限制:65535 KB 难度: 描写叙述 有n盏灯,编号为1~n.第1个人把全部灯打开,第2个人按下全部编号为2 的倍数的开关(这些灯将被关掉),第3 ...
- 学习MongoDB 二:MongoDB加入、删除、改动
一.简单介绍 MongoDB是一个高性能.开源.无模式的文档型数据库,是当前NoSQL数据库产品中最热门的一种.数据被分组存储在数据集中,被称为一个集合(Collenction)和对于存储在Mongo ...
- Axis2(10):使用soapmonitor模块监视soap请求与响应消息
在Axis2中提供了一个Axis2模块(soapmonitor),该模块实现了与<WebService大讲堂之Axis2(9):编写Axis2模块(Module)>中实现的logging模 ...
- BZOJ 1196: [HNOI2006]公路修建问题( MST )
水题... 容易发现花费最大最小即是求 MST 将每条边拆成一级 , 二级两条 , 然后跑 MST . 跑 MST 时 , 要先加 k 条一级road , 保证满足题意 , 然后再跑普通的 MST . ...
- java--局部类只能访问外包方法的final局部成员
class B523{ // private int k = 10; public void go(int x, final int y){ // int a = x+y; final int b = ...
- Android TextView自己主动换行文字排版參差不齐的原因
今天项目没什么进展,公司后台出问题了.看了下刚刚学习Android时的笔记,发现TextView会自己主动换行,并且排版文字參差不齐.查了下资料,总结原因例如以下: 1.半角字符与全角字符混乱所致:这 ...
- Materialized View in Oracle - Concepts and Architecture
List all of MV inoracle: select owner, query, query_len from dba_mviews See content of aMV: select * ...
- JavaScript实现复制功能
这两天在做Web前端时,遇到需求通过 js 实现文本复制的功能. 先不考虑浏览器的兼容性,看看各浏览器对复制功能的支持情况: 1.IE浏览器 ,解决方法有三种,代码如下: function copy( ...