วิธีค้นหารุ่น tomcat ที่ใช้งานอยู่


175

ฉันพยายามทำให้ Appfuse + tomcat + jRebel ทำงาน

Appfuse โดยค่าเริ่มต้นใช้ Cargo เพื่อดาวน์โหลด tomcat (เวอร์ชั่น 7.0.33) และปรับใช้แอปพลิเคชัน ฉันต้องการใช้ Tomcat ที่ติดตั้งไว้แล้ว (เวอร์ชั่น 7.0.27) แทนที่จะเป็นตัวดาวน์โหลดที่ดาวน์โหลดมา ฉันทำการเปลี่ยนแปลงต่อไปนี้appfuse คำถามที่พบบ่อย

หลังจากการปรับใช้ด้วยmvn cargo:runฉันจะรู้ได้อย่างไรว่า Tomcat ที่ทำงานอยู่จริงเป็น 7.0.27 จริงหรือไม่

ฉันเคยพิมพ์ URL ผิด (เช่นlocalhost: 8080 / dfsfsdf ) เพื่อดูในหน้าข้อผิดพลาด แต่ตอนนี้ไม่แสดงอะไรเลย

ฉัน$CATALINA_HOMEชี้ไปคราวของตัวเอง 7.0.27 ขอโทษที่ลืมพูดถึงมันเป็นของ Windows

ปรับปรุง:

เนื่องจากคำถามนี้เป็นที่นิยมฉันก็อยากจะอธิบายว่าทำไมคำตอบที่ได้รับการยอมรับ ง่ายมันเป็นคนแรกที่แก้ไขปัญหาของฉัน

ดูที่ชื่อของคำถาม @Tech Junkieและ@CPU 100มีคำตอบที่ดีที่สุด แต่ไม่ใช่สำหรับสถานการณ์ที่ฉันพบ (ฉันอยากรู้ว่าmvn cargo:runทำงาน tomcat ที่ติดตั้งของฉันหรือ tomcat "project embeded") :)


1
หากคุณสามารถอัปโหลดไฟล์ JSP คุณอาจพิมพ์ข้อมูลบางอย่างเช่นในตัวอย่างนี้: bestdesigns.co.in/blog/check-jsp-tomcat-version
wemu

ขวา! คุณได้รับคำตอบแน่นอน 7.0.27 ซึ่งฉันต้องการ กรุณาโพสต์มันเป็นคำตอบ
Yichaoz

คำตอบ:


52

หากคุณสามารถอัปโหลดไฟล์ JSP คุณอาจพิมพ์ข้อมูลบางอย่างเช่นในตัวอย่างนี้: bestdesigns.co.in/blog/check-jsp-tomcat-version

บันทึกรหัสนี้เป็นไฟล์ชื่อ tomcat_version.jsp:

    Tomcat Version : <%= application.getServerInfo() %><br>    
    Servlet Specification Version : 
<%= application.getMajorVersion() %>.<%= application.getMinorVersion() %> <br>    
    JSP version :
<%=JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion() %><br>

เมื่อคุณเข้าถึงhttp://example.com/tomcat_version.jspเอาต์พุตควรมีลักษณะคล้ายกับ:

Tomcat Version : Apache Tomcat/5.5.25
Servlet Specification Version : 2.4
JSP version: 2.0

517

แม้ว่าจะไม่ใช่เมื่อเร็ว ๆ นี้ แต่ฉันคิดว่าคำตอบของฉันยังคงสามารถช่วยเหลือผู้อื่นได้:

cd tomcat/lib 
java -cp catalina.jar org.apache.catalina.util.ServerInfo

และนั่นคือมัน

Server version: Apache Tomcat/7.0.30
Server built:   May 23 2013 02:54:10
Server number:  7.0.30.0
OS Name:        Linux
OS Version:     3.13.0-36-generic
Architecture:   amd64
JVM Version:    1.7.0_65-b32
JVM Vendor:     Oracle Corporation

