问题描述
|
我刚从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项目的方式(如果我不使用注释)。
希望这可以帮助。