利刃出鞘_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 项目
--> 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
/**
* 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
<?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 中的配置。
<!-- 会话配置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 配置文件中配置会话。
<?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
/**
* 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 :
<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>
<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 中文件上传配置:
<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 中的配置顺序一致, 停止时执行顺序相反。
<listener>
<listener‐class>org.springframework.web.context.ContextLoaderListener</listener‐class>
</listener>
6、Filter配置
filter 用于配置web应用过滤器, 用来过滤资源请求及响应。 经常用于认证、日志、加密、数据转换等操作, 配置如下:
<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>
<filter‐mapping>
<filter‐name>myFilter</filter‐name>
<url‐pattern>/*</url‐pattern>
</filter‐mapping>
7、Filter 配置说明:
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应用的欢迎文件列表。
<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
<%--
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
<%--
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
<?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响应码和异常类两种形式。
<!-- 错误页面 -->
<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 中添加模拟异常,访问时就会出现如下界面:
/**
* 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
<!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
<!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
<%--
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
<?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)浏览器再次访问,如下:
- http://localhost:8080/servlet_demo01/bbs/findAll
500! 服务器出现异常,请联系管理员!
- http://localhost:8080/servlet_demo01/bbs/findAll666
404! 您访问的页面不存在,请检查访问路径!
上一节关联链接请点击
# 利刃出鞘_Tomcat 核心原理解析(五)