写点什么

保姆级 tomcat 快速入门

用户头像
田维常
关注
发布于: 2021 年 01 月 15 日


背景介绍


Apache Tomcat 是 Java Servlet、JavaServer Pages (JSP)、Java 表达式语言和 Java 的 WebSocket 技术的一个开源实现 ,通常我们将 Tomcat 称为 Web 容器或者 Servlet 容器 。


tomcat 各版本和相应规范的映射关系:



下载地址


https://tomcat.apache.org/download-90.cgi
复制代码

下载到本地并解压:



进入主目录:



tomcat 目录介绍


bin


启动,关闭和其他脚本。这些 .sh 文件(对于 Unix 系统)是这些.bat 文件的功能副本(对于 Windows 系统)。由于 Win32 命令行缺少某些功能,因此此处包含一些其他文件。


比如说:windows 下启动 tomcat 用的是 startup.bat,另外 Linux 环境中使用的是 startup.sh。对应还有相应的 shutdown 关闭脚本。


conf


tomcat 的配置文件和相关的 DTD。这里最重要的文件是 server.xml。它是容器的主要配置文件。


catalina.policy:tomcat:安全策略文件,控制 JVM 相关权限,具体可以参考 java.security.Permission。


catalina.properties:tomcat Catalina 行为控制配置文件,比如:Common ClassLoader。


logging.properties:tomcat 日志配置文件。里面的日志采用的是 JDK Logging。


server.xml:tomcat server 配置文件(对于我开发人员来说是非常重要)。


context.xml:全局 context 配置文件,监视并加载资源文件,当监视的文件发生发生变化时,自动加载 。


tomcat-user.xml:tomcat 角色配置文件。


web.xml:Servlet 标准的 web.xml 部署文件,tomcat 默认实现部分配置 入内:


  • org.apache.catalina.servlets.DefaultServlet。

  • org.apache.jasper.servlet.JspServlet


logs


日志文件默认位于此处。


localhost有用,当你们的 tomcat 启动不了的时候,多看这个文件。比如:


  • NoClassDefFoundError

  • ClassNotFoundException


access最没用。


catalina.{date} 主要是控制台输出,全部日志都在这里面。


webapps


这是您的 webapp 所在的位置。其实这里面这几个都是一个项目。


简化 web 部署的方式。在线上环境中我们的应用是不会放在这里的。最好的办法就是外置。


lib


tomcat 存放共用的类库。比如:


  • ecj-4.17.jar: eclipse Java 编译器

  • jasper.jar:JSP 编译器。


work


存放 tomcat 运行时编译后的文件,比如 JSP 编译后的文件 。


temp


存放运行时产生的临时文件。


启动 tomcat


启动 tomcat


我们在 windows 下的就直接启动 bin 目录下的 startup.bat,对应 Linux 环境中我们使用的是 startup.sh。


双击就能启动了。控制台会输 8080 端口,然后我们访问:


http://localhost:8080/
复制代码

页面展示:



这就代表着我们的 tomcat 启动成功了。


此时,http://localhost:8080/请求到的是 ROOT 目录。


比如:我们还可以http://localhost:8080/manager


Servlet 项目部署到 tomcat 中


创建 web 项目


使用 maven 创建 web 项目,既然说 tomcat 是 Servlet 容器,那么在项目中创建一个 Servlet 类,然后打成 war 包,拷贝到 tomcat 中部署。


项目结构如下:



添加依赖


    <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/maven-v4_0_0.xsd">
复制代码


      <modelVersion>4.0.0</modelVersion>
复制代码


      <groupId>com.tian.maven</groupId>
复制代码


      <artifactId>my-web-maven</artifactId>
复制代码


      <packaging>war</packaging>
复制代码


      <version>1.0-SNAPSHOT</version>
复制代码


      <name>my-web-maven Maven Webapp</name>
复制代码


      <url>http://maven.apache.org</url>
复制代码


      <dependencies>
复制代码


        <dependency>
复制代码


          <groupId>junit</groupId>
复制代码


          <artifactId>junit</artifactId>
复制代码


          <version>3.8.1</version>
复制代码


          <scope>test</scope>
复制代码


        </dependency>
复制代码


        <dependency>
复制代码


          <groupId>javax.servlet</groupId>
复制代码


          <artifactId>javax.servlet-api</artifactId>
复制代码


          <version>3.1.0</version>
复制代码


        </dependency>
复制代码


      </dependencies>
复制代码


      <build>
复制代码


        <finalName>my-web-maven</finalName>
复制代码


      </build>
复制代码


    </project>
复制代码

创建 DemoServlet


    package com.tian.maven;
复制代码


复制代码


    import javax.servlet.ServletException;
复制代码


    import javax.servlet.annotation.WebServlet;
复制代码


    import javax.servlet.http.HttpServlet;
复制代码


    import javax.servlet.http.HttpServletRequest;
复制代码


    import javax.servlet.http.HttpServletResponse;
复制代码


    import java.io.IOException;
复制代码


复制代码


    @WebServlet(urlPatterns = "/demo")
复制代码


    public class DemoServlet extends HttpServlet {
复制代码


        @Override
复制代码


        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
复制代码


            String msg = req.getParameter("message");
复制代码


            String contextPath = req.getServletContext().getContextPath();
复制代码


            System.out.println("contextPath=" + contextPath);
复制代码


            resp.getWriter().println(msg);
复制代码


        }
