Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 11

0
votes
answers
53 views
+10

硬化SpringBoot的嵌入式Tomcat

0

Tomcat和SpringBoot的新功能硬化SpringBoot的嵌入式Tomcat

我需要確保SpringBoot中的嵌入式Tomcat硬化到一定水平。我正在使用this CIS doc(您將需要dl pdf)作爲我們可能想要做的清單。但是,該文檔面向「正常安裝」的Tomcat。例如,我指示更新$ CATALINA_HOME中找到的文件。

SpringBoot提供了一種方法來完全控制/訪問它的嵌入式Tomcat嗎?如果沒有,是否可以合理地從SpringBoot外部配置Tomcat,然後用我自己的默認SpringBoot Tomcat替代?我也接受其他解決方案。

+0

與其盲目地跟蹤文檔,如果您甚至需要它,並且該文檔中的所有內容甚至適用於嵌入式tomcat! –

沙发
0
1

如果你必須遵循該指南,最簡單的方法就是將WAR引導應用打包爲WAR並將其部署到常規Tomcat服務器中。本指南解釋如何package an app as a war

當你開始打開它時,Tomcat是一個非常複雜的軟件。您可以編寫可以訪問Tomcat配置並自行設置配置設置的java代碼。另外,tomcat被分解成許多組件,其中一些需要修改的文件可能適用於不屬於spring boot的嵌入式tomcat的組件。

您可以加強spring啓動應用程序,但如果您按照指南進行操作,則工作會更容易。

+0

是否有關於使用嵌入式Tomcat強化spring引導應用的特定文檔? – AR3Y35

0
votes
answers
67 views
+10

在部署war包後tomcat的webapps目錄下有很多額外的.aut文件

0

我的web應用使用maven來生成war包和tomcat作爲server.But有些人發現,在將war包部署到webapps之後,還有很多額外的.aut文件以及我的項目的有用文件,就像這樣: enter image description here在部署war包後tomcat的webapps目錄下有很多額外的.aut文件

我真的不知道爲什麼,有人可以提出一些想法嗎?

沙发
0
0

的原因是automaton.jar提取到項目目錄 enter image description here

0
votes
answers
70 views
+10

404刷新角度(v4 +)時部署在tomcat服務器上的錯誤

0

我部署了一個帶有延遲加載的角度應用程序。當在Github.io域中託管應用程序時,該應用程序運行良好,但當我使用mobaxterm在Tomcat服務器上部署應用程序時出現錯誤。當頁面重新加載或刷新應用程序失去路由狀態並引發404錯誤。404刷新角度(v4 +)時部署在tomcat服務器上的錯誤

HTTP狀態404 - /查詢

類型狀態報告

消息/查詢

描述所請求的資源不可用。

的Apache Tomcat/7.0.72

控制檯,登錄:: GET http://appv2.proctur.com/enquiry/addEnquiry 404(未找到) 導航到http://appv2.proctur.com/enquiry/addEnquiry

如果我不刷新頁面,並使用該應用程序在一個去那麼它的好吧,只是無法理解刷新時的問題。

PS ::這是我第一次在tomcat服務器上託管一個角度應用程序,如果我犯了任何愚蠢的錯誤,請讓我知道。

爲了更好的闡明,我添加了routing.module.ts,我懶加載模塊。這是導入到app.module.ts ::

import { NgModule } from '@angular/core'; 
import { RouterModule } from '@angular/router'; 

@NgModule({ 
imports: [ 
    RouterModule.forRoot([ 
     { path: '', redirectTo: '/authPage', pathMatch: 'full' }, 
     { path: 'authPage', loadChildren: 'app/components/auth-page/auth-page.module#AuthPageModule' }, 
     { path: 'course', loadChildren: 'app/components/course/course.module#CourseModule' }, 
     { path: 'enquiry', loadChildren: 'app/components/enquiry/enquiry.module#EnquiryModule' }, 
     { path: 'student', loadChildren: 'app/components/students/student.module#StudentModule' }, 
    ]) 
], 
exports: [ 
    RouterModule 
] 
}) 
export class AppRoutingModule { 
} 
+0

你正在使用哪種路由模式?像'html5'? 'hashbang'?我的網址中沒有看到任何'#/#!' –