11
เพื่อให้มีความเฉพาะเจาะจงมากขึ้นเซิร์ฟเวอร์ / lib ก็คงจะเป็นเช่นนั้น/opt/tomcat/lib
Kai Carver

4
หรือตัวอย่างเช่นบน Windows,C:\Program Files\Apache Software Foundation\Tomcat 8.0\lib
Kai Carver

10
ยังคงทำงานในปี 2560 ใน CentOS 7 ของฉันฉันต้องไปที่ / usr / share / tomcat / lib
Matthieu

เซิร์ฟเวอร์ Solaris 10 ตัวหนึ่งฉันได้รับข้อผิดพลาด "ข้อยกเว้นในเธรด" main "java.lang.UnsupportedClassVersionError: หมายเลขเวอร์ชันไม่ดีในไฟล์. class" เมื่อฉันรันคำสั่ง ใน RHEL 7.2 ฉันได้รับผลลัพธ์ที่ถูกต้อง
sv

5
นี่ควรเป็นแท็กเป็นคำตอบที่ถูกต้อง ฉันไม่เห็นสาเหตุที่คุณต้องเขียน JSP และปรับใช้เพื่อกำหนดรุ่น tomcat คำตอบนี้สามารถมีกลุ่มเป้าหมายที่กว้างขึ้นไม่ใช่แค่โปรแกรมเมอร์เช่นผู้ดูแลระบบแค่อยากรู้รุ่นตัวผู้ที่แน่นอน
Itherael

99
  1. ลองแยกวิเคราะห์หรือดำเนินการไดเรกทอรี Tomcat_home / bin และค้นหาสคริปต์ชื่อversion.shหรือversion.batขึ้นอยู่กับระบบปฏิบัติการของคุณ
  2. รันสคริปต์./version.shหรือversion.bat

หากไม่มี version.bat หรือ version.sh ให้ใช้เครื่องมือในการคลายไฟล์ JAR (\ tomcat \ server \ lib \ catalina.jar) และค้นหาในไฟล์ org \ apache \ catalina \ util \ lib \ ServerInfo.properties รุ่นที่กำหนดไว้ภายใต้ "server.info ="


ขอโทษฉันลืมพูดถึงฉันอยู่ใน Windows แต่ปัญหาคือฉันไม่รู้จริง ๆ ว่าแมวตัวผู้ตัวใดกำลังไล่
ล่า

@ Kossel ฉันเพิ่มข้อมูลเพิ่มเติมเพื่อตรวจสอบเวอร์ชันของคุณ แต่เป็นคู่มือเพิ่มเติม
grepit

1
ฉันพบรุ่นใน org \ apache \ catalina \ util \ ServerInfo.properties (ไม่มีแพ็คเกจ lib)
Federico Pugnali

49

รันสคริปต์ในtomcat/binไดเรกทอรีของคุณ:

sh tomcat/bin/version.sh

Server version: Apache Tomcat/7.0.42
Server built:   Jul 2 2013 08:57:41
Server number:  7.0.42.0
OS Name:        Linux
OS Version:     2.6.32-042stab084.26
Architecture:   amd64
JVM Version:    1.7.0_21-b11
JVM Vendor:     Oracle Corporation

40

คุณสามารถเปิดได้http://localhost:8080/ในเว็บเบราว์เซอร์และจะเปิดหน้าต้อนรับของ Tomcat ที่แสดงเวอร์ชั่น Tomcat ที่ใช้งานดังนี้:

Apache Tomcat/7.0.42
  • ฉันสมมติว่า Tomcat ของคุณทำงานบนพอร์ต 8080

12

การใช้บันทึกย่อประจำรุ่น

ในโฟลเดอร์ Tomcat หลักคุณสามารถค้นหาไฟล์RELEASE-NOTESซึ่งมีบรรทัดต่อไปนี้ (~ บรรทัด 20-21):

                Apache Tomcat Version 8.0.22
                        Release Notes

