Jetty 嵌入式开发
2015-11-30 08:31
671 查看
Jetty 嵌入式开发
最近,需要从现有的,一个比较庞大的WEB系统中,抽取一部分功能做成一个带操作界面的小工具。由于本人只对WEB比较熟悉,对于AWT、Swing 、SWT 、JFace等等技术不是很了解,最后还是决定使用WEB包装此小工具的操作界面。
为了缩小整个小工具的体积,放弃了TOMCAT选择了JETTY
为了使用户配置起来不是很麻烦,放弃了WAR部署选择了JETTY的嵌入式部署。
之前使用jetty,是将工程打包成war包,再放入jetty的webapps中,使用start.jar启动运行(Eclipse中调试Maven+Jetty 便是使用此方法)
如何使用jetty的嵌入式,网上搜到了很多先辈的博客,都推荐使用 jetty-all (mvnreposity: jetty-all),但经过多次尝试,均以各种异常失败告终,原因暂时不明。
通过start.jar运行jetty的时候,理论上也就是引用了lib中的jar包
据此思路,基于9.2.12.v20150709版本jetty的lib,添加maven依赖,如下
编写主函数
运行没有问题,访问普通页面也没有问题,但在使用jstl的时候,报各种tld找不到
The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
但在taglibs-standard包的META-INF中,确实存在jstl的tld文件
尝试将tld文件拷贝到web目录下,并配置到web.xml中,如下
但依然报错,考虑到报错的原因,是找不到tld文件,不如直接在jsp中将jstl的uri写成相对路径,如下
一切正常,至此,jetty嵌入式环境搭建完毕
最近,需要从现有的,一个比较庞大的WEB系统中,抽取一部分功能做成一个带操作界面的小工具。由于本人只对WEB比较熟悉,对于AWT、Swing 、SWT 、JFace等等技术不是很了解,最后还是决定使用WEB包装此小工具的操作界面。
为了缩小整个小工具的体积,放弃了TOMCAT选择了JETTY
为了使用户配置起来不是很麻烦,放弃了WAR部署选择了JETTY的嵌入式部署。
之前使用jetty,是将工程打包成war包,再放入jetty的webapps中,使用start.jar启动运行(Eclipse中调试Maven+Jetty 便是使用此方法)
如何使用jetty的嵌入式,网上搜到了很多先辈的博客,都推荐使用 jetty-all (mvnreposity: jetty-all),但经过多次尝试,均以各种异常失败告终,原因暂时不明。
通过start.jar运行jetty的时候,理论上也就是引用了lib中的jar包
据此思路,基于9.2.12.v20150709版本jetty的lib,添加maven依赖,如下
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <base.jdk.version>1.7</base.jdk.version><!-- jdk版本 --> <junit.version>4.11</junit.version><!-- junit版本 --> <!-- spring framework版本 --> <spring.framework.version>4.2.1.RELEASE</spring.framework.version> <jackson.version>2.5.0</jackson.version><!-- jackson版本 --> <eclipse.jetty.version>9.2.12.v20150709</eclipse.jetty.version> </properties> <dependencies> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-xml</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-util</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlet</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlets</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-security</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty.toolchain</groupId> <artifactId>jetty-schemas</artifactId> <version>3.1.M0</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-rewrite</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-io</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-http</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-deploy</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-continuation</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-client</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <!-- lig/spring --> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-spring</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <!-- lib/jsp --> <!-- NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet --> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.el</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>javax.servlet.jsp.jstl</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>javax.servlet.jsp</artifactId> <version>2.3.2</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-jsp</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <!-- lib/apache-jstl --> <dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-impl</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>org.apache.taglibs</groupId> <artifactId>taglibs-standard-spec</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency><!-- spring-core --> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.framework.version}</version> </dependency> <dependency><!-- spring-beans --> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.framework.version}</version> </dependency> <dependency><!-- spring-context --> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.framework.version}</version> </dependency> <dependency><!-- spring-context-support --> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.framework.version}</version> </dependency> <dependency><!-- spring-aop --> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.framework.version}</version> </dependency> <dependency><!-- spring-expression --> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.framework.version}</version> </dependency> <dependency><!-- spring-aspects --> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.framework.version}</version> </dependency> <dependency><!-- spring-web --> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.framework.version}</version> </dependency> <dependency><!-- spring-mvc --> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.framework.version}</version> </dependency> <dependency><!-- spring-messaging --> <groupId>org.springframework</groupId> <artifactId>spring-messaging</artifactId> <version>${spring.framework.version}</version> </dependency> <!-- JSON --> <dependency><!-- jackson-core --> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> </dependency> <dependency><!-- jackson-databind --> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <dependency><!-- jackson-annotations --> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty.websocket</groupId> <artifactId>websocket-server</artifactId> <version>${eclipse.jetty.version}</version> </dependency> <dependency><!-- spring-websocket --> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>${spring.framework.version}</version> </dependency> <dependency><!-- spring-messaging --> <groupId>org.springframework</groupId> <artifactId>spring-messaging</artifactId> <version>${spring.framework.version}</version> </dependency> </dependencies>
编写主函数
public static void main(String[] args) throws Exception { File basedir = null; if (args.length > 0) { basedir = new File(args[0]); } else { basedir = new File( Thread.currentThread().getContextClassLoader().getResource("").getPath()); } LOGGER.info("BaseDir: " + basedir.getAbsolutePath()); String descriptor = new File(basedir, "WebContent/WEB-INF/web.xml").getAbsolutePath(); String resourceBase = new File(basedir, "WebContent").getAbsolutePath(); LOGGER.info("Descriptor: " + descriptor); LOGGER.info("ResourceBase: " + resourceBase); /* 初始化webserver */ Server server = new Server(8080); /* 配置webcontent */ WebAppContext context = new WebAppContext(); context.setContextPath("/"); context.setDescriptor(descriptor); context.setResourceBase(resourceBase); context.setClassLoader(Thread.currentThread().getContextClassLoader()); context.setConfigurationDiscovered(true); context.setParentLoaderPriority(true); server.setHandler(context); /* 启动web & spring */ server.start(); }
运行没有问题,访问普通页面也没有问题,但在使用jstl的时候,报各种tld找不到
The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
但在taglibs-standard包的META-INF中,确实存在jstl的tld文件
尝试将tld文件拷贝到web目录下,并配置到web.xml中,如下
<taglib> <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri> <taglib-location>/WEB-INF/jstl/c.tld</taglib-location> </taglib>
但依然报错,考虑到报错的原因,是找不到tld文件,不如直接在jsp中将jstl的uri写成相对路径,如下
<!-- The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application --> <%@ taglib prefix="c" uri="/jstl/c.tld" %><!-- http://java.sun.com/jsp/jstl/core --> <%@ taglib prefix="fmt" uri="/jstl/fmt.tld" %><!-- http://java.sun.com/jsp/jstl/functions --> <%@ taglib prefix="fn" uri="/jstl/fn.tld" %><!-- http://java.sun.com/jsp/jstl/fmt -->
一切正常,至此,jetty嵌入式环境搭建完毕
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- i-jetty环境搭配与编译
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- jetty小试
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序