沙发
0
0

當角度應用程序加載第一次URL將服務器從服務器。當你瀏覽頁面時,它會在客戶端處理。當刷新頁面時,請求將轉到服務器(tomcat或節點)。但是路由網址在服務器上不存在。然後出現404錯誤。你可以通過HashLocationStrategy來解決,在路由配置中添加{useHash:true}對象。

RouterModule.forRoot(routes, {useHash: true}) 

更多細節: - https://codecraft.tv/courses/angular/routing/routing-strategies/#_hashlocationstrategy

板凳
0
0

以前的答案是正確的,但我們並不真正需要在我們的網址-S哈希值。問題如下:例如,如果我們有一個名爲'/ users/all'的路由,並在我們的應用內從'/'導航,那麼它完全沒問題,因爲Angular自己的路由器會解析路由並顯示頁面,但如果我們直接去那條路線,例如通過在瀏覽器地址欄中輸入網址,我們會得到404,爲什麼?因爲你的服務器(在你的情況下是tomcat)將嘗試在其中找到一個名爲'users'和一個'all'文件的文件夾,顯然這是不存在的,因爲它僅僅是一個Angular路由,而不是一個實際的文件你的服務器的系統。但您可以通過某種方式配置服務器,它將回退到包含應用程序的index.html文件,以便頁面正確顯示(在我們的示例中,服務器將返回index.html,那麼Angular應用程序將會運行並解決路線)。 瞭解更多關於here

0
votes
answers
63 views
+10

如何使用UI對話框啓動Tomcat

0

我在Tomcat中構建服務器,但我的客戶對計算機和英語的要求不是很高。衆所周知,Tomcat的標誌成功啓動,就像Server startup in 6000 ms這樣的句子。我覺得這對那些不擅長電腦的人來說不是一個友好的界面。總之,有沒有一些方法可以啓動Tomcat來運行JFrame或JDialog應用程序?如果沒有,是否有一些想法可以讓人想到?如何使用UI對話框啓動Tomcat

+0

通過「我建一個服務器雄貓」,你的意思是你正在開發其部署在Tomcat Web應用程序? – STaefi

+0

爲什麼你的用戶應該手動啓動tomcat?您是否錯過了應該有一臺服務器(最好在與用戶計算機不同的機器上),並且tomcat應該一直在該計算機上運行,??並且用戶通常不能手動啓動或停止服務器,只有系統管理員可以做這樣的操作。如果你的用戶在他們的機器上有單獨的tomcats,你就沒有使用客戶機 - 服務器結構的任何功能,並且不知何故你錯過了關於使用Web或應用服務器的一點。 – STaefi

+0

@STaefi我知道你的意思。其實,我的應用程序是一個簡單的應用程序。這是餐廳項目。一個Web服務器支持幾個手機或與http通信的打擊墊。所以我需要一個Web服務器。然而,餐廳每晚都會關閉電源,所以我需要他們的服務員有能力啓動/關閉Tomcat。 –

沙发
0
0

我想你是在Windows上。如果您採用Windows Service Installer binary並作爲服務進行安裝,則會出現用於啓動/停止服務器的托盤圖標。

enter image description here

+0

你能給我一個安裝程序的http地址嗎?答案中的鏈接無法鏈接到它。 –

+0

鏈接已更正。無論如何,你會在Tomcat主頁https://tomcat.apache.org/download-80.cgi上找到它 – PeterMmm

0
votes
answers
57 views
+10

如何在WebStorm中啓動並運行服務器?

0

由於跨域問題,我需要通過WebStorm中的服務器運行我的代碼(它是HTML & JS)。我找不到的說明都很簡單直接。有人能給我一個白癡的指導嗎?另外,我已經在Eclipse中啓動並運行了Tomcat,但是我無法弄清楚如何將非java項目導入到Eclipse中。再次,指示一小熊的熊可以遵循將不勝感激。如何在WebStorm中啓動並運行服務器?

沙发
0
1

WebStorm帶有一個內置的靜態web服務器,在localhost:63342上監聽。您只需右鍵單擊.html文件並選擇運行即可運行您的代碼。

