# 利刃出鞘_Tomcat 核心原理解析(六)

利刃出鞘_Tomcat 核心原理解析(六)

一、Tomcat专题 - 内容

1、Web 应用配置

2、Tomcat 管理配置

3、JVM 配置

4、Tomcat 集群

5、Tomcat 安全

6、Tomcat 性能调优

7、Tomcat 附加功能。

二、Tomcat专题 - Web应用配置介绍

1、Web.xml 配置文件。

web.xml 是 web 应用的描述文件, 它支持的元素及属性来自于Servlet 规范定义 。 在 Tomcat 中, Web 应用的描述信息包括 tomcat/conf/web.xml 中默认配置 以及 Web 应用 WEB-INF/web.xml 下的定制配置。

2、Web 应用 WEB-INF/web.xml 下的定制配置参数。

三、Tomcat专题 - Web应用配置 - context-param

1、打开 idea 创建 名为 servlet_demo01 的 Web Application 项目

java 复制代码
	--> idea --> File 
	--> New --> Project 
	--> Java 
		Project SDK: ( 1.8(java version "1.8.0_131" ) 
	--> Java EE : 勾选 ( Web Application )
	--> Next 

	--> Project Name: ( servlet_demo01 )
		Project Location: ( ...\servlet_demo01\ )	
	--> Finish	

2、在项目 servlet_demo01 中,创建 Servlet 类 BbsServlet.java

java 复制代码
/**
 *  project_tomcat\servlet_demo01\src\djh\it\web\BbsServlet.java
 *
 *  2024-8-13 创建 Servlet 类 BbsServlet.java
 *  Web应用配置 - context-param
 */
package djh.it.web;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet
public class BbsServlet extends HttpServlet {

    @Override
    protected void doGet( HttpServletRequest req, HttpServletResponse resp ){
        System.out.println("------------>> GET : BbsServlet find all ...");

        String value = req.getServletContext().getInitParameter("project_param_01");
        System.out.println(value);
    }

    @Override
    protected void doPost( HttpServletRequest req, HttpServletResponse resp ){
        System.out.println("------------>> POST : BbsServlet find all ...");
    }

}

3、在项目 servlet_demo01 中, Web应用配置 - context-param

java 复制代码
<?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>bbsServlet</servlet-name>
        <servlet-class>djh.it.web.BbsServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>bbsServlet</servlet-name>
        <url-pattern>/bbs/findAll</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>project_param_01</param-name>
        <param-value>dzs168</param-value>
    </context-param>

</web-app>
<!-- project_tomcat\servlet_demo01\web\WEB-INF\web.xml -->

4、浏览器地址栏输入:localhost:8080/servlet_demo01/bbs/findAll 进行测试,观察控制台输出结果。

dzs168

四、Tomcat专题 - Web应用配置介绍 - 会话配置session-config

1、会话配置

用于配置Web应用会话,包括 超时时间、Cookie配置以及会话追踪模式。它将覆盖 server.xml 和 context.xml 中的配置。

java 复制代码
    <!-- 会话配置session-config -->
    <session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
            <name>JESSIONID</name>
            <domain>localhost</domain>
            <path>/</path>
            <comment>Session Cookie</comment>
            <http-only>true</http-only>
            <secure>false</secure>
            <max-age>3600</max-age>
        </cookie-config>
    </session-config>

2、配置解析

1) session‐timeout : 会话超时时间,单位 分钟。

2) cookie‐config: 用于配置会话追踪 Cookie。

name:Cookie的名称

domain:Cookie的域名

path:Cookie的路径

comment:注释

http‐only:cookie 只能通过HTTP方式进行访问,JS无法读取或修改,此项可以增加网站访问的安全性。 secure:此cookie只能通过HTTPS连接传递到服务器,而HTTP 连接则不会传递该信息。注意是从浏览器传递到服务器,服务器端的Cookie对象不受此项影响。 max‐age:以秒为单位表示cookie的生存期,默认为‐1表示是会话Cookie,浏览器关闭时就会消失。

3) tracking‐mode :用于配置会话追踪模式,Servlet3.0 版本中支持的追踪模式:COOKIE、URL、SSL。

A. COOKIE : 通过HTTP Cookie 追踪会话是最常用的会话追踪机制, 而且Servlet规范也要求所有的Servlet规范都需要支持Cookie追踪。

B. URL : URL重写是最基本的会话追踪机制。当客户端不支持Cookie时,可以采用URL重写的方式。当采用URL追踪模式时,请求路径需要包含会话标识信息,Servlet容器会根据路径中的会话标识设置请求的会话信息。如: http://www.myserver.com/user/index.html;jessionid=1234567890。

