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: 86

0
votes
answers
34 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
36 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
31 views
+10

tomcat後臺線程

1

我有一個tomcat 6.20實例正在運行,並且想通過後臺線程發送郵件來阻止郵件發送功能阻止請求。tomcat後臺線程

有什麼辦法可以在後臺執行線程,同時仍然允許正常的頁面流發生。

該應用程序是用ICEfaces編寫的。

謝謝。

沙发
0
3
  1. 使用java.util.concurrent.Executors.newCachedThreadPool(或其他工廠方法之一)在您的控制器/ servlet的初始化方法的Executor創建。
  2. 當請求時,包裹郵件發送邏輯在java.lang.Runnable
  3. 提交RunnableExecutor

這將在後臺執行的發送。請記得在啓動時創建一個Executor,並在所有請求之間共享;不要每次都創建一個新的Executor(你可以,但會有點慢和浪費)。

+0

這應該是j.u.c.Executors.newCachedThreadPool(帶有s),但除此之外:同意 – WMR 2009-07-28 14:22:49

板凳
0
0

我找到了出路。這些標籤

@PostConstruct() 

@PreDestroy() 

創建2種方法,在你的servlet返回void並接受任何參數。 將第一個標記放置在第一個方法的正上方,將第二個標記放置在第二個標記的上方。

的標籤

的@PostConstruct方法由容器之前實現類開始響應Web服務客戶端稱爲Essense。

@PreDestroy方法在端點從操作中移除之前由容器調用。

在PostConstruction()方法中,使用runnable接口創建線程,並使其運行在無限循環中,除非某個布爾變量的值爲false。

使用PreDestroy()方法將布爾變量設置爲false。

0
votes
answers
26 views
+10

Tomcat啓動問題

0

我正在使用與Netbeans 6.5集成的tomcat6(分發)。它沒有任何問題,現在突然停止工作。現在,如果我嘗試從控制檯中的netbeans啓動Tomcat,它將打印服務器在幾毫秒內啓動並且所有其他事物都會緊隨其後,netbeans將繼續顯示「啓動tomcat」狀態欄並最終顯示「Tomcat啓動失敗」。任何人都可以幫我解決這個問題嗎?下面是控制檯輸出,同時啓動NetBeansTomcat啓動問題

Using CATALINA_BASE: E:Tomcat distriapache-tomcat-6.0.20 
Using CATALINA_HOME: E:Tomcat distriapache-tomcat-6.0.20 
Using CATALINA_TMPDIR: E:Tomcat distriapache-tomcat-6.0.20	emp 
Using JRE_HOME:  C:Program FilesJavajdk1.6.0_11 
Sep 22, 2009 10:52:28 AM org.apache.catalina.core.AprLifecycleListener init 
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:Program FilesJavajdk1.6.0_11in;.;C:SYSROOTSunJavain;C:SYSROOTsystem32;C:SYSROOT;C:Program FilesJavajdk1.6.0_11in;E:Oracleproduct10.1.0Client_4in;E:Oracleproduct10.1.0Client_4jre1.4.2inclient;E:Oracleproduct10.1.0Client_4jre1.4.2in;C:SYSROOTsystem32;C:SYSROOT;C:SYSROOTSYSTEM;C:SYSROOTsystem32Wbem;C:Program FilesCAeTrustITM;C:Program FilesCASharedComponentsScanEngine;C:Program FilesCASharedComponentsCAUpdate;C:Program FilesCASharedComponentsThirdParty;C:Program FilesCASharedComponentsSubscriptionLicense;C:Program FilesTortoiseSVNin;E:Thomas 
Sep 22, 2009 10:52:28 AM org.apache.coyote.http11.Http11Protocol init 
INFO: Initializing Coyote HTTP/1.1 on http-8080 
Sep 22, 2009 10:52:28 AM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 999 ms 
Sep 22, 2009 10:52:28 AM org.apache.catalina.core.StandardService start 
INFO: Starting service Catalina 
Sep 22, 2009 10:52:28 AM org.apache.catalina.core.StandardEngine start 
INFO: Starting Servlet Engine: Apache Tomcat/6.0.20 
Sep 22, 2009 10:52:29 AM org.apache.coyote.http11.Http11Protocol start 
INFO: Starting Coyote HTTP/1.1 on http-8080 
Sep 22, 2009 10:52:29 AM org.apache.jk.common.ChannelSocket init 
INFO: JK: ajp13 listening on /0.0.0.0:8009 
Sep 22, 2009 10:52:29 AM org.apache.jk.server.JkMain start 
INFO: Jk running ID=0 time=0/47 config=null 
Sep 22, 2009 10:52:29 AM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 974 ms 

