Tomcat 源码环境构建

  1. 下载 src 源码
  2. 源码路径下新建 pom 文件

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <groupId>org.apache.tomcat</groupId>
    7. <artifactId>tomcat8</artifactId>
    8. <name>tomcat8</name>
    9. <version>8.0</version>
    10. <build>
    11. <finalName>tomcat8</finalName>
    12. <sourceDirectory>java</sourceDirectory>
    13. <!--<testSourceDirectory>test</testSourceDirectory> test-->
    14. <resources>
    15. <resource>
    16. <directory>java</directory>
    17. </resource>
    18. </resources>
    19. <testResources>
    20. <testResource>
    21. <directory>test</directory>
    22. </testResource>
    23. </testResources>
    24. <plugins>
    25. <plugin>
    26. <groupId>org.apache.maven.plugins</groupId>
    27. <artifactId>maven-compiler-plugin</artifactId>
    28. <version>3.5.1</version>
    29. <configuration>
    30. <encoding>UTF-8</encoding>
    31. <source>1.7</source>
    32. <target>1.7</target>
    33. </configuration>
    34. </plugin>
    35. <plugin>
    36. <groupId>org.apache.maven.plugins</groupId>
    37. <artifactId>maven-jar-plugin</artifactId>
    38. <version>2.6</version>
    39. </plugin>
    40. </plugins>
    41. </build>
    42. <dependencies>
    43. <dependency>
    44. <groupId>junit</groupId>
    45. <artifactId>junit</artifactId>
    46. <version>4.11</version>
    47. <scope>test</scope>
    48. </dependency>
    49. <dependency>
    50. <groupId>ant</groupId>
    51. <artifactId>ant</artifactId>
    52. <version>1.7.0</version>
    53. </dependency>
    54. <dependency>
    55. <groupId>org.easymock</groupId>
    56. <artifactId>easymock</artifactId>
    57. <version>3.4</version>
    58. </dependency>
    59. <!-- soap 协议处理工具包 -->
    60. <dependency>
    61. <groupId>javax.xml.soap</groupId>
    62. <artifactId>javax.xml.soap-api</artifactId>
    63. <version>1.4.0</version>
    64. </dependency>
    65. <!-- 解析 webservice -->
    66. <dependency>
    67. <groupId>wsdl4j</groupId>
    68. <artifactId>wsdl4j</artifactId>
    69. <version>1.6.2</version>
    70. </dependency>
    71. <dependency>
    72. <groupId>javax.xml</groupId>
    73. <artifactId>jaxrpc</artifactId>
    74. <version>1.1</version>
    75. </dependency>
    76. <dependency>
    77. <groupId>org.eclipse.jdt.core.compiler</groupId>
    78. <artifactId>ecj</artifactId>
    79. <version>4.5.1</version>
    80. </dependency>
    81. </dependencies>
    82. </project>
  3. 导入 IDEA

  4. IDEA 配置启动类 org.apache.catalina.startup.Bootstrap

image.png

  1. 增加 JVM 参数

    1. -Dcatalina.home=F:\workspaces\opensource\tomcat
    2. -Dcatalina.base=F:\workspaces\opensource\tomcat
    3. -Djava.io.tmpdir=F:\workspaces\opensource\tomcat\temp
    4. -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
    5. -Djava.util.logging.config.file=F:\workspaces\opensource\tomcat\conf\logging.properties
    6. -Dfile.encoding=UTF-8
  2. 修改下 ContextConfig ```java protected synchronized void configureStart() {

    1. // Called from StandardContext.start()
    2. if (log.isDebugEnabled()) {
    3. log.debug(sm.getString("contextConfig.start"));
    4. }
    5. if (log.isDebugEnabled()) {
    6. log.debug(sm.getString("contextConfig.xmlSettings",
    7. context.getName(),
    8. Boolean.valueOf(context.getXmlValidation()),
    9. Boolean.valueOf(context.getXmlNamespaceAware())));
    10. }
    11. webConfig();
    12. // 初始化 jsp 解析引擎 <----- 增加这行代码,初始化 jsp 解析引擎
    13. context.addServletContainerInitializer(new JasperInitializer(), null);
    14. // .....

    }

```

IDEA 控制台乱码

-Dfile.encoding=UTF-8
image.png

Tomcat 开启远程 Debug

以 Linux 环境为例

Tomcat 配置

修改 catalina.sh

  • Tomcat 安装在: /usr/local/tomcat
  • Tomcat 的执行程序: /usr/local/tomcat/bin/catalina.sh
  • 编辑 Tomcat 执行程序:vim /usr/local/tomcat/bin/catalina.sh
    • 查找Tomcat的debug端口:/JPDA_ADDRESS=
      Tomcat - 图3
    • 默认的debug端口是8000,这里是配成了5005
    • 在bin目录下执行命令 sh catalina.sh jpda start ,可以启动tomcat并开启远程调试的端口

**
export JAVA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'

address 这里最好配置成 ip:port

修改 startup.sh

image.png

CATALINA_OPTS 和 JAVA_OPTS

用于保存Tomcat运行所需的各种参数。
他们在文件中的注释如下:
(可选)Java 执行”start”,”stop”或”run”命令时用到的运行时参数; [JAVA_OPTS]
(可选)Java 执行”start”或”run”命令时用到的运行时参数; [CATALINA_OPTS]
那么,为什么有两个不同的变量?他们有什么区别?
首先,定义在这两个变量中的参数都会被传递到启动Tomcat的命令:”start”和”run”,只有定义在JAVA_OPTS中的参数会被传递到”stop”命令。
所以将参数定义到哪个变量中并不影响Tomcat的启动和运行,而只影响到了Tomcat的运行结束。
第二种区别更加微妙。其他应用程序也可以使用JAVA_OPTS,但Tomcat只会用到CATALINA_OPTS。所以如果你只使用了Tomcat,在设置环境变量时,你最好使用CATALINA_OPTS,而如果你同时也用到了其他java应用程序,如JBoss,在设置环境变量时你应该使用JAVA_OPTS。

IDEA 配置

image.png

image.png