Vì vậy, tôi đang cố gắng định cấu hình ứng dụng web của mình mà không cần XML và đi tất cả tuyến đường được chú thích. Tôi có một vài lớp được chú thích với @Configuration và @Component được nhận tự động, nhưng vì một số lý do chú thích @Controller của tôi không được nhận dạng và ánh xạ tới các giá trị @RequestMapping tương ứng của chúng.Spring 3 Cấu hình chú thích Chọn lên @Configuration và @Component nhưng không @Controller
file web.xml của tôi trông giống như vậy:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="com-timbuk2-webapp-compositor"
version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" >
<display-name>timbuk2-webapp-Compositor</display-name>
<!-- Context Parameters -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/conf/log4j-config.xml</param-value>
</context-param>
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.company.webapp</param-value>
</context-param>
<!-- Listeners -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Filters -->
<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>
<filter-name>urlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>commons</param-value>
</init-param>
<init-param>
<param-name>confPath</param-name>
<param-value>/WEB-INF/conf/urlrewrite-config.xml</param-value>
</init-param>
</filter>
<!-- Filter Mappings -->
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>urlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Servlets -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<!-- Servlet mappings -->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
</web-app>
lớp @Configuration chính của tôi trông giống như vậy:
package com.company.webapp.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
@Configuration
public class ApplicationConfiguration
{
@Bean
public ReloadableResourceBundleMessageSource messageSource()
{
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("/WEB-INF/resources/messages");
messageSource.setCacheSeconds(0);
return messageSource;
}
@Bean
public InternalResourceViewResolver viewResolver()
{
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
My @Controller và @Component lớp đều sống dưới cùng một gói. Ví dụ: đây là lớp @Controller từ ứng dụng của tôi:
package com.company.webapp.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping(value = "/render")
public class RenderController
{
private final Logger logger = LoggerFactory.getLogger(getClass());
@RequestMapping(method = RequestMethod.GET)
public ModelAndView handleGet(BindingResult bindingResult)
{
... eventually return a ModelAndView object...
}
}
Vì vậy, để nhắc lại, các lớp @Controller của tôi không được ánh xạ tới URL tôi chỉ định. Khi ứng dụng khởi động hoặc tải lại trong môi trường tomcat cục bộ của tôi, tôi không nhìn thấy đầu ra của giao diện điều khiển "Ánh xạ URL"/render "thông thường".
Bất cứ ai có thể cho tôi biết những gì tôi đang thiếu có thể ngăn không cho các lớp được chú thích @Controller của tôi không được tìm thấy và đăng ký không?
Bạn thêm một basename duy nhất: messageSource.setBasename ("/ WEB-INF/resources/messages"); Cách thêm nhiều tên nền với messageSource.setBasenames()? Nó nói mảng của các basenames, nhưng tôi không chắc chắn làm thế nào để đặt một mảng trong param. – Rihards