我是 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/