运行Tomcat嵌入式Java应用程序

时间:2017-12-28 15:51:31

标签: java maven tomcat

我正在尝试使用嵌入式Tomcat构建和运行一个最小的Java应用程序,但我遇到了一些困难(如下图所示)。

我正在尝试将配置保持在最低限度,因此如果不需要设置值,因为默认值已经是必需值,或者依赖项已经包含另一个依赖项,那么我将不会设置它。我基本上是通过运行和响应错误来搞清楚的。

我的目录结构如下(我对标准数据结构的含义感到困惑,所以我按照here所描述的那样使用了Maven。

Directory Structure

我使用带有以下pom.xml

的maven项目
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupId</groupId>
    <artifactId>artifactId</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <tomcat.version>8.5.24</tomcat.version>
    </properties>

    <dependencies>
        <dependency>
            <!-- includes core, el, jasper, annotations-api -->
            <!-- core includes juli logging -->
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>${tomcat.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>

    <build>
        <defaultGoal>package</defaultGoal>
    </build>
</project>

我的Main课程如下

import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;

import javax.servlet.ServletException;
import java.io.File;

public class Server {

    public static void main(String[] args) throws LifecycleException, ServletException {
        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);
        tomcat.addWebapp("", new File("src/main/webapp").getAbsolutePath());
        tomcat.start();
        tomcat.getServer().await();
    }
}

我的web.xml只是指向servlet。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>servlet</servlet-name>
        <servlet-class>Servlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>servlet</servlet-name>
        <url-pattern>/servlet1</url-pattern>
    </servlet-mapping>

</web-app>

只需使用此配置,我就可以运行Tomcat服务器,使用JSTL代码显示JSP页面,并运行WebServlet。

当我启动应用程序时,我得到以下输出,看起来都很好。

Dec 28, 2017 12:31:49 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
Dec 28, 2017 12:31:49 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Dec 28, 2017 12:31:49 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Tomcat]
Dec 28, 2017 12:31:49 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/8.5.24
Dec 28, 2017 12:31:49 PM org.apache.catalina.startup.ContextConfig getDefaultWebXmlFragment
INFO: No global web.xml found
Dec 28, 2017 12:31:53 PM org.apache.jasper.servlet.TldScanner scanJars
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Dec 28, 2017 12:31:53 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]

我遇到的问题如下:

  1. 如何配置日志记录?我试图包括一个 logging.properties文件在资源中,以及WEB-INF / classes和 甚至/ lib,/ config,/,但我似乎无法让它工作。
  2. 如何更改为使用Log4J? maven tomcat-embed-jasper 依赖项包括juli,我尝试将<exclude>添加到。{1}} 依赖但它没有删除它。
  3. 我是否必须在serlvet-mapping中声明每个web.xml或者是否有其他方式(不使用Spring框架)让Tomcat识别它们?

0 个答案:

没有答案