第一个春季项目出现问题

问题描述

| 我刚从Striped切换到Spring,但是我的第一个项目遇到了问题, 基本上我从服务器上获取404。 奇怪的是,我一步一步地遵循了本书中的所有步骤。 我使用Eclipse,Tomcat 6和Spring 2.5 我的项目的结构如下:  src>   controllers(package)> SpringTestController(implements controller).....然后   ...... Web内容> .jsp(文件夹)> hello.jsp .....然后.... web-内容> web-inf> SpringTest-servlet.xml和web.xml 在lib里面,我有9个必要的jar。 我的控制器:
public class SpringTestController implements Controller{

public ModelAndView handleRequest(HttpServletRequest arg0,HttpServletResponse arg1) throws Exception {




    return new ModelAndView(\"jsp/hello.jsp\");
}
} 我的SpringTest-servet.xml
  <?xml version=\"1.0\" encoding=\"UTF-8\"?>

<beans xmlns=\"http://www.springframework.org/schema/beans\"

xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"

xsi:schemaLocation=\"http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd\">

<bean name=\"/hello.htm\" class=\"controllers.SpringTestController\"/>

</beans>
我的web.xml(没有标题可以节省空间)
<servlet>

        <servlet-name>SpringTest</servlet-name>

        <servlet-class>

          org.springframework.web.servlet.dispatcherServlet

        </servlet-class>

        <load-on-startup>1</load-on-startup>

  </servlet>

  <servlet-mapping>

        <servlet-name>SpringTest</servlet-name>

        <url-pattern>*.htm</url-pattern>

  </servlet-mapping>
您认为问题可能在哪里? 我一直在尝试查看文件,但在web.xml旁边“我看不到任何异常”,我对这种流结构非常陌生,因此我真的无法弄清问题所在。 谢谢你的时间     

解决方法

        我对使用bean的name属性来指定URL路径的做法感到怀疑-虽然我肯定这是可能的,但我的答案将告诉您如何使用更传统的方式进行操作。 首先,这是新的SpringTest-servlet.xml:
<bean id=\"helloController\" class=\"controllers.SpringTestController\" />

<bean id=\"urlMapping\" class=\"org.springframework.web.servlet.handler.SimpleUrlHandlerMapping\">
    <property name=\"mappings\">
        <props>
            <prop key=\"/hello.htm\">helloController</prop>
        </props>
    </property>
</bean> 

<bean id=\"viewResolver\" class=\"org.springframework.web.servlet.view.InternalResourceViewResolver\">
    <property name=\"prefix\" value=\"/WEB-INF/jsp/\"/>
    <property name=\"suffix\" value=\".jsp\"/>   
</bean>
您可能会注意到一些事情。我正在使用bean的id属性来定义您的控制器,以便可以在其他地方(您将要看到的urlMapping bean中)对其进行引用。 我定义了一个urlMapping bean,它确实按照您的想法工作-将请求(例如/hello.htm)映射到控制器bean。 我还使用过viewResolver来映射视图名称以查看文件,但是这是个人喜好。由于我现在正在使用视图解析器,因此您的控制器如下所示:
public class SpringTestController implements Controller {
    @Override
    public ModelAndView handleRequest(final HttpServletRequest request,final HttpServletResponse response) throws Exception {
        return new ModelAndView(\"hello\");
    }
}
我不需要将路径放置到视图,因为viewResolver会在其前面加上\“ / WEB-INF / jsp / \”并在末尾添加\“。jsp \”。您可以将前缀更改为存储视图文件的位置,也可以完全不使用它。这是个人喜好,尽管我喜欢使用它:) 很抱歉,如果这个答案与您的风格不符-我试图使其按您的方式工作,并且无法正常工作,所以这就是我通常设置Spring项目的方式(如果我不使用注释)。 希望这可以帮助。