春天mvc视图没有呈现

时间:2013-05-22 12:56:18

标签: spring model-view-controller

我是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";
    }
}

1 个答案:

答案 0 :(得分:0)

正如评论中所提到的 - 你应该更新你的web.xml,以便将*映射到你的servlet:

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

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

在那之后,我们需要看到result.jsp(我的问题是你的问题是,当你点击你的webapp的根目录时,这个页面呈现正常,所以这个控制器调用&amp; view是正确的)。但是,你可以检查一些有根据的猜测:

  • 您按下的按钮上的网址是什么?相对吗?例如它是&#34; submit&#34;或者是#34; /submit&#34; - 后者将削减您的应用程序上下文。例如,如果您的应用的根目录是http://localhost:8080/testspring,那么使用网址/submit将引导您http://localhost:8080/submit - 所以不要点击您的春季应用程序,只会立即404;
  • 提交按钮是什么元素?它是按钮还是href?如果是按钮,您使用的是什么方法?这需要与控制器上的方法相匹配 - 在控制器上,您只需匹配针对网址提交的GET请求 - 如果您的按钮为POSTing,则此方法不会被点击。< / LI>

回答你的最后一点 - 是的,它会呈现为testspring/而不是testspring/result.jsp - 这是因为你使用的是mvc框架,而不只是点击系统上的文件 - 例如请求已经命中了由控制器处理的根URL(/),控制器又呈现视图 - 视图可以是一个jsp或由多个文件组成(使用tile等)或其他 - 你是不是&#34;击中&#34;直接使用jsp,而不是控制器在提供路径时使用jsp&#34; /&#34;