หรือคุณสามารถรับข้อมูลเดียวกันโดยใช้บรรทัดคำสั่ง :

  • Windows :

    type RELEASE-NOTES | find "Apache Tomcat Version"

    เอาท์พุท:

                 Apache Tomcat Version 8.0.22
  • Linux :

    cat RELEASE-NOTES | grep "Apache Tomcat Version"

    เอาท์พุท:

                 Apache Tomcat Version 8.0.22

12

รุ่นของ Tomcat ที่กำลังทำงานอยู่

หากคุณตั้งค่าตัวแปร environtment -% CATALINA_HOME% แล้ว Windows:

>> cd %CATALINA_HOME%\bin
>> version

อีกวิธีหนึ่งคือ

java.exe -cp lib\catalina.jar org.apache.catalina.util.ServerInfo

การตั้งค่าของฉัน --- หวังว่าคุณจะคล้ายกับดังนี้

%CATALINA_HOME% --- C:\Program Files\Tomcat\apache-tomcat-8.0.28

เอาท์พุท

รุ่นเซิร์ฟเวอร์: Apache Tomcat / 8.0.28 เซิร์ฟเวอร์ที่สร้าง: 7 ต.ค. 2558 18:25:21 UTC หมายเลขเซิร์ฟเวอร์: 8.0.28.0 ชื่อระบบปฏิบัติการ: Windows 7 OS เวอร์ชัน: 6.1 สถาปัตยกรรม: amd64 JVM เวอร์ชั่น: 1.8.0_111-b14 JVM ผู้ขาย: ออราเคิลคอร์ปอเรชั่น


12
For windows machine 
Go to the tomcat directory C:\apache-tomcat-x.0.xx\bin
    bin>version.bat
    Using CATALINA_BASE:   "C:\apache-tomcat-x.0.xx"
    Using CATALINA_HOME:   "C:\apache-tomcat-x.0.xx"
    Using CATALINA_TMPDIR: "C:\apache-tomcat-x.0.xx\temp"
    Using JRE_HOME:        "C:\Program Files\Java\jdk1.8.0_65"
    Using CLASSPATH:       "C:\apache-tomcat-x.0.xx\bin\bootstrap.jar;C:\apache-tomcat-x.0.xx\bin\tomcat-juli.jar"
    Server version: Apache Tomcat/7.0.53





For Linux Machine 
Go to the tomcat directory /usr/mack/apache-tomcat-x.0.xx/bin
    # ./version.sh
    Using CATALINA_BASE:   /usr/mack/apache-tomcat-x.0.xx
    Using CATALINA_HOME:   /usr/mack/apache-tomcat-x.0.xx
    Using CATALINA_TMPDIR: /usr/mack/apache-tomcat-x.0.xx/temp
    Using JRE_HOME:        /usr/java/jdk1.7.0_71/jre
    Using CLASSPATH:       /usr/mack/apache-tomcat-x.0.xx/bin/bootstrap.jar:/usr/mack/apache-tomcat-x.0.xx/bin/tomcat-juli.jar
    Server version: Apache Tomcat/7.0.56

หากติดตั้ง Tomcat เป็นบริการ:

#sudo /etc/init.d/tomcat version

บน * ระวังที่นี่ ไฟล์บันทึกย่อประจำรุ่นของฉันหายไป การเรียกใช้sudoคำสั่งทำงานให้ฉัน
Kunal

10

หากต้องการค้นหารุ่น Tomcat ให้ค้นหาไฟล์นี้ - version.sh สำหรับ * nix หรือ version.bat สำหรับ Windows ไฟล์ version.sh นี้โดยปกติจะอยู่ในโฟลเดอร์ช่องเก็บ Tomcat

phpmongodb@kumar:/usr/share/tomcat7/bin$ ./version.sh 

บันทึก

หากคุณไม่แน่ใจว่าไฟล์นี้อยู่ที่ไหนให้ลองใช้คำสั่งนี้:

sudo find / -name "version.sh"

ค้นหาทุกสิ่งเกี่ยวกับ Tomcat7

sudo find / -name "tomcat7"

8