也看到https://www.jetbrains.com/help/webstorm/2017.3/debugging-javascript-in-chrome.html調試內置的服務器上運行的應用

0
votes
answers
97 views
+10

哪個配置文件告訴Tomcat已安裝的JRE的位置?

1

從現有的主題(What tomcat requires JDK or JRE?Why does Tomcat require JDK installed?)中,我瞭解到Tomcat 5.5以後不需要安裝JDK來編譯jsp文件,因爲它使用了自己的捆綁Eclipse Java編譯器。但是,當tomcat運行java字節碼時,它確實需要JRE。但是在安裝Tomcat時,我們只需要指定JVM的位置。爲了編譯和運行Java代碼,我們只需要將JDK文件夾下的bin文件夾添加到路徑環境中即可。但是JDK 9不再包含JRE文件夾。相反,在JDK文件夾之外有一個獨立的JRE文件夾。運行已編譯的jsp代碼時,Tomcat仍然如何捕獲JRE? Tomcat中的哪個配置文件捕獲了這個?謝謝!哪個配置文件告訴Tomcat已安裝的JRE的位置?

沙发
0
1

但安裝Tomcat的過程中,我們只需要指定JVM的位置

指定JVM的位置隱含指定JRE的位置,因爲JVM是JRE目錄中找到結構體。

要編譯並運行Java代碼,我們只需要將JDK文件夾下的bin文件夾添加到路徑環境中即可。

添加JDK bin文件夾的路徑,意味着你可以運行javajavac命令。命令文件的位置隱式指定了要使用的JDK的位置,因此也指定了JVM。沒有配置文件。

在Windows 64位Java 5到Java 8中,JVM位於%JAVA_HOME%jreinserverjvm.dll

在Windows 64位Java 9中,JVM位於%JAVA_HOME%inserverjvm.dll中。

但是JDK 9不再包含JRE文件夾。相反,在JDK文件夾之外有一個獨立的JRE文件夾。

除非您告訴它不要創建單獨的JRE文件夾,否則所有Java版本的JDK安裝程序都將創建一個JDK文件夾和一個JRE文件夾。在這方面,Java 9與舊版Java版本沒有區別。

當運行編譯後的jsp代碼時,Tomcat仍然如何捕獲JRE?

Tomcat本身是用Java編寫的,所以Tomcat沒有找到Java。運行Tomcat的是Java。

+0

我在問Tomcat如何知道JRE所在的位置,以便運行.class文件從.jsp編譯。我不是問Java如何運行.class(我知道javac和java參與Java的情況)。我們只告訴Tomcat JVM所在的位置,即%JAVA_HOME% bin server jvm.dll。但在Java 9中,JRE不在JDK文件夾內(即在%JAVA_HOME%之外)。另請注意,對於JDK 9,JDK文件夾不包含JRE文件夾。例如,C: Program Files Java jdk-9.0.1和C: Program Files Java jre-9.0.1,前者不包括後者。 – Peng

+1

你讀過我的答案了嗎? JVM和所有Java Runtime Library都是Java 9 JDK的一部分。當然,它們不在「JRE」子文件夾中,但JRE中的所有內容都位於JDK中。 ---但是,對於你的第一點,請再次閱讀答案的最後部分:Tomcat沒有找到Java。 ** Tomcat由Java **運行,並且Java已經知道它本身在哪裏。Tomcat的Java代碼只是使用反射調用JSP編譯的Java類。 Tomcat不需要找到Java來做到這一點,因爲** Java已經在運行它**。 – Andreas

+0

對不起,我一開始並沒有完全理解你的解釋。我試圖更好地理解它。所以這個過程是這樣的:1).jsp被轉換成.java,2).java被編譯爲.class,兩個步驟都在Tomcat中,3).class由JVM運行,這超出了Tomcat ,但完全用Java完成。你是這個意思嗎?謝謝。 – Peng

0
votes
answers
86 views
+10

Tomcat ThreadPool無法正常工作

0

我正在嘗試使用不同配置的Tomcat。啓用執行人配置在service.xml中如下Tomcat ThreadPool無法正常工作

<!--The connectors can use a shared executor, you can define one or more named thread pools--> 
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
maxQueueSize="1" daemon="false" 
    maxThreads="1" minSpareThreads="1"/> 