Tomcat的日誌:

Sep 22, 2009 10:36:46 AM org.apache.catalina.core.ApplicationContext log 
INFO: ContextListener: contextInitialized() 
Sep 22, 2009 10:36:46 AM org.apache.catalina.core.ApplicationContext log 
INFO: SessionListener: contextInitialized() 
Sep 22, 2009 10:52:29 AM org.apache.catalina.core.ApplicationContext log 
INFO: ContextListener: contextInitialized() 
Sep 22, 2009 10:52:29 AM org.apache.catalina.core.ApplicationContext log 
INFO: SessionListener: contextInitialized() 
+0

嘗試重新啓動系統後啓動tomcat。會有更多的日誌。請張貼 – 2013-07-23 06:22:49

沙发
0
0

我不熟悉的網豆,但似乎它推出一個「空」的tomcat,然後執行應用程序的熱部署。

+0

它正確地部署應用程序..即使tomcat正在開始..但netbeans仍然顯示錯誤.. – 2009-09-24 05:23:42

+0

您可以請張貼日誌中的一些例外(如果有的話) – 2009-09-24 06:46:21

0
votes
answers
29 views
+10

在servlet中啓動線程,有什麼問題?

1

我有一個web應用程序,在單個請求可能需要加載數百個數據。現在問題是數據是分散的。所以,我必須從幾個地方加載數據,在它們上應用過濾器,處理它們然後做出響應。依次執行所有這些操作使得servlet 變得緩慢在servlet中啓動線程,有什麼問題?

因此,我曾想過在單獨的線程中加載所有數據,例如t[i] = new Thread(loadData).start();,等待所有線程完成使用while(i < count) t[i].join();並且完成後,加入數據並作出響應。

現在我不確定這種方法是對的還是有一些更好的方法。我讀過的地方是servlet中的產卵線程是不可取的。

我想要的代碼看起來像這樣。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
     Iterable<?> requireddata = requiredData(request); 
     Thread[] t = new Thread[requireddata.size]; 
     int i = 0; 
     while (requireddata.hasNext()) 
     { 
      t[i] = new Thread(new loadData(requiredata.next())).start(); 
      i++; 
     } 
     for(i = 0 ; i < t.length ; i++) 
     t[i].join(); 
     // after getting the data process and respond! 
} 
沙发
0
6

的主要問題是,你把服務器癱瘓,如果許多併發請求來爲你的servlet,因爲你不限制可以產生的線程數。另一個問題是你不斷重新創建新線程,而不是重用它們,效率不高。

這兩個問題很容易通過使用線程池解決。 Java對它們有本地支持。閱讀the tutorial

另外,請確保在webapp關閉時使用ServletContextListener關閉線程池。

板凳
0
0

您可以考慮使用java.util.concurrent api中的Executor框架。例如,您可以將計算任務創建爲Callable,然後將該任務提交給ThreadPoolExecutor。從Java併發示例代碼的實際應用: -

public class Renderer { 
    private final ExecutorService executor; 
    Renderer(ExecutorService executor) { this.executor = executor; } 

