2011-11-11 104 views
0

我正在嘗試使用Spring MVC編寫Web應用程序。我在web.xml配置映射網址有些是在我的代碼:Spring mvc web.xml錯誤

@Controller 
@RequestMapping(value = "app") 
public class AjaxHandler { 
    /** 
    * Instance of Logger 
    */ 
    private static final Logger logger = Logger 
     .getLogger(app.web.AjaxHandler.class); 

    @RequestMapping(value = "/tags", method = RequestMethod.GET) 
    public @ResponseBody 
    String tagsRecommender(String token) { 
     return "Some tag"; 
    } 

} 

但是當我把Spring MVC的映射在我的web.xml,這不加載頁面,但只是顯示404錯誤。

<servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

如果我刪除它,它不映射的URL,所以我不能訪問app/tags

配置web.xml的正確方法是什麼?

這裏是我的完整web.xml

<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 

<context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>/WEB-INF/log4j.xml</param-value> 
</context-param> 
<listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
</listener> 

<filter> 
    <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<!-- Handles all requests into the application --> 
<servlet> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/app-servlet.xml 
     </param-value> 
    </init-param>  
    <load-on-startup>1</load-on-startup>   
</servlet> 

<servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

這是app-servlet

<!-- Scans the classpath of this application for @Components to deploy as 
    beans --> 
<context:component-scan base-package="apptag.web" /> 

<!-- Configures the @Controller programming model --> 
<mvc:annotation-driven /> 

<!-- Forwards requests to the "/" resource to the "welcome" view --> 
<mvc:view-controller path="/" view-name="index" /> 

<!-- Handles HTTP GET requests for /resources/** by efficiently serving 
    up static resources in the ${webappRoot}/resources/ directory --> 
<mvc:resources mapping="/resources/**" location="/resources/" /> 

<!-- Saves a locale change using a cookie --> 
<bean id="localeResolver" 
    class="org.springframework.web.servlet.i18n.CookieLocaleResolver" /> 

<!-- Application Message Bundle --> 
<bean id="messageSource" 
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basename" value="/WEB-INF/messages/messages" /> 
    <property name="cacheSeconds" value="0" /> 
</bean> 

<!-- Resolves view names to protected .jsp resources within the /WEB-INF/views 
    directory --> 
<bean 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WebContent/WEB-INF/views/" /> 
    <property name="suffix" value=".html" /> 
</bean> 
+1

啓動日誌中是否有任何錯誤? –

回答

1

你記錄的聲明來看,我認爲你的AjaxHandler類是在app.web包。但是,您將您的app-servlet.xml設置爲僅在apptag.web中進行掃描。那可能是Spring爲什麼沒有找到控制器。

解決方案是添加或更改爲<context:component-scan base-package="app.web" />