而且在下面Get方法有意添加線程睡眠:

@Path("/contact") 
@Slf4j 
@Singleton 
public class ContactDropboxService { 

    private ContactDAO contactDAO; 

    private NotificationPublisher notificationPublisher; 

    public ContactDropboxService() { 
     ApplicationContext context = new ClassPathXmlApplicationContext("Spring-Module.xml"); 
     this.contactDAO = (ContactDAO) context.getBean("contactDAO"); 
     this.notificationPublisher = (NotificationPublisher) context.getBean("notificationPublisher"); 
    } 

    @GET 
    public String greet() throws InterruptedException { 
     log.info("Welcome to InBhiwadi contact services! {}", Thread.currentThread().getId()); 
     Thread.sleep(10000); 
     return "Welcome to InBhiwadi contact services"; 
    } 
} 

我期待這第二個請求將被丟棄,如果它到達之前首先是處理。在日誌中,我檢查了所有請求正在並行處理。

INFO [http-nio-8080-exec-10] (ContactDropboxService.java:38) - Welcome to InBhiwadi contact services! 27 
INFO [http-nio-8080-exec-2] (ContactDropboxService.java:38) - Welcome to InBhiwadi contact services! 19 
INFO [http-nio-8080-exec-5] (ContactDropboxService.java:38) - Welcome to InBhiwadi contact services! 22 
INFO [http-nio-8080-exec-3] (ContactDropboxService.java:38) - Welcome to InBhiwadi contact services! 20 
INFO [http-nio-8080-exec-4] (ContactDropboxService.java:38) - Welcome to InBhiwadi contact services! 21 
INFO [http-nio-8080-exec-6] (ContactDropboxService.java:38) - Welcome to InBhiwadi contact services! 23 
INFO [http-nio-8080-exec-7] (ContactDropboxService.java:38) - Welcome to InBhiwadi contact services! 24 

請幫我理解,爲什麼ThreadPool(Executor)不工作?

更新1 完成service.xml的情況如下:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- 
    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. 
--> 
<!-- Note: A "Server" is not itself a "Container", so you may not 
    define subcomponents such as "Valves" at this level. 
    Documentation at /docs/config/server.html 
