我是Spring的新手。我研究了涵盖网络流程的tutorial部分。我的最终目标是使用Spring在遗留servlet webapp中实现新功能,然后逐步替换现有代码,使servlet webapp成为Spring webabb。
因此,为此,我决定再次浏览本教程的Web流程部分,在遗留servlet应用程序的开发副本中更改名称以使用Spring创建我自己的第一个“hello world”屏幕。
我的问题是,当我将Spring的servlet映射放入我的web.xml时,我会让404s试图进入我的登录页面。
我制作了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的初学者,所以我不确定在哪里看。
答案 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");