复制代码


    }
复制代码

web.xml 什么都没有,仅仅就是为了打包。


    <!DOCTYPE web-app PUBLIC
复制代码


     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
复制代码


     "http://java.sun.com/dtd/web-app_2_3.dtd" >
复制代码


复制代码


    <web-app>
复制代码


      <display-name>Archetype Created Web Application</display-name>
复制代码


    </web-app>
复制代码

index.jsp 找那个也没什么内容:


    <html>
复制代码


    <body>
复制代码


    <h2>Hello World!</h2>
复制代码


    </body>
复制代码


    </html>
复制代码

使用 mvn 命令打成 war 包。



把打成的 war 包拷贝(其实拷贝 my-web-maven 文件夹也是一样的)到 tomcat 中 webapps 目录下:



然后到 bin 目录下,双击



项目运行起来后,访问 http://localhost:8080/



证明我们的项目已经启动成功了。


接下来我们访问我们写的 Servlet:


http://localhost:8080/demo?message=hello



报错,HTTP 状态 404 - 未找到;


注意:这里访问的时候,我们需要把项目名称当做 contextPath,即访问方式应该是:


http://localhost:8080/my-web-maven/demo?message=hello
复制代码

页面上输出


hello


轻松搞定,这样我们的项目就成功的部署到 tomcat 中。


IDEA 中的项目部署到 tomcat 中


创建一个 servlet 项目,项目名称 my-servlet。




新建一个类 MyServlet



进入我们刚刚安装的 tomcat 目录,进入到 lib 目录中,选中 servlet-api.jar。





点击 ok。



点击 Apply,然后点击 OK。


修改 MyServlet 内容:


    package com.tian.servlet;
复制代码


复制代码


    import javax.servlet.*;
复制代码


    import java.io.IOException;
复制代码


    import java.io.PrintWriter;
复制代码


复制代码


    //实现接口Servlet,必须重写下面的这些方法
复制代码


    public class MyServlet implements Servlet {
复制代码


复制代码


        private transient ServletConfig servletConfig;
复制代码


        @Override
复制代码


        public void init(ServletConfig servletConfig) throws ServletException {
复制代码


            this.servletConfig = servletConfig;
复制代码


        }
复制代码


复制代码


        @Override
复制代码


        public ServletConfig getServletConfig() {
复制代码


            return servletConfig;
复制代码


        }
复制代码


复制代码


        @Override
复制代码


        public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
复制代码


            String servletName = servletConfig.getServletName();
复制代码


            //网页响应类型,浏览器将其渲染为HTML格式
复制代码


            response.setContentType("text/html");
复制代码


            PrintWriter writer = response.getWriter();
复制代码


            writer.println("<html><head></head>" + "<body> Hello this is  " + servletName + "</body></html>");
复制代码


        }
复制代码


复制代码


        @Override
复制代码


        public String getServletInfo() {
复制代码


            return "my first Servlet";
复制代码


        }
复制代码


复制代码


        @Override
复制代码


        public void destroy() {
复制代码


        }
复制代码


    }
复制代码

修改 web.xml 文件内容:


    <?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>myServlet</servlet-name>            <servlet-class>com.tian.servlet.MyServlet</servlet-class>        </servlet>        <servlet-mapping>            <servlet-name>myServlet</servlet-name>            <url-pattern>/demo</url-pattern>        </servlet-mapping>    </web-app>
复制代码

另外我们把 index.jsp 内容修改一下,主要是为了更好的演示:


    <%@ page contentType="text/html;charset=UTF-8" language="java" %>    <html>    <body>    <h1> hello world </h1>    </body>    </html>
复制代码

IDEA 集成 tomcat


在我们的 IDEA 中添加我们安装的 tomcat:




来到 tomcat 配置 的界面:



配置 tomcat:



进入安装目录:



点击 OK,



然后进入 deployment 栏目:



添加我们创建的 servlet 项目:



自动就添加了我们的项目:



然后点击 Apply,再点击 OK。


IDEA 集成 tomcat,以及把我们项目给关联起来了。下面我们就来运行一下:



启动 tomcat


点击绿色三角:



证明我们的项目在 tomcat 中已经启动成功。



访问我们的 servlet


此时,我们就可以来访问我们的 servlet 了。


访问:http://localhost:8080/ 页面显示就是我们前面修改的 index.jsp 的内容。


再访问我们自己写的 Servlet:


http://localhost:8080/demo
复制代码



成功的把我们的内容给输出来了。好了本文内容就这些,简单式 tomcat 入门。


总结


tomcat 是什么,tomcat 如何安装,如何启动 tomcat,如何部署我们自己的 Servlet 项目,我们在 IDEA 如何集成 tomcat 以及如何启动 tomcat。


人只要不失去方向,就不会失去自己


发布于: 2021 年 01 月 15 日阅读数: 24
用户头像

田维常

关注

关注公众号:Java后端技术全栈,领500G资料 2020.10.24 加入

关注公众号:Java后端技术全栈,领500G资料

评论

发布
暂无评论
保姆级 tomcat 快速入门