C. SSL : 对于SSL请求, 通过SSL会话标识确定请求会话标识。

3、在 web.xml 配置文件中配置会话。

java 复制代码
<?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>bbsServlet</servlet-name>
        <servlet-class>djh.it.web.BbsServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>bbsServlet</servlet-name>
        <url-pattern>/bbs/findAll</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>project_param_01</param-name>
        <param-value>dzs168</param-value>
    </context-param>

    <!-- 会话配置session-config -->
    <session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
            <name>JESSIONID</name>
            <domain>localhost</domain>
            <path>/</path>
            <comment>Session Cookie</comment>
            <http-only>true</http-only>
            <secure>false</secure>
            <max-age>3600</max-age>
        </cookie-config>
    </session-config>

</web-app>
<!-- project_tomcat\servlet_demo01\web\WEB-INF\web.xml -->

4、在项目 servlet_demo01 中,修改 Servlet 类 BbsServlet.java

java 复制代码
/**
 *  project_tomcat\servlet_demo01\src\djh\it\web\BbsServlet.java
 *
 *  2024-8-13 创建 Servlet 类 BbsServlet.java
 *  Web应用配置 - context-param
 */
package djh.it.web;

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;
import java.io.PrintWriter;

//@WebServlet
public class BbsServlet extends HttpServlet {

    @Override
    protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
        System.out.println("------------>> GET : BbsServlet find all ...");

        String value = req.getServletContext().getInitParameter("project_param_01");
        System.out.println(value);

        //会话SessionId
        String id = req.getSession().getId();
        System.out.println("sessionId : " + id);

//        processRequest(req, resp);
    }

    @Override
    protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException{
        System.out.println("------------>> POST : BbsServlet find all ...");
//        processRequest(req, resp);
    }

//    private  void processRequest(HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException{
//        //设置响应的内容类型为HTML
//        resp.setContentType("text/html; charset=UTF-8");
//        //获取请示参数
//        String parameter = req.getParameter("param");
//        //向控制台打印请示参数
//        System.out.println("Received parameter : " + parameter);
//        //输出响应内容
//        PrintWriter writer = resp.getWriter();
//        writer.println("<h1>Hello,Servlet!</h1>");
//        writer.println("Received parameter : " + parameter);
//
//    }
//
}

4、浏览器地址栏输入:localhost:8080/servlet_demo01/bbs/findAll 进行测试,观察控制台输出结果。

五、Tomcat专题 - Web应用配置介绍

1、Servlet配置

Servlet 的配置主要是两部分, servlet 和 servlet-mapping :

java 复制代码
<servlet>
  <servlet‐name>myServlet</servlet‐name>
  <servlet‐class>djh.it.web.MyServlet</servlet‐class>
  <init‐param>
    <param‐name>fileName</param‐name>
    <param‐value>init.conf</param‐value>
  </init‐param>
  <load‐on‐startup>1</load‐on‐startup>
  <enabled>true</enabled>
