【问题标题】:Spring MVC - generic HTTP handlersSpring MVC - 通用 HTTP 处理程序
【发布时间】:2013-02-15 21:55:07
【问题描述】:

四处搜索,并没有找到明确的答案。

我试图通过我的调度程序 servlet 路由所有 http 请求,然后路由到特定的控制器。最终我希望能够通过中心点处理资源、AJAX 和其他请求。

我目前有 url 映射 /* 来执行此操作。我的控制器使用 @RequestMapping("/[My resource].*") 来捕获我的 .htm 请求。不幸的是,Spring 似乎使用 RequestDispactcher.forward 从 InternalResourceViewResolver 解析 .jsp,然后再次访问前端控制器并最终导致 404 错误。

我的问题是,我能否设置一个通用的 catch all 来处理除常规视图请求之外的任何 HTTP 请求?

HTTP 处理程序必须能够将请求传递到其他服务器并解析内部和外部资源,例如图片、css等

问候, 安迪

问候

【问题讨论】:

    标签: ajax spring model-view-controller servlets resources


    【解决方案1】:

    一个更好的主意是将DispatcherServlet 的servlet 映射更改为/ 而不是/*,这是因为/* 使所有请求都到达此servlet,而不是像您为jsp 也转发,尽管存在用于 jsps 的 JSPServlet 映射,另一方面,/ 映射将默认为仅当未找到请求路径的特定映射时。

    【讨论】:

    • 如果我希望所有请求都通过 DispatcherServlet 怎么办?最终我希望它像这样流动 1. 检查我是否有资源映射,例如控制器,如果不是控制器,则检查它是否是 Ajax 请求,如果不是,则委托给默认 Servlet 获取静态资源。
    • / 的 servlet-mapping 将完全做到这一点 - 只需记住添加 <mvc:default-servlet-handler /> 以处理 webapp 根目录中的静态资源。
    • 不确定 3.2 版是否有问题,但如果我包含默认的 servlet 处理程序,我会收到 404 错误,因为它假定我使用的是 SimpleUrlHandlerMapper 并且找不到匹配项。如果我在 servlet 上下文中添加 DefaultAnnotationHandlerMapper,我会收到一个 500 错误,指出“处理程序没有适配器..”等。非常令人沮丧..!
    • 你没有使用<mvc:annotation-driven/>吗?应该注册正确的handlerAdapters和handlerMappings?
    • 现在好了,在添加验证器/slf4j 依赖项后一切正常。谢谢。
    【解决方案2】:

    将应用 servlet 映射到 web.xml 中的 /。如下图。

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    

    要解析其他资源,请在您的调度程序 servlet xml 中添加以下标记。 这里的资源是包含js、css、图像的文件夹。它存储在 Maven Web 应用程序结构中的 Webcontent 文件夹下。根据您的项目结构进行更改。

    <resources mapping="/resources/**" location="/resources/" />
    

    试试这个。

    【讨论】:

      猜你喜欢
      • 2018-03-20
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      • 2011-03-04
      • 2016-06-05
      • 1970-01-01
      相关资源
      最近更新 更多