Java 在Tomcat中触发内部ServletRequest

Java 在Tomcat中触发内部ServletRequest,java,tomcat,servlets,request,Java,Tomcat,Servlets,Request,我正在使用Quartz为web应用程序安排后台任务。其中一些任务只是针对同一web应用程序发出请求 我希望避免依赖于任何类型的网络设置(例如,如果在数据中心内发出具有我自己域名的请求,则可能无法正确路由)。是否有一个JavaAPI来触发ServletRequest并让Tomcat在内部处理它(不涉及任何实际的HTTP) 我仍然希望将工作包装到Servlet请求中,而不是直接调用后台任务的Java代码,这样我就可以返回到常规HTTP请求作为配置选项 Tomcat特定的代码是可以接受的。有趣的概念。

我正在使用Quartz为web应用程序安排后台任务。其中一些任务只是针对同一web应用程序发出请求

我希望避免依赖于任何类型的网络设置(例如,如果在数据中心内发出具有我自己域名的请求,则可能无法正确路由)。是否有一个JavaAPI来触发ServletRequest并让Tomcat在内部处理它(不涉及任何实际的HTTP)

我仍然希望将工作包装到Servlet请求中,而不是直接调用后台任务的Java代码,这样我就可以返回到常规HTTP请求作为配置选项


Tomcat特定的代码是可以接受的。

有趣的概念。这方面当然没有标准的API,我也不认为有发布的Tomcat特定机制

你会收到什么样的请求?servlet?JSP?弹簧控制器?根据这一点,以及目标所做的事情,您可能能够直接调用目标,而不是通过容器路由它。但是如果您有JSP、过滤器堆栈和其他复杂的servlet,这可能不是一个选项


如果您使用的是Spring,那么您的Quartz作业可以直接与控制器连接,这将是您喜欢的简单操作。你有那么幸运吗?

你想从计划的任务中得到什么?标准的web服务器行为是获取HTTP请求并使用特定数据进行响应。我假设您的任务不需要这些,也就是说,您只想执行web应用程序中驻留的代码库的特定处理


如果上述假设是正确的,您可以将servlet/jsp逻辑与业务处理逻辑解耦,并直接从计划任务调用业务逻辑层类。

使用URLConnection,或者使用localhost/127.0.0.1的apache commons httpclient-因此它将被正确路由。

servlet代码承担了太多的责任。将其重构为普通Java类,并让任务类访问它(或者反过来,让它访问任务类)。如有必要,请明智地使用
ServletContext


如果您对您认为这就是解决方案的实际问题和功能需求做更多的阐述,我们可能会提出更好的建议。

我想浏览一个URL(而不是直接调用控制器),以便以后可以返回常规HTTP。标准API:如果我自己在一个servlet中,我想我可以执行requestDispatcher.include(fakedRequest,fakedResponse)。但我不是。这假设服务器正在监听127.0.0.1,但情况并非总是如此。“实际问题和功能需求”:我真的不需要这样做,我只是想知道我是否可以。您可以使用
java.net.URLConnection
或Apache Commons HttpClient来实现,正如多次提到的那样。然而,整个画面有点异味,我只是想在为时已晚之前警告一下。