</servlet>
java 复制代码
<servlet‐mapping>
  <servlet‐name>myServlet</servlet‐name>
  <url‐pattern>*.do</url‐pattern>
  <url‐pattern>/myservet/*</url‐pattern>
</servlet‐mapping>

2、servlet 和 servlet-mapping 配置说明:

1) servlet‐name : 指定servlet的名称, 该属性在web.xml中唯一。

2) servlet‐class : 用于指定servlet类名

3) init‐param: 用于指定servlet的初始化参数, 在应用中可以通过 HttpServlet.getInitParameter 获取。

4) load‐on‐startup: 用于控制在Web应用启动时,Servlet的加载顺序。 值小于0,web应用启动时,不加载该servlet, 第一次访问时加载。

5) enabled: true , false 。 若为false ,表示Servlet不处理任何请求。

6) url‐pattern: 用于指定URL表达式,一个 servlet‐mapping可以同时配置多个 url‐pattern。

3、Servlet 中文件上传配置:

java 复制代码
<servlet>
    <servlet‐name>uploadServlet</servlet‐name>
    <servlet‐class>djh.it.web.UploadServlet</servlet‐class>
    <multipart‐config>
      <location>C://path</location>
      <max‐file‐size>10485760</max‐file‐size>
      <max‐request‐size>10485760</max‐request‐size>
      <file‐size‐threshold>0</file‐size‐threshold>
    </multipart‐config>
</servlet>

4、Servlet 中文件上传配置 配置说明:

1) location:存放生成的文件地址。

2) max‐file‐size:允许上传的文件最大值。 默认值为‐1, 表示没有限制。

3) max‐request‐size:针对该 multi/form‐data 请求的最大数量,默认值为‐1, 表示无限制。

4) file‐size‐threshold:当数量量大于该值时, 内容会被写入文件。

5、Listener配置

Listener用于监听servlet中的事件,例如context、request、session对象的创建、修改、删除,并触发响应事件。Listener是观察者模式的实现,在servlet中主要用于对context、request、session对象的生命周期进行监控。在servlet2.5规范中共定义了8中Listener。在启动时,ServletContextListener 的执行顺序与web.xml 中的配置顺序一致, 停止时执行顺序相反。

java 复制代码
 <listener>
    <listener‐class>org.springframework.web.context.ContextLoaderListener</listener‐class>
</listener>

6、Filter配置

filter 用于配置web应用过滤器, 用来过滤资源请求及响应。 经常用于认证、日志、加密、数据转换等操作, 配置如下:

java 复制代码
<filter>
    <filter‐name>myFilter</filter‐name>
    <filter‐class>djh.it.web.MyFilter</filter‐class>
    <async‐supported>true</async‐supported>
    <init‐param>
      <param‐name>language</param‐name>
      <param‐value>CN</param‐value>
    </init‐param>
</filter>
java 复制代码
<filter‐mapping>
    <filter‐name>myFilter</filter‐name>
    <url‐pattern>/*</url‐pattern>
</filter‐mapping>

7、Filter 配置说明:

java 复制代码
1) filter‐name: 用于指定过滤器名称,在web.xml中,过滤器名称必须唯一。 
2) filter‐class : 过滤器的全限定类名, 该类必须实现Filter接口。 
3) async‐supported: 该过滤器是否支持异步。
4) init‐param :用于配置Filter的初始化参数, 可以配置多个, 可以通过FilterConfig.getInitParameter获取。
5) url‐pattern: 指定该过滤器需要拦截的URL。

六、Tomcat专题 - Web应用配置介绍 - 欢迎页面和错误页面

1、tomcat 欢迎页面配置

welcome-file-list 用于指定web应用的欢迎文件列表。

java 复制代码
   <welcome-file-list>
       <welcome-file>index.html/welcome-file>
	   <welcome-file>index.htm</welcome-file>
	   <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>

尝试请求的顺序,从上到下。

2、在 servlet_demo01 项目中,更改 index.jsp 欢迎页面为 登录页面 login.jsp

1) project_tomcat\servlet_demo01\web\index.jsp

java 复制代码
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/8/13
  Time: 14:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h3>index.jsp 欢迎页面,主页页面</h3>
  $END$
  </body>
</html>

2) project_tomcat\servlet_demo01\web\login.jsp

java 复制代码
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/8/13
  Time: 14:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h3>login.jsp 登录页面,变为主页</h3>
  $END$
  </body>
</html>

3) project_tomcat\servlet_demo01\web\WEB-INF\web.xml

java 复制代码
<?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>bbsServlet</servlet-name>
        <servlet-class>djh.it.web.BbsServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>bbsServlet</servlet-name>
        <url-pattern>/bbs/findAll</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>project_param_01</param-name>
        <param-value>dzs168</param-value>
    </context-param>

    <!-- 会话配置session-config -->
    <session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
            <name>JESSIONID</name>
            <domain>localhost</domain>
            <path>/</path>
            <comment>Session Cookie</comment>
            <http-only>true</http-only>
            <secure>false</secure>
            <max-age>3600</max-age>
        </cookie-config>
    </session-config>

   <welcome-file-list>
       <welcome-file>login.jsp</welcome-file>
   </welcome-file-list>

</web-app>
<!-- project_tomcat\servlet_demo01\web\WEB-INF\web.xml -->

4)浏览器地址栏输入: http://localhost:8080/servlet_demo01/

tomcat-31.png

3、tomcat 错误页面配置

1)error-page 用于配置Web应用访问异常时定向到的页面,支持HTTP响应码和异常类两种形式。

java 复制代码
    <!-- 错误页面 -->
    <error-page>
        <error-code>404</error-code>
        <location>/404.html</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/500.html</location>
    </error-page>
    <error-page>
        <exception-type>java.lang.Exception</exception-type>
        <location>/error.jsp</location>
    </error-page>

2)如果在 servlet_demo01 项目中,未配置错误页面,在 servlet 中添加模拟异常,访问时就会出现如下界面:

java 复制代码
/**
 *  project_tomcat\servlet_demo01\src\djh\it\web\BbsServlet.java
 *
 *  2024-8-13 创建 Servlet 类 BbsServlet.java
 *  Web应用配置 - context-param
 */
