让jetty启用支持jsp功能

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的参数介绍:

 

理解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将被使用。 - -
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我理解您的问题是如何在JDK17中内嵌Jetty11并配置JSP界面。首先,需要在项目中添加Jetty11的依赖,例如Maven项目可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> <version>11.0.6</version> </dependency> ``` 然后,在代码中启动Jetty11并配置JSP界面,可以参考以下示例代码: ```java import org.eclipse.jetty.server.Server; import org.eclipse.jetty.webapp.WebAppContext; public class EmbeddedJetty { public static void main(String[] args) throws Exception { Server server = new Server(8080); WebAppContext webapp = new WebAppContext(); webapp.setContextPath("/"); webapp.setResourceBase("src/main/webapp"); webapp.setClassLoader(Thread.currentThread().getContextClassLoader()); webapp.setConfigurationClasses(new String[]{"org.eclipse.jetty.webapp.WebInfConfiguration", "org.eclipse.jetty.webapp.WebXmlConfiguration"}); webapp.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", ".*/[^/]*jstl.*\\.jar$"); webapp.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", ".*/[^/]*taglibs.*\\.jar$"); webapp.setDescriptor("src/main/webapp/WEB-INF/web.xml"); webapp.setParentLoaderPriority(true); server.setHandler(webapp); server.start(); server.join(); } } ``` 此代码将在8080端口启动Jetty11并将Web应用程序部署在src/main/webapp目录下。在此目录下,您可以创建一个JSP文件并通过http://localhost:8080/访问它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值