`

嵌入式(embed)Tomcat的使用

 
阅读更多

本来想用InstallAnyWhere来制作一个安装文件,里面包含一个tomcat,结果发现InstallAnyWhere一时半会儿可能学不下来。我的目的是想用Java SWT做一个壳子,内嵌一个浏览器,这个浏览器访问tomcat应用,让整个程序看起来像是一个CS架构的。我需要的功能倒是不复杂,想想能不能自己实现一个tomcat。Tomcat有没有提供这样的功能呢,不小心搜索了一下“嵌入式Tomcat”,还真有,并且在Tomcat5的时候就已经支持了:https://devcenter.heroku.com/articles/create-a-java-web-application-using-embedded-tomcat#create-your-pom-xml

他用的maven,直接到官网上下载embed版的压缩包下来解压放到自己项目的lib目录中,并添加到buildpath中。

按这上面的说法抄一个吧,代码很简单:

public class Main {

    public static void main(String[] args) throws Exception {

        String webappDirLocation = "src/main/webapp/";
        Tomcat tomcat = new Tomcat();

        //The port that we should run on can be set into an environment variable
        //Look for that variable and default to 8080 if it isn't there.
        String webPort = System.getenv("PORT");
        if(webPort == null || webPort.isEmpty()) {
            webPort = "8080";
        }

        tomcat.setPort(Integer.valueOf(webPort));

        tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath());
        System.out.println("configuring app with basedir: " + new File("./" + webappDirLocation).getAbsolutePath());

        tomcat.start();
        tomcat.getServer().await();
    }
}
按照该文章的步骤完全可以得出正确结果,但是他的方法生成了一个很复杂的bat文件,搞半天不还是搞出了一个和tomcat一模一样的东西来。但是如果直接run这个main方法,会报下面的错误:

org.apache.jasper.JasperException: java.lang.IllegalStateException: No Java compiler available
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:585)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:391)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

追踪源码,发现是在load类org.apache.jasper.compiler.JDTCompiler的时候出了问题。但是这个类确实已经存在于编译路径中了,咋整?直接在main方法中在启动tomcat之前load一把试试:

 Class.forName("org.apache.jasper.compiler.JDTCompiler");
结果:

Caused by: java.lang.ClassNotFoundException: org.eclipse.jdt.internal.compiler.env.INameEnvironment
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	... 3 more

发现,其实是没有上面的这个类。从网上找到,并加入到编译路径下就ok了:


接下来,把webapp换成真实项目的路径,该项目中使用了spring、Hibernate等工具:

public class Main {

    public static void main(String[] args) throws Exception {

        String webappDirLocation = "src/main/webapp/";
        Tomcat tomcat = new Tomcat();

        //The port that we should run on can be set into an environment variable
        //Look for that variable and default to 8080 if it isn't there.
        String webPort = System.getenv("PORT");
        if(webPort == null || webPort.isEmpty()) {
            webPort = "8080";
        }

        tomcat.setPort(Integer.valueOf(webPort));

//      tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath());
        tomcat.addWebapp("/nea", "D:\\apache-tomcat-7.0.34\\webapps\\nea");
        System.out.println("configuring app with basedir: D:\\apache-tomcat-7.0.34\\webapps\\nea");

        tomcat.start();
        tomcat.getServer().await();
    }
}
重新启动,发现spring mvc 的路径映射、Hibernate数据库初始化等动作正常执行了。

分享到:
评论

相关推荐

    嵌入式tomcat,带例子。

    这个压缩包文件"tomcat-embed"很可能是包含了用于嵌入式Tomcat的相关库和配置文件,方便开发者在自己的应用中快速集成和启动Tomcat服务。 首先,我们来理解一下嵌入式Tomcat的核心概念。嵌入式Tomcat允许开发者在...

    tomcat-embed5.5.28

    《深入理解嵌入式Tomcat:以tomcat-embed5.5.28为例》 在现代Web应用程序的开发中,Tomcat作为一个轻量级、高效的Java Servlet容器,被广泛应用于各种项目。其中,嵌入式Tomcat的概念更是为开发者带来了极大的便利...

    使用embeded tomcat进行嵌入式javaee开发-启动tomcat

    本文将深入探讨如何使用embeded Tomcat进行嵌入式JavaEE开发,并详细解释启动过程。 首先,理解embeded Tomcat的概念。Embeded Tomcat是指将Tomcat服务器作为Java应用程序的一部分,在代码中直接初始化和管理,而...

    嵌入式tomcat依赖jar包8.5.29(包括tomcat-juli、tomcat-jdbc、tomcat-embed...)

    嵌入式tomcat依赖jar包8.5.29版本(其中包括tomcat-juli-8.5.29、tomcat-jdbc-8.5.29、tomcat-embed-websocket-8.5.29、tomcat-embed-el-8.5.29、tomcat-embed-core-8.5.29、tomcat-annotations-api-8.5.29)

    03-嵌入式Tomcat1

    Spring Boot支持Tomcat、Jetty和Undertow三种嵌入式容器,但Tomcat因其广泛使用和成熟度成为了默认选择。 在Maven集成方面,Spring Boot项目通常会包含`tomcat-embed-core`等相关的依赖,这些依赖包含了Tomcat的...

    官网下载的嵌入式apache-tomcat-5.5.34-embed

    这是官网下载的嵌入式tomcat,最高版本就是5.5.34的,里面有完整的jar文件及那3个配置文件。想知道怎么用欢迎光临我的CSDN博客http://blog.csdn.net/youqishini?viewmode=contents 里面有讲解!

    apache-tomcat-5.5.17-embed.tar.gz

    `apache-tomcat-5.5.17-embed.tar.gz`是一个归档文件,采用tar格式,并使用gzip进行压缩。在Unix或Linux系统上,可以使用`tar -zxvf apache-tomcat-5.5.17-embed.tar.gz`命令来解压。在Windows环境中,可以使用7-Zip...

    apache-tomcat-9.0.54-embed.zip

    在给定的压缩包"apache-tomcat-9.0.54-embed.zip"中,包含了Tomcat的嵌入式版本,这通常用于将Tomcat功能集成到其他应用程序或库中,而不是作为独立的服务运行。 1. **Tomcat Embed Core**: "tomcat-embed-core.jar...

    apache-tomcat-8.5.72-embed.zip

    Tomcat使用它来管理数据库连接,提高应用的性能和资源利用率,避免频繁地打开和关闭数据库连接。 5. **tomcat-embed-websocket.jar**:此文件包含了Tomcat对WebSocket协议的支持。WebSocket是一种在客户端和服务器...

    apache-tomcat-8.5.72-embed.tar.gz

    `embed`这个术语意味着这是一个嵌入式版本的Tomcat。不同于通常的安装版,嵌入式Tomcat允许开发者将Tomcat作为Java应用程序的一部分直接集成,而无需独立的服务器进程。这对于微服务架构或者需要轻量级服务器环境的...

    apache-tomcat-9.0.54-embed.tar.gz

    这个压缩包文件 "apache-tomcat-9.0.54-embed.tar.gz" 包含了可嵌入式的Tomcat版本,这意味着它可以在不依赖独立服务器的情况下直接在应用程序中使用。这种轻量级的部署方式对于开发和测试环境非常实用。 Tomcat 是...

    tomcat7 在java程序中启动

    而Tomcat7对嵌入式支持进行了改进,引入了`Tomcat`类,并添加了新的包装器类`org.apache.catalina.startup.Tomcat`,提供了更简便的嵌入式使用方法。这一改动也意味着对旧版本代码的更新和替换。 #### 嵌入式Tomcat...

    tomcat 升级到8.5.99后,系统启动不起来问题(修复 CVE-2024-24549 拒绝访问漏洞)

    `tomcat-embed-core`是Tomcat的核心模块,用于嵌入式部署,它包含了Servlet容器的基本功能。`.jar`文件是Java Archive,包含了编译后的类文件和资源文件,是Java程序运行时的依赖。`.pom`文件是Maven的项目对象模型...

    apache-tomcat-9.0.35-embed.zip

    嵌入式tomcat This is the top-level entry point of the documentation bundle for the Apache Tomcat Servlet/JSP container. Apache Tomcat version 9.0 implements the Servlet 4.0 and JavaServer Pages 2.3 ...

    嵌入tomcat

    2. **构建嵌入式Tomcat实例**:创建`Embedded`类的实例,它代表嵌入式Tomcat Server。 3. **配置引擎**:创建`Engine`实例,这将作为容器来包含`Host`节点。`Engine`充当整个Web应用的处理器。 4. **设置虚拟主机*...

    TOMCAT-EMBEDD

    - 使用`org.apache.catalina.startup.Embedded`类来创建一个嵌入式Tomcat Server的实例。这是构建整个Tomcat服务的基础。 2. **创建Engine实例**: - 通过`org.apache.catalina.Engine`类创建Engine实例。Engine...

    TongWeb嵌入式版本用户手册-7.0.E.5

    《TongWeb嵌入式版本用户手册-7.0.E.5》是针对TongWeb嵌入式版应用服务器的详细指南,适用于开发人员和系统管理员。TongWeb嵌入式版是一款支持Java EE和React响应式编程标准的服务器,同时具备基于算法模型的网关...

    Embedded-Tomcat:WAR 中的 Tomcat 示例

    在这个项目中,你可能会找到如何配置和使用嵌入式Tomcat的详细步骤,包括如何加载WAR文件,如何处理HTTP请求,以及如何设置日志和错误处理等。 总的来说,嵌入式Tomcat提供了一种灵活的方式,让开发者能够在Java...

    tomcat5.5嵌入版

    在使用`apache-tomcat-5.5.20-embed`压缩包时,开发者通常会解压并将其添加到项目类路径中,然后通过Java API来启动和管理Tomcat实例。这通常涉及以下步骤: 1. **导入依赖**:将解压后的Tomcat库添加到项目的构建...

    java网站基础环境tomcat+mysql+redis.zip

    2. 对于Tomcat,解压apache-tomcat-9.0.36-embed.zip。这个是嵌入式版本的Tomcat,方便在开发环境中快速启动和停止。配置Tomcat的server.xml文件,如端口设置,然后启动Tomcat服务。 3. 安装Java运行环境(JRE),...

Global site tag (gtag.js) - Google Analytics