package djh.it.web;

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;
import java.io.PrintWriter;

//@WebServlet
public class BbsServlet extends HttpServlet {

    @Override
    protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
        System.out.println("------------>> GET : BbsServlet find all ...");

        String value = req.getServletContext().getInitParameter("project_param_01");
        System.out.println(value);

        int i = 1/0;  //模拟异常。

        //会话SessionId
        String id = req.getSession().getId();
        System.out.println("sessionId : " + id);

//        processRequest(req, resp);
    }

    @Override
    protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException{
        System.out.println("------------>> POST : BbsServlet find all ...");
//        processRequest(req, resp);
    }

//    private  void processRequest(HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException{
//        //设置响应的内容类型为HTML
//        resp.setContentType("text/html; charset=UTF-8");
//        //获取请示参数
//        String parameter = req.getParameter("param");
//        //向控制台打印请示参数
//        System.out.println("Received parameter : " + parameter);
//        //输出响应内容
//        PrintWriter writer = resp.getWriter();
//        writer.println("<h1>Hello,Servlet!</h1>");
//        writer.println("Received parameter : " + parameter);
//
//    }
//
}

2)浏览器访问出现如下界面,是不安全的。

4、在 servlet_demo01 项目中,配置错误页面 404.html 和 500.html

1) project_tomcat\servlet_demo01\web\404.html

java 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>404</title>
</head>
<body>

<h3>404! 您访问的页面不存在,请检查访问路径!</h3>

</body>
</html>

2) project_tomcat\servlet_demo01\web\500.html

java 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>404</title>
</head>
<body>

<h3>500! 服务器出现异常,请联系管理员!</h3>

</body>
</html>

3) project_tomcat\servlet_demo01\web\error.jsp

java 复制代码
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/8/13
  Time: 14:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h3>error.jsp 错误页面</h3>
  $END$
  </body>
</html>

4) project_tomcat\servlet_demo01\web\WEB-INF\web.xml

java 复制代码
<?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>bbsServlet</servlet-name>
        <servlet-class>djh.it.web.BbsServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>bbsServlet</servlet-name>
        <url-pattern>/bbs/findAll</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>project_param_01</param-name>
        <param-value>dzs168</param-value>
    </context-param>

    <!-- 会话配置session-config -->
    <session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
            <name>JESSIONID</name>
            <domain>localhost</domain>
            <path>/</path>
            <comment>Session Cookie</comment>
            <http-only>true</http-only>
            <secure>false</secure>
            <max-age>3600</max-age>
        </cookie-config>
    </session-config>

    <!-- 欢迎页面 -->
   <welcome-file-list>
       <welcome-file>login.jsp</welcome-file>
   </welcome-file-list>

    <!-- 错误页面 -->
    <error-page>
        <error-code>404</error-code>
        <location>/404.html</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/500.html</location>
    </error-page>
<!--    <error-page>-->
<!--        <exception-type>java.lang.Exception</exception-type>-->
<!--        <location>/error.jsp</location>-->
<!--    </error-page>-->

</web-app>
<!-- project_tomcat\servlet_demo01\web\WEB-INF\web.xml -->

5)浏览器再次访问,如下:

500! 服务器出现异常,请联系管理员!

404! 您访问的页面不存在,请检查访问路径!

上一节关联链接请点击
# 利刃出鞘_Tomcat 核心原理解析(五)

相关推荐
P7进阶路11 小时前
Tomcat异常日志中文乱码怎么解决
java·tomcat·firefox
栗豆包15 小时前
w175基于springboot的图书管理系统的设计与实现
java·spring boot·后端·spring·tomcat
Ase5gqe17 小时前
Windows 配置 Tomcat环境
java·windows·tomcat
Wanna7152 天前
后端开发基础——JavaWeb(Servlet)
java·后端·servlet·tomcat
Wanna7152 天前
后端开发基础——JavaWeb(根基,了解原理)浓缩
java·后端·servlet·tomcat
小屁不止是运维2 天前
麒麟操作系统服务架构保姆级教程(十三)tomcat环境安装以及LNMT架构
java·运维·架构·tomcat·负载均衡
Mr_sun.2 天前
Tomcat下载&配置
java·tomcat
十二同学啊2 天前
MyBatis Plus 的 InnerInterceptor:更轻量级的 SQL 拦截器
sql·tomcat·mybatis
m0_748252602 天前
SpringBoot项目中替换指定版本的tomcat
spring boot·后端·tomcat
石明亮(JT)3 天前
使用docker部署mysql和tomcat服务器发现的问题整理
mysql·docker·tomcat