gpt4 book ai didi

Java webapp Filter导致Tomcat启动服务器失败

转载 作者:行者123 更新时间:2023-11-28 22:36:04 24 4
gpt4 key购买 nike

我的 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 客户机上运行什么命令,并且删除我的主应用程序旁边最大的应用程序并不能解决这个问题(这应该释放足够的资源)。

我发布的内容中是否有任何可见的内容可以归咎于此并予以纠正?申请:enter link description hereenter link description here似乎已部署但无法访问(如果您尝试)。

在我的开发系统上一切顺利。

编辑设法重新获取日志文件:

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)

最佳答案

如果您的“主站点”文件是 Tomcat 的 conf/web.xml,那么您正在编辑错误的文件。将 conf/web.xml 恢复原样(或从 tomcat.apache.org 下载一份新副本),然后编辑您的网络应用程序的 WEB-INF/web.xml 文件。这样,您的 Filter 将从您的 webapp 的 WEB-INF/classesWEB-INF/lib/*.jar 加载,而不是尝试从 Tomcat 的 lib/ 目录为所有应用程序加载它。显然,您需要确保您的 org/thejarbar/web/filters/JSessionFilter.class 位于 WEB-INF/classes 中的 JAR 文件中>WEB-INF/lib.

另请注意,您在过滤器中所做的工作超出了绝对必要的范围:您不需要...

  1. 为每个请求编译一个正则表达式模式(做一次)
  2. 完全使用正则表达式模式(您可以使用简单的子字符串搜索)
  3. 如果您真的不想接受带有嵌入式 session ID 的 URL,您可能应该寻找 ;jsessionid=
  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);
}
}

这应该比您最初发布的要好得多。

关于Java webapp Filter导致Tomcat启动服务器失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11162386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com