คำสั่งเดียวซึ่งคุณสามารถตรวจสอบได้เกือบทุกอย่าง:

java -cp tomcat/lib/catalina.jar org.apache.catalina.util.ServerInfo

หรือ

tomcat/bin/catalina.sh version

และเอาท์พุทเป็นแบบนี้

Server version: Apache Tomcat/8.5.24
Server built:   Nov 27 2017 13:05:30 UTC
Server number:  8.5.24.0
OS Name:        Linux
OS Version:     4.4.0-137-generic
Architecture:   amd64
JVM Version:    1.8.0_131-b11
JVM Vendor:     Oracle Corporation

7

เรียกใช้ต่อไปนี้

/usr/local/tomcat/bin/catalina.sh version

คำตอบจะเป็นดังนี้:

Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /var/tmp/
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_PID:    /var/catalina.pid
Server version: Apache Tomcat/7.0.30
Server built:   Sep 27 2012 05:13:37
Server number:  7.0.30.0
OS Name:        Linux
OS Version:     2.6.32-504.3.3.el6.x86_64
Architecture:   amd64
JVM Version:    1.7.0_60-b19
JVM Vendor:     Oracle Corporation

6

อีกตัวเลือกหนึ่งคือดูบันทึกประจำรุ่นจาก tomcat ที่ใช้กับ linux / window

{Tomcat_home}/webapps/ROOT/RELEASE-NOTES.txt

5

ฉันรู้ว่ามันอาจจะสายเกินไปสำหรับสิ่งนี้ แต่อาจเป็นประโยชน์ได้: หากคุณพยายามรู้รุ่น Apache Tomcat Server จากโค้ด Java คุณสามารถใช้:

จาก HttpServlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    getServletContext().getServerInfo()
}

จาก ServletContextListener:

public void contextInitialized(ServletContextEvent event)  { 
    event.getServletContext().getServerInfo();      
}


3

ใน Linux เพื่อตรวจสอบรุ่น Tomcat

cd /opt/tomcat/bin

./catalina.sh version

ใช้งานได้ แต่คุณต้องใช้ 'sudo' ทุกครั้งใช่ไหม
Sandun



1

ป้อน404.jspหรือnon-existent.jspหรือ

รับหมายเลขรุ่น Tomcat / JBoss ที่ด้านล่างของหน้า


1

สำหรับการรักษาความปลอดภัย Tomcat จากแฮกเกอร์เราแนะนำให้เราลองทำสองสามขั้นตอนในการซ่อนข้อมูลเวอร์ชั่นของ Tomcat โครงการ OWASP แนะนำสองสามขั้นตอน https://www.owasp.org/index.php/Securing_tomcat หากการติดตั้ง tomcat นั้นได้รับการปกป้องดังนั้นคำตอบเดียวเท่านั้นที่จะแสดงเวอร์ชั่นของ tomcat
กล่าวคือจะต้องผ่านไฟล์ $ TOMCAT_HOME \ RELEASE-NOTEES ซึ่งจะมีการประกาศหมายเลขเวอร์ชั่นอย่างชัดเจน

ฉันมีเซิร์ฟเวอร์ที่ได้รับการป้องกันตัวหนึ่งและมีเพียงไฟล์ RELEASE-NOTES เท่านั้นที่เปิดเผยเวอร์ชั่นของ tomcat เทคนิคอื่น ๆ ทั้งหมดไม่สามารถเปิดเผยข้อมูลเวอร์ชั่นได้


1

เรากำลังทำงานในสภาพแวดล้อมของ Windows และฉันต้องหาวิธีที่จะได้รับรุ่น Tomcat นอกสภาพแวดล้อม Java ฉันไม่สามารถระบุไดเรคทอรีได้ ในที่สุดฉันก็พบวิธีที่ดีที่สุดคือการค้นหาบริการ Tomcat โดยใช้:

C: \ temp> sc query | ค้นหา / ฉัน "tomcat"
SERVICE_NAME: Tomcat6
DISPLAY_NAME: Apache Tomcat 6.0 Tomcat6


