java - 集成 Spring 2.5 和遗留 Servlet 应用程序

标签 java servlets spring-mvc

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

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

我的问题是,当我将 Spring 的 servlet 映射放入 web.xml 时,我在尝试访问登陆页面时收到 404 错误。

  • 我使用的是 WebLogic 9.2
  • 我转换了 web 应用程序的目录树以模仿 Spring web 应用程序使用的布局
  • 我将 spring.jar 和 spring-mvc.jar 复制到我的 WEB-INF/lib 中

我制作了 web.xml 的简化版本,其中只有一个遗留 servlet(用于登录页面)和 Spring。它适用于注释掉的 Spring 内容,但不适用于其他情况。 这就是我的“abc”网络应用程序的 WEB-INF/web.xml

<?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>

这是我的基本 Controller 的代码:

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 

再说一次,我的问题不在于 Controller 或 View (jsp)......还没有。现在,当我在 web.xml 中包含 Spring servlet 映射时,我无法访问登录页面,并收到 404 错误。当我拉出 Spring servlet 映射时,这个问题就消失了。

我是 Spring 的新手,所以我不知道该去哪里。

最佳答案

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

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

尝试更改您的<url-pattern>web.xml到其他内容(例如 *.htm ),然后看看是否可以使用该扩展名提取测试 URL。

关于java - 集成 Spring 2.5 和遗留 Servlet 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9267293/

相关文章:

java - 用DSL KStream向KTable转换的Kafka墓碑

java - 在 Openshift 上部署 war 文件后,找不到合适的驱动程序错误

java - 如何从 tomcat 的 lib 目录加载类路径资源?

java.io.IOException : Broken pipe

在 Controller 方法之前调用 Spring mvc 验证异常处理程序

ajax - 从Spring Controller返回ajax调用的错误消息字符串的最佳实践是什么?

java - 主要方法如何工作?

java - 如何在 repaint() 之后保持在 Graphics g 中绘制的文本

java - Spring中的循环依赖

java - Tomcat 8.5 WEB-INF 内容可访问 URL