Jetty 嵌入式开发

2 篇文章 0 订阅

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嵌入式环境搭建完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值