IDEA运行Tomcat8.5.73源码
一. 下載 8.5.73源碼
https://tomcat.apache.org/download-80.cgi
二.解壓源碼
指定catalina-home
新建catalina-home目錄,并將conf和webapps目錄拷貝到catalina-home目錄中。并新建logs、work、temp、lib目錄,初始都為空。如下圖
缺失文件引入 新建pom.xml
三 新建CookieFilter.java文件
因為具體編譯階段,會提示找不到此java文件,所以需要在test\util目錄下新建CookieFilter.java文件,并將以下內容復制粘貼到文件中。
/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements. See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You under the Apache License, Version 2.0* (the "License"); you may not use this file except in compliance with* the License. You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/ package util;import java.util.Locale; import java.util.StringTokenizer;/*** Processes a cookie header and attempts to obfuscate any cookie values that* represent session IDs from other web applications. Since session cookie names* are configurable, as are session ID lengths, this filter is not expected to* be 100% effective.** It is required that the examples web application is removed in security* conscious environments as documented in the Security How-To. This filter is* intended to reduce the impact of failing to follow that advice. A failure by* this filter to obfuscate a session ID or similar value is not a security* vulnerability. In such instances the vulnerability is the failure to remove* the examples web application.*/ public class CookieFilter {private static final String OBFUSCATED = "[obfuscated]";private CookieFilter() {// Hide default constructor}public static String filter(String cookieHeader, String sessionId) {StringBuilder sb = new StringBuilder(cookieHeader.length());// Cookie name value pairs are ';' separated.// Session IDs don't use ; in the value so don't worry about quoted// values that contain ;StringTokenizer st = new StringTokenizer(cookieHeader, ";");boolean first = true;while (st.hasMoreTokens()) {if (first) {first = false;} else {sb.append(';');}sb.append(filterNameValuePair(st.nextToken(), sessionId));}return sb.toString();}private static String filterNameValuePair(String input, String sessionId) {int i = input.indexOf('=');if (i == -1) {return input;}String name = input.substring(0, i);String value = input.substring(i + 1, input.length());return name + "=" + filter(name, value, sessionId);}public static String filter(String cookieName, String cookieValue, String sessionId) {if (cookieName.toLowerCase(Locale.ENGLISH).contains("jsessionid") &&(sessionId == null || !cookieValue.contains(sessionId))) {cookieValue = OBFUSCATED;}return cookieValue;} }四 構建項目
Main class設置為org.apache.catalina.startup.Bootstrap
添加VM options (不要有回車換行,如直接拷貝,請仔細檢查)
-Dcatalina.home=catalina-home
-Dcatalina.base=catalina-home
-Djava.endorsed.dirs=catalina-home/endorsed
-Djava.io.tmpdir=catalina-home/temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=catalina-home/conf/logging.properties
// 控制臺啟動中文亂碼,簡單處理使用默認使用英文模式。
-Duser.language=en
五、啟動項目
上面工作完成后,點擊run或debug進行啟動。
項目啟動完畢我們可以測試了,在瀏覽器訪問http://localhost:8080/ 發現打不開我們看到的經典歡迎頁面了,頁面報了一個錯。
原因是我們直接啟動org.apache.catalina.startup.Bootstrap的時候沒有加載org.apache.jasper.servlet.JasperInitializer,從而無法編譯JSP。解決辦法是在tomcat的源碼org.apache.catalina.startup.ContextConfig中手動將JSP解析器初始化:
修改完后,項目再啟動,我們再在瀏覽器訪問http://localhost:8080/ ,就可以看到我們所熟悉的經典歡迎頁面了
啟動成功后,會出現訪問具體app時出現中文亂碼,可以參考如下文章解決:
記一次tomcat源碼啟動控制臺中文亂碼問題調試過程
總結
以上是生活随笔為你收集整理的IDEA运行Tomcat8.5.73源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常考数据结构与算法-NC105 二分查找
- 下一篇: 常考数据结构与算法: NC19 连续子数