    void renderPage(CharSequence source) { 
     final List<ImageInfo> info = scanForImageInfo(source); 
     CompletionService<ImageData> completionService = 
      new ExecutorCompletionService<ImageData>(executor); 
    for (final ImageInfo imageInfo : info) 
     completionService.submit(new Callable<ImageData>() { 
      public ImageData call() { 
       return imageInfo.downloadImage(); 
       } 
       }); 
renderText(source); 
try { 
    for (int t = 0, n = info.size(); t < n; t++) { 
    Future<ImageData> f = completionService.take(); 
    ImageData imageData = f.get(); 
    renderImage(imageData); 
    } 
} catch (InterruptedException e) { 
    Thread.currentThread().interrupt(); 
} catch (ExecutionException e) { 
    throw launderThrowable(e.getCause()); 
} 
    } 
} 
地板
0
0

聽起來像是爲CyclicBarrier一個問題。

例如:

ExecutorService executor = Executors.newFixedThreadPool(requireddata.size); 

public void executeAllAndAwaitCompletion(List<? extends T> threads){ 
    final CyclicBarrier barrier = new CyclicBarrier(threads.size() + 1); 
    for(final T thread : threads){ 
     executor.submit(new Runnable(){ 
      public void run(){ 
       //it is not a mistake to call run() here 
       thread.run(); 
       barrier.await(); 
      } 
     }); 
    } 
    barrier.await(); 
} 

一旦所有其他人完成從threads最後一個線程將被excuted。

而不是調用Executors.newFixedThreadPool(requireddata.size);,最好重用一些現有的線程池。

4楼
0
0

由於您正在等待所有線程完成,然後您提供了響應,所以如果您僅使用CPU週期,IMO多線程將無法提供幫助。它只會通過在線程中添加上下文切換延遲來增加響應時間。單線程會更好。但是如果涉及到網絡/ IO等,你可以利用線程池。

但是你想重新考慮你的方法。在http請求中同步處理大量數據不可取。對於最終用戶來說不是一個好的體驗。你可以做的是啓動一個線程來處理數據,並提供一個「正在處理」的響應。您可以向網絡用戶提供某種形式的手勢,以隨時檢查狀態。

0
votes
answers
19 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
27 views
+10

在tomcat中啓動的automativ線程

0

我想要一個線程在tmocat上的應用程序啓動時啓動automaticalyy。 我該怎麼做。我必須添加一些東西到web.xml?在tomcat中啓動的automativ線程

沙发
0
2

你可以用SerlvetContextListener來做到這一點。

創建一個實現了ServletContextListener接口的類:

import javax.servlet.*; 
import javax.servlet.http.*; 

public class ApplicationStartup implements ServletContextListener { 

    public void contextInitialized(ServletContextEvent event) { 
    // Do work here... 
    // new Thread().start(); etc... 
    } 

    public void contextDestroyed(ServletContextEvent event) 
    { 
    // Stop work here if required 
    } 
} 

你的類添加到web.xml文件:

<?xml version="1.0" encoding="ISO-8859-1"?> 

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2.3.dtd"> 

<web-app> 

    <!-- Listeners --> 
    <listener> 
    <listener-class>ApplicationStartup</listener-class> 
    </listener> 

</web-app> 
板凳
0
1

這不是一個好主意,開始在Tomcat中你自己的線程或任何其他Java EE容器(SO中的許多相關問題)。你會更好使用Quartz調度程序。

3
votes
answers
24 views
+10

Tomcat vs Weblogic JNDI Lookup

The Weblogic servers we are using have been configured to allow JNDI datasource names like "appds".

For development (localhost), we might be running Tomcat and when declared in the <context> section of server.xml, Tomcat will hang JNDI datasources on "java:comp/env/jdbc/*" in the JNDI tree.

Problem: in Weblogic, the JNDI lookup is "appds" whilst in Tomcat, it seems that that I must provide the formal "java:comp/env/jdbc/appds". I'm afraid the Tomcat version is an implicit standard but unfortunately, I can't change Weblogic's config ... so that means we end up with two different spring config files (we're using spring 2.5) to facilitate the different environments.

Is there an elegant way to address this. Can I look JNDI names up directly in Tomcat? Can Spring take a name and look in both places? Google searches or suggestions would be great.

沙发
+10

