【问题标题】:Spring MVC without annotation - HTTP 404 page not found error coming没有注释的 Spring MVC - HTTP 404 page not found 错误来了
【发布时间】:2016-10-16 02:06:01
【问题描述】:

我正在尝试在不使用注释的情况下编写一个简单的 Spring MVC Web 应用程序。但是,当我访问特定 URL 时,我收到 HTTP 404 错误。相关代码sn-p如下:

为前端控制器完成 web.xml 更改:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee"     xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.4">
  <display-name>POCProject</display-name>
  <servlet>
    <servlet-name>FrontController</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
  <servlet-mapping>
      <servlet-name>FrontController</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

servlet 名称是 --> FrontController

因此,有以下配置文件 --> FrontController-servlet.xml

<beans ...>

   <bean id="HandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

   <bean name="/userdetails" class="com.example.controllers.UserDetailsController"/>

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

在上述配置文件中,Handler映射类为--> org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping

URL /userdetails 的控制器类是 --> com.example.controllers.UserDetailsController

这个控制器的代码如下:

public class UserDetailsController extends AbstractController {

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse res) throws Exception {

    ModelAndView mw = new ModelAndView("userInfo");
    return mw;
    }
}

因此,对于带有/userdetails 的请求,控制器应该发送视图userInfo.html

但是,当我调用它时,我收到 HTTP 404 错误。

我已经在 Apache tomcat 中部署了这个,下面是我在 tomcat 控制台中得到的消息。

WARNING: No mapping found for HTTP request with URI [/POCProject/WEB-INF/userInfo.html] in DispatcherServlet with name "FrontController"

关于我在这里缺少什么的任何意见?

【问题讨论】:

  • 那么你已经成功配置了spring部分,因为错误是没有创建WEB-INF/userInfo.html,DispatcherServlet、控制器和解析器都处理了请求。首先,文件 userInfo.html 是否存在于 WEB-INF 文件夹中?如果是这样,重定向到 html 文件是不常见的,因为它们不会传递模型,因此您应该在 POC 中使用 jsp 文件。
  • &lt;mvc:default-servlet-handler /&gt; 添加到您的配置中。
  • @SergeBallesta:感谢您的回复,确实信息丰富。 .html 文件存在于 WEB-INF 中。我有疑问,为什么这不能是一个简单的 HTML 文件? HTML不是一种视图技术吗?我从 .html 更改为 .jsp (并更改了配置),并且工作正常。现在我有这个疑问,为什么我们不能通过html页面?

标签: spring spring-mvc tomcat servlets


【解决方案1】:

InternalResourceViewResolver 的 javadoc 说它是一个(强调我的):

同一 Web 应用程序中 JSP 或其他资源的包装器。将模型对象公开为请求属性并转发请求到指定的资源 URL使用 RequestDispatcher

JSP 由 Tomcat(或任何 servlet 容器)在内部转换为真正的 servlet,这是一种适合转发的资源。但是一个简单的 HTML 不是。

这意味着 Spring InternalResourceViewResolver 不能使用 HTML 视图,您必须将它们转换为 JSP 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    相关资源
    最近更新 更多