--> 
<Server port="8005" shutdown="SHUTDOWN"> 
    <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> 
    <!-- Security listener. Documentation at /docs/config/listeners.html 
    <Listener className="org.apache.catalina.security.SecurityListener" /> 
    --> 
    <!--APR library loader. Documentation at /docs/apr.html --> 
    <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 
    <!-- Prevent memory leaks due to use of particular java/javax APIs--> 
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> 
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 
    <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> 

    <!-- Global JNDI resources 
     Documentation at /docs/jndi-resources-howto.html 
    --> 
    <GlobalNamingResources> 
    <!-- Editable user database that can also be used by 
     UserDatabaseRealm to authenticate users 
    --> 
    <Resource name="UserDatabase" auth="Container" 
       type="org.apache.catalina.UserDatabase" 
       description="User database that can be updated and saved" 
       factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 
       pathname="conf/tomcat-users.xml" /> 
    </GlobalNamingResources> 

    <!-- A "Service" is a collection of one or more "Connectors" that share 
     a single "Container" Note: A "Service" is not itself a "Container", 
     so you may not define subcomponents such as "Valves" at this level. 
     Documentation at /docs/config/service.html 
    --> 
    <Service name="Catalina"> 

    <!--The connectors can use a shared executor, you can define one or more named thread pools--> 
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
    maxQueueSize="1" daemon="false" 
     maxThreads="1" minSpareThreads="1"/> 


    <!-- A "Connector" represents an endpoint by which requests are received 
     and responses are returned. Documentation at : 
     Java HTTP Connector: /docs/config/http.html 
     Java AJP Connector: /docs/config/ajp.html 
     APR (HTTP/AJP) Connector: /docs/apr.html 
     Define a non-SSL/TLS HTTP/1.1 Connector on port 8080 
    --> 
    <Connector port="8080" protocol="HTTP/1.1" 
       connectionTimeout="20000" 
       redirectPort="8443" /> 
    <!-- A "Connector" using the shared thread pool--> 
    <!-- 
    <Connector executor="tomcatThreadPool" 
       port="8080" protocol="HTTP/1.1" 
       connectionTimeout="20000" 
       redirectPort="8443" /> 
    --> 
    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 
     This connector uses the NIO implementation. The default 
     SSLImplementation will depend on the presence of the APR/native 
     library and the useOpenSSL attribute of the 
     AprLifecycleListener. 
     Either JSSE or OpenSSL style configuration may be used regardless of 
     the SSLImplementation selected. JSSE style configuration is used below. 
    --> 
    <!-- 
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" 
       maxThreads="150" SSLEnabled="true"> 
     <SSLHostConfig> 
      <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" 
         type="RSA" /> 
     </SSLHostConfig> 
    </Connector> 
    --> 
    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2 
     This connector uses the APR/native implementation which always uses 
     OpenSSL for TLS. 
     Either JSSE or OpenSSL style configuration may be used. OpenSSL style 
     configuration is used below. 
    --> 
    <!-- 
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" 
       maxThreads="150" SSLEnabled="true" > 
     <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> 
     <SSLHostConfig> 
      <Certificate certificateKeyFile="conf/localhost-rsa-key.pem" 
         certificateFile="conf/localhost-rsa-cert.pem" 
         certificateChainFile="conf/localhost-rsa-chain.pem" 
         type="RSA" /> 
     </SSLHostConfig> 
    </Connector> 
    --> 

    <!-- Define an AJP 1.3 Connector on port 8009 --> 
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 


    <!-- An Engine represents the entry point (within Catalina) that processes 
     every request. The Engine implementation for Tomcat stand alone 
     analyzes the HTTP headers included with the request, and passes them 
     on to the appropriate Host (virtual host). 
     Documentation at /docs/config/engine.html --> 

    <!-- You should set jvmRoute to support load-balancing via AJP ie : 
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> 
    --> 
    <Engine name="Catalina" defaultHost="localhost"> 

     <!--For clustering, please take a look at documentation at: 
      /docs/cluster-howto.html (simple how to) 
      /docs/config/cluster.html (reference documentation) --> 
     <!-- 
     <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 
     --> 

     <!-- Use the LockOutRealm to prevent attempts to guess user passwords 
      via a brute-force attack --> 
     <Realm className="org.apache.catalina.realm.LockOutRealm"> 
     <!-- This Realm uses the UserDatabase configured in the global JNDI 
      resources under the key "UserDatabase". Any edits 
      that are performed against this UserDatabase are immediately 
      available for use by the Realm. --> 
     <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
       resourceName="UserDatabase"/> 
     </Realm> 

     <Host name="localhost" appBase="webapps" 
      unpackWARs="true" autoDeploy="true"> 

     <!-- SingleSignOn valve, share authentication between web applications 
      Documentation at: /docs/config/valve.html --> 
     <!-- 
     <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> 
     --> 

     <!-- Access log processes all example. 
      Documentation at: /docs/config/valve.html 
      Note: The pattern used is equivalent to using pattern="common" --> 
     <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
       prefix="localhost_access_log" suffix=".txt" 
       pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 

     </Host> 
    </Engine> 
    </Service> 
</Server> 
沙发
0
2

您還需要配置使用連接器的executor

<Connector executor="tomcatThreadPool" 
      port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" /> 
+0

我有這種連接器已經在服務配置.XML。 請檢查更新的問題描述。 –

+0

@KuldeepYadav不,它已被註釋掉。 – Oleg

+0

是的。它的作品:)謝謝@ Oleg –

0
votes
answers
89 views
+10

爲什麼java.lang.NoSuchMethodError出現非常特定於環境或類加載器?

0

我目前正在開發一個項目,其中包含log4j-over-slf4j.jar文件。在所有的環境中,這個罐子都在工作。但突然間我有一臺WebSphere應用程序服務器。 我們的產品在tomcat服務器上工作,突然之間,我們的應用程序無法創建任何日誌,而在另一個環境中創建它。如果我嘗試從項目中刪除該jar,那麼我可以生成日誌。爲什麼java.lang.NoSuchMethodError出現非常特定於環境或類加載器?

