0

Tomcat で 3 つのアプリケーションを起動していますが、この混乱に至るまですべてが正常に機能していました。始める前に、Tomcat ロギングが機能しない可能性があるため、再構成する必要がありますが、今日最初のタイマーとして実装したフィルターの誤った構成が原因である可能性があるため、アプリケーションが起動しないと感じています。 :

package org.thejarbar.web.filters;

import java.io.*;
import java.util.regex.Pattern;
import javax.servlet.*;
import javax.servlet.http.*;

public final class JSessionFilter implements Filter {

    public void init(FilterConfig filterConfigObj) {

    }

    public void doFilter(ServletRequest _req, ServletResponse _res,
                         FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) _req;
        HttpServletResponse res = (HttpServletResponse) _res;
        String url =req.getRequestURL().toString();

        if(Pattern.compile(Pattern.quote("jsessionid"), Pattern.CASE_INSENSITIVE).matcher(url).find()){

            String redirectURL = "http://thejarbar.org";
            res.setStatus(res.SC_MOVED_PERMANENTLY);
            res.setHeader("Location",redirectURL);
            res.setHeader( "Connection", "close" );
        }

        chain.doFilter(req, res);
    }

    public void destroy() { }
} 

web.xml で設定:

<filter>
    <filter-name>sessionFilter</filter-name>
    <filter-class>org.thejarbar.web.filters.JSessionFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>sessionFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

メモリの問題が疑われますが、Unix ゲストで実行するコマンドがわからず、メイン アプリケーションの隣にある最大のアプリケーションを削除しても問題は解決しません (これで十分なリソースが解放されます)。

私が投稿した内容に、非難されて修正される可能性のあるものはありますか? アプリケーション:ここにリンクの説明を入力し、ここにリンクの説明を入力すると、デプロイされているように見えますが、アクセスできません (試してみても)。

私の開発システムでは、すべてスムーズに動作します。

Managed を編集して、ログ ファイルを再度取得します。

INFO | jvm 1 | 2012/06/23 01:19:58 | Jun 23, 2012 1:19:58 AM org.apache.catalina.startup.Catalina start
INFO | jvm 1 | 2012/06/23 01:19:58 | SEVERE: Catalina.start:
INFO | jvm 1 | 2012/06/23 01:19:58 | org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
INFO | jvm 1 | 2012/06/23 01:19:58 | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
INFO | jvm 1 | 2012/06/23 01:19:58 | at org.apache.catalina.startup.Catalina.start(Catalina.java:624)
INFO | jvm 1 | 2012/06/23 01:19:58 | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
INFO | jvm 1 | 2012/06/23 01:19:58 | at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
INFO | jvm 1 | 2012/06/23 01:19:58 | at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
INFO | jvm 1 | 2012/06/23 01:19:58 | at java.lang.reflect.Method.invoke(Method.java:597)
INFO | jvm 1 | 2012/06/23 01:19:58 | at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
INFO | jvm 1 | 2012/06/23 01:19:58 | at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)
INFO | jvm 1 | 2012/06/23 01:19:58 | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
INFO | jvm 1 | 2012/06/23 01:19:58 | at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
INFO | jvm 1 | 2012/06/23 01:19:58 | at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
INFO | jvm 1 | 2012/06/23 01:19:58 | at java.lang.reflect.Method.invoke(Method.java:597)
INFO | jvm 1 | 2012/06/23 01:19:58 | at org.tanukisoftware.wrapper.WrapperStartStopApp.run(WrapperStartStopApp.java:264)
INFO | jvm 1 | 2012/06/23 01:19:58 | at java.lang.Thread.run(Thread.java:662)
INFO | jvm 1 | 2012/06/23 01:19:58 | Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
INFO | jvm 1 | 2012/06/23 01:19:58 | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
INFO | jvm 1 | 2012/06/23 01:19:58 | at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727)
INFO | jvm 1 | 2012/06/23 01:19:58 | at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
4

2 に答える 2

2

問題を解決しました。私のホスティング プロバイダーには、Tomcat のログ記録が見つかった場所に関する古いドキュメントがあります。つまり、私catalina.outvar/log/tomcat7場所の下にあり、どこにもありませんでした/opt/tomcat7

ログを表示すると、UnsupportedClassVersion例外が表示され、本番環境に一致する jdk がダウンロードされました。ご不便おかけしてすみません。

于 2012-06-23T22:25:54.300 に答える
2

「メイン サイト」ファイルが Tomcat のconf/web.xmlものである場合、間違ったファイルを編集しています。元の状態に戻しconf/web.xmlて (または から新しいコピーをダウンロードしてtomcat.apache.org)、代わりに webapp のWEB-INF/web.xmlファイルを編集します。そうすれば、Tomcat のディレクトリからすべてのアプリケーションをロードしようとする代わりに、Filterwebapp からロードされます。明らかに、 がの JAR ファイルまたは JAR ファイルに含まれていることを確認する必要があります。WEB-INF/classesWEB-INF/lib/*.jarlib/org/thejarbar/web/filters/JSessionFilter.classWEB-INF/classesWEB-INF/lib

また、フィルターで厳密に必要以上の作業を行っていることに注意してください。必要はありません...

  1. リクエストごとに正規表現パターンをコンパイルする (1 回実行)
  2. 正規表現パターン使用する (単純な部分文字列検索を使用できます)
  3. ;jsessionid=セッションIDが埋め込まれたURLを本当に受け入れたくない場合は、おそらく探しているはずです
  4. そこにステートメントが必要ですreturn。それ以外の場合は、Redirectプラスを返し、元のリクエストを処理します
  5. 知りたいことをすでに教えてくれる API メソッドがあります (以下を参照)。

これを試して:

public void doFilter(ServletRequest _req, ServletResponse _res,
                     FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) _req;
    HttpServletResponse res = (HttpServletResponse) _res;

    if(request.isRequestedSessionIdFromURL())
    {
        String redirectURL = "http://thejarbar.org";
        res.setStatus(res.SC_MOVED_PERMANENTLY);
        res.setHeader("Location",redirectURL);
        res.setHeader( "Connection", "close" );
    }
    else
    {
        chain.doFilter(req, res);
    }
}

それは、最初に投稿したものよりもはるかにうまく機能するはずです.

于 2012-06-22T20:16:53.960 に答える