集成Spring 2.5和传统的Servlet应用程序

时间:2012-02-13 20:09:52

标签: java servlets spring-mvc

我是Spring的新手。我研究了涵盖网络流程的tutorial部分。我的最终目标是使用Spring在遗留servlet webapp中实现新功能,然后逐步替换现有代码,使servlet webapp成为Spring webabb。

因此,为此,我决定再次浏览本教程的Web流程部分,在遗留servlet应用程序的开发副本中更改名称以使用Spring创建我自己的第一个“hello world”屏幕。

我的问题是,当我将Spring的servlet映射放入我的web.xml时,我会让404s试图进入我的登录页面。

  • 我正在使用WebLogic 9.2
  • 我转换了我的webapp的目录树,以模仿Spring webapps使用的布局
  • 我将spring.jar和spring-mvc.jar复制到我的WEB-INF / lib

我制作了web.xml的简化版本,其中只有一个遗留servlet(用于登录页面)和Spring。它适用于Spring注释掉的东西,但不是其他。 在这里,我的WEB-INF / web.xml为“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 / 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映射时,这个问题就消失了。

我是Spring的初学者,所以我不确定在哪里看。

4 个答案:

答案 0 :(得分:1)

问题可能出在<url-pattern>中的web.xml。您不能使用“.jsp”作为映射的扩展程序。

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

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

答案 1 :(得分:1)

您的目标网页是什么? /hello.htm?您刚刚将htm扩展程序的所有内容映射到调度程序,但您只有一个处理hello.htm的控制器。如果您尝试访问404,则应获取/index.htm。更改映射或为其他URL创建控制器。

但是,如果我是你,我会在Spring 3.0中使用Spring注释来配置Web应用程序。它简单得多。

答案 2 :(得分:0)

正如其他人所提到的,使用更容易配置的Spring 3.0会更好。既然你已经开始这样做了,我会提出一些想法。您需要使用SimpleUrlHandlerMapping之类的东西,它负责将您的url模式解析为适当的控制器。看看这个春季参考文档

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

希望这有帮助。

答案 3 :(得分:0)

在ModelAndView视图名称上尝试使用正斜杠:

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