環境變量怎麼樣?使用Weblogic名稱為開發人員計算機設置tomcat名稱和生產。您甚至可以將代碼設置為使用默認代碼(WebLogic),以防該變量不存在。

板凳
+10

你如何在春天引用資源?

這就是我們對tomcat的看法:

上下文:

 &lt; Resource name =“jms / ConnectionFactory”auth =“Container”type =“org.apache.activemq.ActiveMQConnectionFactory”description =“JMS Connection Factory”factory =“org.apache.activemq.jndi.JNDIReferenceFactory”brokerURL =“tcp:// localhost:61615”brokerName =“StandaloneAc tiveMQBroker”/&gt;   

spring:

 &lt; beans xmlns =“http://www.springframework.org/schema/beans” xmlns:xsi =“http://www.w3.org/2001/XMLSchema-instance”xmlns:util =“http:
     
			
        

為什麼使用ActiveMQ庫連接到weblogic? - wmarbut 16年1月13日22:42

地板
+10

在應用程序本身設置DataSource並不是那麼瘋狂:)我想說如果應用程序要部署在網格上,這甚至是強制性的。河流,GigaSpaces或類似的。

注意:我沒有說連接設置必須在WAR內部進行硬編碼,它們需要在部署時/運行時提供。這簡化了雲實例的管理,因為只有在適當的位置進行配置。

只有在那裡部署多個應用程序並且他們可以使用共享資源時,才能在容器上配置資源。

同樣,在雲類型的部署中,每個servlet容器實例只有一個應用程序。

4楼
0

我的應用程序也有類似的問題,這就是我解決它的方法:

1) WEB-INF / classes / application.properties 包含條目:

 ds.jndi = java:comp / env / jdbc / tcds  

2)在WLS機器上,我在 / etc / sysenv 文件中有一個條目:

 ds.jndi = wlsds  

3)我使用配置spring以查找屬性 $ {ds.jndi} 的JNDI PropertyPlaceholderConfigurer bean,其中 classpath:application.properties file:/ etc / sysenv 作為位置。我還將 ignoreResourceNotFound 設置為 true ,以便開發人員無需 / etc / sysenv < / code>在他們的機器上。

4)我使用Cargo + Jetty運行集成測試,我無法在那裡正確設置JNDI環境。所以我也使用 JndiObjectFactoryBean defaultObject 屬性配置了回退 BasicDataSource

0
votes
answers
29 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
23 views
+10

Apache Tomcat的錯誤頁面

0

我使用Apache Tomcat v7.0.63,它承載4個不同的應用程序。其中一個應用程序具有錯誤頁面的列表。Apache Tomcat的錯誤頁面

現在我們想讓它成爲通用的,以便其他應用程序也可以使用相同的錯誤頁面。通過這種方式,我們不需要在所有Web應用程序中保留重複文件。我們希望將所有錯誤頁面保存在tomcat/errorPages目錄或tomcat/conf/errorPages目錄下。

我嘗試修改/tomcat/webapps/MyApplication/WEB-INF/web.xml文件,如下所示,它不起作用。任何人都可以幫忙嗎?

</error-page> 
    <error-page> 
    <error-code>404</error-code> 
    <location>/../../errorPages/errorPage404.html</location> 
</error-page> 

而errorPage404.html被放置在/ tomcat/errorPages目錄中。

+0

嗨你檢查下面的解決方案 –

+0

是。它不起作用。 1.我也驗證了文件權限。 2.我也嘗試過使用絕對路徑。 3.我也嘗試過使用regEx ..例如 /*file_not_found.html Vadiraj

沙发
0
0

如果你想讓它通用,我建議你在TOMCAT_HOME/conf/web.xml中定義錯誤。它將覆蓋Tomcat附帶的默認錯誤頁面。

<error-page> 
     <error-code>500</error-code> 
     <location>/server_error.html</location> 
    </error-page> 
    <error-page> 
     <error-code>404</error-code> 
     <location>/file_not_found.html</location> 
    </error-page> 

確保將錯誤頁面移動到另一個位置/webapps/ROOT/