2012-02-13 43 views
2

我是Spring的新手。我通过涵盖网络流量的这个tutorial的部分工作。我的最终目标是使用Spring在旧版servlet webapp中实现新功能,然后逐渐将现有代码制作成Spring webabb。因此,为了这个目的,我决定再次浏览教程的Web流程部分,在旧版servlet应用程序的开发副本中更改名称以使用Spring创建我自己的第一个“hello world”屏幕。集成Spring 2.5和旧版Servlet应用程序

我的问题是,当我把Spring的servlet映射放到我的web.xml中时,我得到404s试图到达我的着陆页。

  • 我使用的WebLogic 9.2
  • 我将我的webapp的目录树,模仿春的webapps使用
  • 我复制的spring.jar和弹簧mvc.jar到我的WEB-INF布局/ lib

我制作了我的web.xml的简化版本,只有一个旧的servlet(用于登录页面)和Spring。它与Spring的东西一起工作,但没有其他。 这,为 “ABC” 的webapp

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 


    <servlet> 
    <servlet-name>LogIn</servlet-name> 
    <servlet-class> 
      com.utilities.LogIn 
    </servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>LogIn</servlet-name> 
    <url-pattern>/home</url-pattern> 
    </servlet-mapping> 


    <servlet> 
    <servlet-name>abc</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>abc</servlet-name> 
    <url-pattern>*.htm</url-pattern> 
    </servlet-mapping> 



    <!-- Welcome File List --> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 


</web-app> 

我的WEB-INF/web.xml中这是我的WEB-INF/ABC-servlet.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"> 

    <!-- the application context definition for the NSD webapp DispatcherServlet --> 

    <beans name = "/hello.htm" class = "com.somecompany.web.HelloController"/> 

</beans> 

这里是我的基本控制器代码:

package com.somecompany.web; 

import org.springframework.web.servlet.mvc.Controller; 
import org.springframework.web.servlet.ModelAndView; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import java.io.IOException; 

import org.apache.log4j.Logger; 

public class HelloController implements Controller { 

    protected static final Logger logger = Logger.getLogger(HelloController.class); 

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     logger.info("Returning view for CBS Search ...."); 

     return new ModelAndView("hello.jsp"); 
    } 

}// end class 

同样,我的问题是不是与控制器或视图(jsp)...还没有。现在,当我在我的web.xml中包含Spring servlet映射时,我无法到达我的着陆页,我得到了404。当我抽出Spring servlet映射时,问题就消失了。

我是一个初学春天的初学者,所以我不确定去哪里看。

+0

嗨,大家好。我纠正了我的错误。仍然没有快乐。我开始赏金。获胜者获得50点我的声望点数。 – Steve 2012-02-16 20:15:44

+0

使用Spring 2.5而不是3.0的任何原因? 3.0中的基于注释的配置比在2.5中配置bean更加简单和容易。 – gigadot 2012-02-21 17:10:02

回答

1

该问题可能与您的web.xml中的<url-pattern>有关。您不能使用“.jsp”作为您的映射扩展名。

关于this thread中的低级原因有一些非常详细的讨论...但长短不一,它的“*.jsp”文件扩展名对于底层Java servlet规范是特殊的。你试图让Spring劫持。这就是为什么您链接的教程使用“* .htm”代替。

尝试将<url-pattern>改为web.xml为其他内容(例如*.htm),然后查看是否可以使用该扩展名提取测试网址。

+0

我试过了。我仍然有同样的问题。我得到一个404甚至试图到达我的着陆页/欢迎文件 – Steve 2012-02-13 21:23:32

+0

您是否更改了要在“WEB-INF/abcspring-servlet.xml”中匹配的bean名称以及您的Controller的返回值? – 2012-02-13 22:30:55

+0

我刚刚过去了。我注意到在上面的示例中,我有一条可能会让人困惑的XML注释。我删除了评论。仅供参考,我模糊了我在工作中的名字,为了安全起见。 – Steve 2012-02-14 21:47:06

1

你的着陆页是什么? /hello.htm?你已经将htm扩展映射到调度器,但你只有一个控制器处理hello.htm。如果您尝试访问/index.htm,您应该得到404。更改您的映射或为其他网址创建控制器。但是,如果我是你,我会在Spring 3.0中使用Spring批注来配置Web应用程序。它更简单。

+0

我同意。我发现了一个简单的Spring 3.0 MVC教程,我能够工作。我将重新发布这个问题,将Spring 3.1集成到一个遗留的Servlet应用程序中。谢谢回答。 – Steve 2012-02-22 20:58:53

0

正如其他人所提到的,使用Spring 3.0更容易配置。既然你已经开始这个,我正在给我一些想法。你需要使用像SimpleUrlHandlerMapping这样的东西来解决你的url模式到相应的控制器。看看这个春季参考文件

http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html

希望这会有所帮助。

+0

我同意。我发现了一个简单的Spring 3.0 MVC教程,我能够工作。我将重新发布这个问题,将Spring 3.1集成到一个遗留的Servlet应用程序中。谢谢回答。 – Steve 2012-02-22 20:59:10

0

尝试在您的ModelAndView视图名正斜杠:

return new ModelAndView("/hello.jsp"); 
相关问题