【问题标题】:Controller mapping works but jsp giving 404控制器映射有效,但 jsp 给出 404
【发布时间】:2014-09-03 10:25:46
【问题描述】:

我有一个 jersey webapp 正在运行,我正在尝试将 spring mvc 集成到其中。几个断点后,我发现当控制器请求映射可访问但 jsp 给出 404 时。这里的任何帮助都会非常有帮助。

这是我的调度程序视图解析器

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

我要加载的 jsp 是 login,它在路径 /WEB-INF/jsp/login.jsp 处可用

我的 jersey servlet 映射设置为默认映射器/

<servlet-mapping>
    <servlet-name>Jersey-Web</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

我已将 spring 调度程序设置为按照以下模式进行调度

<servlet-mapping>
    <servlet-name>mvcDispatcher</servlet-name>
    <url-pattern>/f/login</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>mvcDispatcher</servlet-name>
    <url-pattern>/static/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>mvcDispatcher</servlet-name>
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>mvcDispatcher</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>mvcDispatcher</servlet-name>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>mvcDispatcher</servlet-name>
    <url-pattern>/WEB-INF/jsp/login.jsp</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>mvcDispatcher</servlet-name>
    <url-pattern>/login.jsp</url-pattern>
</servlet-mapping>

当我访问/f/login 时,我看到相应的控制器正在被触发。我像这样从我的控制器返回ModelAndView

ModelAndView mav = new ModelAndView( "login" );
return mav;

我想要达到什么目的?

我希望通过 mvcDispatcher 提供所有 jsp 和 url 模式中提到的路径,并且我希望通过 jersey servlet 提供任何其他请求

我尝试了什么?

  • 我尝试将 spring-mvc 设置为映射到默认路径 /,正确地拒绝说不允许使用两个默认 servlet

  • 我尝试将 jersey servlet 模式设置为 /* 并将 spring-mvc 设置为 /*.jsp 但正如 jsp 规范所提到的那样,模式 *.jsp/* 覆盖

编辑

重申一下我的默认 servlet 不是 dispatcherServlet,我的默认 servlet 是 jersey servlet

【问题讨论】:

  • 我希望所有 jsp 的 ... 通过 spring mvc 调度程序提供服务 - 这应该如何工作?
  • 抱歉,我在上面的代码中使用的是 mvcDispatcher servlet。编辑了问题
  • JSP 由 jsp servlet 提供。 DispatcherServlet 只转发给一个 jsp,但不传递它。所以将 DispatcherServlet 映射到 *.jsp 没有意义。
  • 我尝试删除所有 *.jsp 标记,但看起来没有任何区别。即使调用控制器,它仍然给我一个 404 for jsp。

标签: java spring jsp spring-mvc servlets


【解决方案1】:

正如 zeroflagL 在其comment 中所述,JSP 资源(默认情况下)由 Servlet 容器的 JSP Servlet 提供服务,该 JSP 执行编译和渲染。 Servlet 容器将此 JSP Servlet 映射到 *.jsp。如果您使用 mvcDispatcher 覆盖该映射,您将失去所有功能并使 DispatcherServlet 处理相应的请求。但是您的DispatcherServlet 不知道如何处理这些。

摆脱那些*.jsp 映射。

【讨论】:

  • 尝试删除 *.jsp 映射但没有成功。尽管控制器请求映射有效,但它仍然提供 404
  • @zolo 你是否删除了所有这些,甚至是&lt;url-pattern&gt;/WEB-INF/jsp/login.jsp&lt;/url-pattern&gt;?如果你检查你的 Spring 日志,你会看到 DispatcherServlet 抱怨,如果它是处理 forward 请求的那个。
猜你喜欢
  • 2012-04-06
  • 1970-01-01
  • 2018-05-10
  • 2012-12-22
  • 2018-01-02
  • 2011-10-03
  • 2014-10-04
  • 2013-08-17
  • 1970-01-01
相关资源
最近更新 更多