但我無法確定爲什麼我應該只爲特定的環境做這件事。

或者我應該怎麼做才能在服務器運行時識別類加載器信息以確定哪個類被加載或哪個方法被加載?

我的JDK版本是: 「1.7.0_71」

我的應用程序中包含這些庫:

antlr-2.7.7.jar 
aopalliance-1.0.jar 
asm-1.5.3.jar 
asm-attrs-1.5.3.jar 
axiom-api-1.2.12.jar 
axiom-impl-1.2.12.jar 
axis2-1.6.2.jar 
axis2-kernel-1.6.1.jar 
axis2-transport-http-1.6.1.jar 
axis2-transport-local-1.6.1.jar 
c3p0-0.9.2.1.jar 
cglib-2.1_3.jar 
com.ibm.jbatch-tck-spi-1.0.jar 
commons-codec-1.6.jar 
commons-collections-3.1.jar 
commons-fileupload-1.2.jar 
commons-httpclient-3.1.jar 
commons-logging-1.1.3.jar 
dom4j-1.6.1.jar 
ehcache-1.2.3.jar 
geronimo-activation_1.1_spec-1.0.2.jar 
geronimo-javamail_1.4_spec-1.6.jar 
geronimo-jta_1.1_spec-1.1.jar 
geronimo-stax-api_1.0_spec-1.0.1.jar 
geronimo-ws-metadata_2.0_spec-1.1.2.jar 
hibernate-3.2.4.ga.jar 
hibernate-annotations-3.3.0.ga.jar 
hibernate-commons-annotations-3.1.0.GA.jar 
hibernate-core-3.3.0.CR2.jar 
hibernate-ehcache-3.3.0.CR2.jar 
hibernate-entitymanager-3.3.1.ga.jar 
hibernate-jpa-2.0-api-1.0.0.Final.jar 
hibernate-validator-3.1.0.CR2.jar 
httpcore-4.0.jar 
javaetmoi-spring4-vfs2-support-1.4.0.jar 
javassist-3.18.1-GA.jar 
javassist-3.3.GA.jar 
javax.batch-api-1.0.jar 
javax.servlet-api-3.0.1.jar 
jaxen-1.1.1.jar 
jboss-common-core-2.0.4.GA.jar 
jboss-logging-3.3.0.Final.jar 
jettison-1.2.jar 
jsr311-api-1.0.jar 
jta-1.1.jar 
log4j-1.2.17.jar 
log4j-api-2.0.jar 
logkit-1.0.1.jar 
mchange-commons-java-0.2.3.4.jar 
neethi-3.0.1.jar 
oracle-ojdbc6-11.2.0.3.0.jar 
persistence-api-1.0.jar 
poi-3.9.jar 
slf4j-api-1.7.11.jar 
slf4j-simple-1.6.4.jar 
spring-aop-3.2.13.RELEASE.jar 
spring-batch-core-3.0.1.RELEASE.jar 
spring-batch-infrastructure-3.0.1.RELEASE.jar 
spring-beans-3.2.13.RELEASE.jar 
spring-context-3.2.13.RELEASE.jar 
spring-core-3.2.13.RELEASE.jar 
spring-expression-3.2.13.RELEASE.jar 
spring-jdbc-3.2.13.RELEASE.jar 
spring-orm-3.2.13.RELEASE.jar 
spring-retry-1.0.3.RELEASE.jar 
spring-tx-3.2.13.RELEASE.jar 
spring-web-4.0.3.RELEASE.jar 
stax-api-1.0.1.jar 
woden-api-1.0M9.jar 
woden-impl-commons-1.0M9.jar 
woden-impl-dom-1.0M9.jar 
wsdl4j-1.6.2.jar 
wstx-asl-3.2.9.jar 
xmlbeans-2.5.0.jar 
xmlpull-1.1.3.1.jar 
XmlSchema-1.4.7.jar 
xpp3_min-1.1.4c.jar 
xstream-1.4.7.jar 

我的Tomcat的lib目錄包含:

