【问题标题】:spring mvc view not renderedspring mvc视图未呈现
【发布时间】:2013-05-22 12:56:17
【问题描述】:

我是 spring mvc 的初学者,正在尝试创建非常基本的 Web 应用程序流程。我有 result.jsp,通过单击提交应该呈现 submit.jsp。我可以看到控制器被调用,但我的视图 submit.jsp 没有被呈现。它给了我HTTP 404 状态错误,tomcat 中没有日志。有人可以帮我弄清楚这里出了什么问题。

我还观察到,在运行应用程序时,我被定向到
testspring/,在那里我看到了我的 result.jsp。我宁愿希望它在运行应用程序时是
testspring/result.jsp。请原谅我的无知。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    <display-name>testspring</display-name>
    <servlet>
        <servlet-name>frontcontrol</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>frontcontrol</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

frontcontrol-servlet.xml

<context:component-scan base-package ="com.shell.spring.testspringapp">
</context:component-scan>

<bean id ="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />      
</bean>

控制器类- Frontcontrol

@Controller
public class Firstcontrol {

    @RequestMapping(value="/")
    public ModelAndView invokeme(Model m) {

        ModelAndView mav=new ModelAndView();
        mav.setViewName("result");
        System.out.println("In invoke me method");
        return mav;
    }

    @RequestMapping(value="/submit" ,method=RequestMethod.GET)
    public String submit(Model m) {
        System.out.println("In submitmethod");
        return "submit";
    }
}

【问题讨论】:

  • 在您的 web.xml 文件中将 url-pattern 的 '/' 替换为 '*'。
  • *.* 替换 / 只是为了测试,如果它工作正常并且你想要类似的 URL 模式ABC.HTM 然后放 *.HTM
  • @AbhendraSingh 不走运。当我运行该应用程序时,它给了我 http 404 错误。
  • @JOHND 它给了我同样的 http 404 错误
  • 查看您的第一个请求映射 @RequestMapping(value="/")

标签: spring model-view-controller


【解决方案1】:

正如 cmets 中提到的 - 你应该更新你的 web.xml 以便它映射 * 到你的 servlet:

<servlet-mapping>
    <servlet-name>frontcontrol</servlet-name>
    <url-pattern>*</url-pattern>
</servlet-mapping>

如果您想限制可用的映射,您可以稍后进行调整,但现在可以这样做。

之后,我们需要查看result.jsp(我从您的问题中了解到,当您点击 web 应用程序的根目录时,此页面呈现正常,因此此控制器调用和视图正常)。但是,您可以检查一些有根据的猜测:

  • 您按下的按钮上的 URL 是什么?是相对的吗?例如是“submit”还是“/submit” - 后者会切断您的应用程序上下文。例如,如果您的应用程序的根目录是 http://localhost:8080/testspring,那么使用 URL /submit 会将您定向到 http://localhost:8080/submit - 所以不要点击您的 Spring 应用程序,而只会立即 404
  • 提交按钮是什么元素?它是按钮还是href?如果是按钮,您使用的是什么方法?这需要匹配控制器上的方法 - 在控制器上,您仅匹配 GET 对 url 提交的请求 - 如果您的按钮是 POSTing,则不会点击此方法。

回答你的最后一点 - 是的,它将呈现为 testspring/ 而不是 testspring/result.jsp - 这是因为您使用的是 mvc 框架,而不仅仅是点击系统上的文件 - 例如该请求已到达由控制器处理的根 url (/),该控制器依次呈现视图 - 视图可以是一个 jsp 或由多个文件(使用瓷砖等)或其他东西组成 - 你不是“直接点击”jsp,而不是在提供路径“/”时控制器正在使用jsp

【讨论】:

  • 非常感谢 :) 现在只需保留 url 模式“/”即可。问题是我的表单操作引用不正确:(。感谢您对渲染视图的简洁解释。
猜你喜欢
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 2011-07-19
  • 2018-12-11
  • 1970-01-01
  • 2017-09-14
  • 2013-09-28
  • 1970-01-01
相关资源
最近更新 更多