【发布时间】:2014-05-06 12:16:04
【问题描述】:
我正在使用 Spring 3.2 版开发我的第一个应用程序。
似乎我已经检查了很多次,但是在尝试获取 localhost:8080/MakeAwayTickets/ 或 localhost:8080/MakeAwayTickets/index 时我只收到 404。控制器甚至没有被加载,因为我没有看到它的构造函数的任何输出。
但是,正在加载 css 和 js 目录下的文件,例如 localhost:8080/MakeAwayTickets/css/dashboard.css。
日志包含以下内容:
2014-05-06T15:56:33.031+0400|INFO: visiting unvisited references
2014-05-06T15:56:33.446+0400|INFO: WebModule[null] ServletContext.log():No Spring WebApplicationInitializer types detected on classpath
2014-05-06T15:56:33.783+0400|SEVERE: log4j:WARN No appenders could be found for logger (org.springframework.web.context.support.StandardServletEnvironment).
2014-05-06T15:56:33.783+0400|SEVERE: log4j:WARN Please initialize the log4j system properly.
2014-05-06T15:56:34.013+0400|INFO: WebModule[null] ServletContext.log():Initializing Spring FrameworkServlet 'appServlet'
2014-05-06T15:56:35.017+0400|INFO: Loading application [MakeAwayTickets] at [/MakeAwayTickets]
2014-05-06T15:56:35.081+0400|INFO: MakeAwayTickets was successfully deployed in 6,888 milliseconds.
我在配置中有以下内容:
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>MakeAwayTickets</display-name>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/root-context.xml
</param-value>
</context-param>
<filter>
<filter-name>charsetFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
servlet-context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<annotation-driven />
<resources mapping="/css/**" location="/css/" />
<resources mapping="/bootstrap/**" location="/bootstrap-3.1.1-dist/" />
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/pages/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:annotation-config />
<context:component-scan base-package="org.badcoding.spring.controller" />
</beans:beans>
这里是控制器类:
package org.badcoding.spring.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.badcoding.dao.interfaces.TicketsDAO;
import org.badcoding.spring.form.IndexSearch;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class IndexController {
public IndexController() {
System.out.println("here");
}
// @Autowired
// private TicketsDAO ticketsDAO;
@RequestMapping("/index")
public String index() {
return "index";
}
@RequestMapping("/")
public String root() {
return "redirect:/index";
}
@RequestMapping(value = "/index_search", method = RequestMethod.GET, headers="myHeader=myValue")
public String list_flights(@PathVariable String city_out, @PathVariable String city_in, @PathVariable String company, @PathVariable String date0, @PathVariable String date1, Model model) {
model.addAttribute("integer", 666);
return "index_search";
}
}
我真的需要这方面的帮助。
更新: 添加后
<beans:bean class="org.badcoding.spring.controller.IndexController"/>
我收到 ClassNotFoundException 的 servlet 配置。
【问题讨论】:
-
如果在
@RequestMapping("/index")之后添加@ResponseBody会发生什么情况。有用吗? -
/WEB-INF/pages/下是否存在index.jsp? -
@geo 不,没有变化。
-
如果您刚开始使用 Spring,我强烈建议 (1) 使用当前版本 (4.0),(2) 使用基于 Java 的配置而不是 XML,以及 (3) 使用 Spring引导以处理所有标准配置和接线,同时学习如何使用控制器和其他特定于应用程序的工具。
-
projects.spring.io/spring-boot 有一些入门指南。请注意,如果您开始使用 Spring 等主要 Java 组件,则需要使用为您管理依赖项的构建工具,例如 Maven 或 Gradle。他们中的任何一个都知道如何解析、下载和附加任何已发布的 Spring 发布版本。
标签: java spring spring-mvc