annotations-api.jar 
catalina-ant.jar 
catalina-ha.jar 
catalina.jar 
catalina-storeconfig.jar 
catalina-tribes.jar 
ecj-4.5.jar 
el-api.jar 
jasper-el.jar 
jasper.jar 
jsp-api.jar 
ojdbc6-11.2.0.3.jar 
servlet-api.jar 
sqljdbc4-11.1.0.7.0.jar 
tomcat-api.jar 
tomcat-coyote.jar 
tomcat-dbcp.jar 
tomcat-i18n-es.jar 
tomcat-i18n-fr.jar 
tomcat-i18n-ja.jar 
tomcat-jdbc.jar 
tomcat-jni.jar 
tomcat-juli.jar 
tomcat-util.jar 
tomcat-util-scan.jar 
tomcat-websocket.jar 
websocket-api.jar 
沙发
0
0

不能確定準確的環境,但我幾乎可以肯定你會得到一些類庫的意外版本。如果在從Tomcat切換到WebSphere(或其他方式)之後發生問題,他們可能有不同版本的與slf4相關的東西(或其中一個庫有另一個缺失的庫)。大多數情況下,java的-verbose:class選項應該可用於挖掘從何處獲得類的內容

板凳
0
0

當您的代碼使用不同於您的環境提供的代碼版本進行編譯時,會出現此類錯誤。

public class A{ 
public void a(){ 
} 
} 

//newer version of module 
public class AVariant{ 
public void a(String b){ 
} 
} 

我沒那麼熟悉WebSphere,但這裏的問題是,WebSphere使用日誌框架的舊/更新或版本,這是不兼容你編譯應用程序的版本。您需要解決此依賴性衝突。

本指南可以幫助你:當你的應用程序試圖調用一個方法在早期版本的類,這是不可用的類的較新版本的情況 https://www.slf4j.org/legacy.html

+0

感謝您的回答,我們知道NoSuchMethodError如何發生,但我的問題是爲什麼我們必須刪除該jar。 – 5A9U

地板
0
0

NoSuchMethod錯誤。基本上這可能是由於升級/降級或進入新環境時版本衝突造成的。

的深入描述在這裏。

Docker Image of Jersey Web Application

檢查應用程序庫VS服務器提供的庫不會是在這裏使用。重要的是JVM類加載器在運行時加載的庫/類。

分析哪些是通過java.class.path系統屬性加載的類https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

System.getProperty("java.class.path"); 

然後將它們與你的Tomcat版本提供的罐子進行比較。

+0

類路徑中沒有任何變化。它仍然是一樣的。我們在默認情況下在tomcat的classpath中使用了bootstrap.jar和tomcat-juli.jar。 – 5A9U

+0

你能發佈錯誤日誌嗎? –

0
votes
answers
55 views
+10

環境變量

0

我有我的/etc/environment如下環境變量

APP="/opt/apps/" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" JAVA_HOME="/usr/lib/jvm/java-8-oracle"

我已經在我的機器上採購source /etc/environment。我能夠得到的輸出,當我在終端

鍵入echo $APP,但是當我把它從Java文件中

LOGGER.error("APP: " + System.getenv("APP")); LOGGER.error("PATH: " + System.getenv("PATH")); LOGGER.error("JAVA_HOME: " + System.getenv("JAVA_HOME"));

我得到的唯一路徑的輸出而不是其他2個ENV變量。

輸出

2017-12-18 07:22:10 ERROR JRWebService:127 - APP: null 2017-12-18 07:22:10 ERROR JRWebService:128 - PATH:/ usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 2017-12-18 07:22:10 ERROR JRWebService:129 - JAVA_HOME: null

請糾正我,我究竟做錯了

+0

檢查此System.getProperty(「JAVA_HOME」); –

+0

