1

作为一个对 Spring 和 OSGi 完全陌生的开发者,时隔许久回到 Tomcat,我什至不知道我是否可以正确地提出这个问题。但我希望有人能够理解我被困在哪里以及我应该如何继续。

该设置包括 Equinox OSGi 容器中的 Tomcat 7 包。一个包提供了“ MainDispatcherServlet”,它扩展了org.springframework.web.servlet.DispatcherServlet. 其他服务包在监听org.springframework.web.servlet.mvc.Controller的 OSGi 白板中注册实例。提供了一个 API 来将 url-patterns 映射到注册的控制器,然后它使用它来识别单个请求的处理程序。服务包通常实现 javax ,并将其包装起来以进行注册。MainDispatcherServletMainDispatcherServletSimpleUrlHandlerMappingGenericServletServletWrappingController

这很顺利。现在我需要以下

静态资源

在这些包中调度静态资源,如图像和 jsps(不知道它们是否被认为是静态的)。

在 SO 上搜索似乎可以通过<mvc:resources>客户端捆绑包中的一些魔法来完成,即使我不太清楚确切的 xml。但是,如果我理解正确,请求将不会通过MainDispatcherServlet,这是一项要求。

所以我现在采取的方法是使用 aorg.apache.catalina.servlets.DefaultServlet并将其包装在 Controller 中,如上所述。这是实现这一目标的好方法吗?这里的问题是DefaultServlet需要一个ServletContext,而我没有一个可以给它。

有没有简单的方法来创建一个ServletContext我可以注入控制器的?

转发到静态资源

此外,我需要Servlet在同一个客户端包中使用另一个forwardjsps才能使用.RequestDispatcherServletContext

总之,是否可行(即使不优雅)?如果是这样,我该如何创建 ServletContext?如果这不可行,还有什么选择?

这一切都相当令人生畏。虽然我不是(不能:))要求实现原型,但我会更喜欢一个简洁的指令,比如“在 Y 中注入 X 并用 Z 包装它,你就准备好了”。

4

1 回答 1

0

Amdatu 开源项目有一个捆绑包,可让您轻松地从捆绑包中提供静态资源。它使用扩展器模式,这意味着您只需向捆绑包的清单添加一些信息:

X-Web-Resource-Version: 1.0
X-Web-Resource: path/to/resources

转到此页面 [1] 并向下滚动以获取有关它的更多信息。当然,您需要部署 Amdatu 的“资源处理程序”包及其依赖项,可以在此存储库中找到 [2]。

[1] http://amdatu.org/components/web.html

[2] http://repository.amdatu.org/snapshot/org.amdatu.web.resourcehandler/org.amdatu.web.resourcehandler-1.0.2.jar

于 2013-06-10T20:11:11.947 回答