0

ตัวจัดการงาน Windows> กระบวนการ> ค้นหา tomcat> คลิกขวา> เปิดตำแหน่งไฟล์> หากคุณเรียกใช้ Tomcat7w.exe จะปรากฏที่คำอธิบาย

Tomcat ควรทำงานเพื่อให้มองเห็นได้ที่กระบวนการหากไม่อยู่ที่ Windows Vista / 7 ไปที่ตัวจัดการงาน> แท็บ (บริการ) ค้นหา tomcat เริ่มต้นจากนั้นดำเนินการ


ฉันไปที่ตัวจัดการงานกระบวนการเดียวที่แสดงคือ java.exe แทนที่จะเป็น tomcat7w.exe ถ้าฉันฆ่า java.exe เซิร์ฟเวอร์จะตาย
Yichaoz

0

ในสภาพแวดล้อมคล้าย Unix ฉันขอแนะนำให้ตรวจสอบบรรทัดคำสั่งกระบวนการทำงานจริง:

$ ps aux | grep java

...
/usr/lib/jvm/java-8-openjdk-amd64/bin/java -Djava.util.logging.config.file=/srv/tomcat-instances/bla/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Xmx4096M -XX:+UseConcMarkSweepGC -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n -Xmx4096m -Xms4096m -XX:MaxPermSize=2048m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=8090 -Dcom.sun.management.jmxremote.rmi.port=8090 -Djava.rmi.server.hostname=localhost -Djava.endorsed.dirs=/opt/apache-tomcat-8.0.47/endorsed -classpath /opt/apache-tomcat-8.0.47/bin/bootstrap.jar:/opt/apache-tomcat-8.0.47/bin/tomcat-juli.jar -Dcatalina.base=/srv/tomcat-instances/bla -Dcatalina.home=/opt/apache-tomcat-8.0.47 -Djava.io.tmpdir=/tmp/tomcat8-bla-tmp org.apache.catalina.startup.Bootstrap start
...

หนึ่งสามารถทำงานในพฤติกรรมแปลก ๆ อันเนื่องมาจากตัวแปรสภาพแวดล้อม (ระบบปฏิบัติการ) และคุณสมบัติของระบบ (Java) ถูกตั้งค่าเป็นค่าที่ไม่คาดคิด ฉันมีสถานการณ์ที่เกิดจาก Tomcat ที่ล้าสมัยsetenv.sh, Tomcat 8 เริ่มต้นด้วยคลาสจาก Tomcat 7 ที่ classpath ตรวจสอบให้แน่ใจว่าในตัวเลือกบรรทัดคำสั่งกระบวนการเช่น-Dcatalina.base, -Dcatalina.homeและ-classpathทำให้ความรู้สึก


0

เพียงเริ่มต้น Tomcat และค้นหา " ชื่อรุ่นเซิร์ฟเวอร์ " ในcatalina.logsและคุณจะได้รับรุ่น Tomcat ของคุณ ตัวอย่างเช่น:

"Mar 07, 2019 11:25:40 AM org.apache.catalina.startup.VersionLogger ฟังการบันทึกข้อมูล: ชื่อรุ่นเซิร์ฟเวอร์: Apache Tomcat / 9.0.16 "


0

คุณสามารถค้นหาข้อมูลเซิร์ฟเวอร์ผ่านหน้าสถานะ:

{running-tomcat-url}/manager/status

ในหน้านั้นคุณสามารถดูเวอร์ชันของ Java ที่ Tomcat ของคุณทำงาน

หมายเหตุ: ฉันยังได้วางคำตอบนี้ไว้ในปัญหาความเข้ากันได้กับTomcat6 และ JRE7 ไม่รองรับ major.minor รุ่น 51.0


ไม่ได้เกิดขึ้นเมื่อติดตั้งตัวจัดการเท่านั้น ฉันรู้ว่าค่าเริ่มต้นคือการ แต่เราไม่ได้
DannyK

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.