當您嘗試[教程](https://docs.oracle.com/javase/tutorial/essential/environment/env.html)中的EnvMap示例時,您會得到什麼? –

+1

即使PATH變量值不匹配。 –

沙发
0
3

這聽起來像不導出APP和JAVA_HOME。使用unix shell,set(變量在當前shell中可見)和export(變量對所有子進程都可見)之間有區別。如果您只鍵入「X = Y」,則設置X,但不導出。 PATH大部分已經出口到某個地方。

您可以在控制檯中運行「export | grep APP」來測試。如果APP不顯示,那麼即使echo $APP工作得很好,該變量對於java或您運行的任何其他程序都不可見。

如果是這種情況,只需將「導出APP」添加到.profile或啓動Java應用程序的腳本(或測試,只需在啓動Java之前在控制檯上鍵入)。

+0

運行'export | grep APP'給出了以下結果'declare -x APP =「/ opt/apps /」'但是我仍然無法在JAVA中訪問它 –

+0

@Jay怎麼樣,從哪裏啓動java?我的意思是: - 你是從控制檯啓動它爲java YourClassName - 你是使用腳本運行它嗎 - 或者我們在談論一個作爲服務運行的web應用程序嗎? – Yaro

+0

我在tomcat服務器上部署了一個war文件。我的tomcat位於/ opt/tomcat。版本8. * –

板凳
0
0

你不應該源你的/ etc /環境。這不是讓變量進入你的過程的方式。/etc/environment文件不是一個腳本,所以它沒有任何意義。它只是一個設置列表,有點像屬性文件。

請參閱this瞭解更多詳情。

當您登錄時會被讀取。因此,要使變量可見,您應該註銷並返回。

+0

我已經重新啓動系統,但沒有任何效果。當我發出echo $ APP時,我得到輸出,但在java文件中無法訪問相同的變量 –

0
votes
answers
49 views
+10

tomcat 7 web.xml層次結構 - 用戶和角色 - java servlet

0

我試圖熟悉TomEE,或者至少TomCat 7用於我目前正在工作的舊應用程序。tomcat 7 web.xml層次結構 - 用戶和角色 - java servlet

在tomcat位置有一個web.xml。據我瞭解,這是用於所有沒有自己的web.xml的servlet,對吧?或者這也可以用於那些擁有自己特性的servlet嗎?

不確定這個配置文件的層次結構。

試圖獲得一個基本身份驗證工作的模塊,可以通過一個url分配像 localhost:8080 AB localhost:8080 管理員的tomcat用戶工作正常。 但無法獲取本地主機的登錄:8080 AB

我試圖修改web.xml,如:

<security-role> 
<role-name>users</role-name> 
</security-role> 
<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>basic demo resource</web-resource-name> 
     <url-pattern>AB*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>users</role-name> 
    </auth-constraint> 
</security-constraint> 
<login-config> 
    <auth-method>BASIC</auth-method> 
</login-config> 

但仍需要訪問這個servlet沒有登錄。

比我發現,在這個Java項目中還有另一個web.xml,我也試着用上面的代碼進行修改。 我知道我做錯了什麼,但不知道現在是什麼。

「用戶」角色是在tomcat-users.xml中創建的,並且用戶也被分配給該組。

沙发
0
0

您只定義了安全約束而不是角色。你需要定義tomcat用戶和相應的角色。

<tomcat-users> 
    <role rolename="AB"/> <!-- you have to define all roles --> 
    <user username="myname" password="mypassword" roles="AB"/> 
    <!-- you have to assign login and roles --> 
</tomcat-users> 
+0

我已經添加在其位於tomcat目錄是tomcat-users.xml中一個角色和用戶。所以角色「用戶」和角色中的用戶都存在。或者,如果我在tomcat-users.xml中定義它並嘗試從項目中包含的web.xml中訪問該角色,它是行不通的。這就是標籤所做的,對嗎? – flix

板凳
0
0

tomcat目錄中的web.xml包含默認設置。 webapp可以在自己的web.xml中覆蓋定義。

要訪問/ AB您需要:

  • 使用斜線:<url-pattern>/AB/*</url-pattern>
  • 有與角色users用戶在您的用戶數據庫
  • 在登錄時輸入的用戶名和密碼彈出對話框。
+0

好的,用正斜槓修改了網址。這必須足以獲得登錄提示,對嗎?當然,這隻有在角色和用戶都已定義的情況下才有效,但登錄提示應該出現。現在情況並非如此。我如何獲得用戶數據庫中的用戶?通過使用tomcat目錄中的tomcat-users.xml? – flix

+0

你使用的是什麼類型的領域? –

+0

沒有爲此定義任何內容。 server.xml中的領域似乎是默認的。 – flix