2017-02-16 7 views
1

Я переношу приложение struts 2 в Spring Boot. Я определил StrutsPrepareAndExecuteFilter внутри моего загрузочного класса приложения.Spring Boot with Struts Filter и Tomcat

@SpringBootApplication 
public class ClearApplication extends SpringBootServletInitializer { 

    public static void main(String[] args) { 
    SpringApplication.run(ClearApplication.class, args); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
    return application.sources(ClearApplication.class); 
    } 

    @Bean 
    public FilterRegistrationBean filterRegistrationBean() { 
    Collection<String> urlPatterns = new ArrayList<>(); 
    urlPatterns.add("/*"); 
    FilterRegistrationBean registrationBean = new FilterRegistrationBean(); 
    StrutsPrepareAndExecuteFilter struts = new StrutsPrepareAndExecuteFilter(); 
    registrationBean.setFilter(struts); 
    registrationBean.setName("strutsFilter"); 
    registrationBean.setOrder(1); 
    registrationBean.setUrlPatterns(urlPatterns); 
    return registrationBean; 
    } 
} 

Конфигурация П файл ниже

<groupId>com.study.pack</groupId> 
<artifactId>clear</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>war</packaging> 
<name>clear</name> 
<description>Demo project for Spring Boot</description> 

Моего класс действие имеет одну простых распорки действия и другое JSon действие

@Action(value = "welcome", results = { @Result(name = "success", location = "result.jsp") }) 
public String execute() { 
    return "success"; 
} 

@Action(value = "users", results = { @Result(name = "success", type = "json", params = { "root", "userList" }) }) 
public String users() { 
    userList = new ArrayList<>(); 
    userList.add(new User("Carl", "15", "M")); 
    userList.add(new User("Rick", "30", "M")); 
    userList.add(new User("Michonne", "26", "F")); 
    return "success"; 
} 

Когда я развертывание приложения на моем локальном сервере Tomcat сервер. Я в состоянии получить доступ действия URLS

http://localhost:8080/clear/welcome

http://localhost:8080/clear/users

Но, когда я запустить приложение в STS (или с помощью команды Maven), я получаю стандартную ошибку распорок при доступе к указанным выше URL-адресам

Для пространства имен нет действий [/ clear] и имени действия [users], связанного с контентом path [].

В application.properties имеет следующие свойства

server.contextPath=/clear 
server.port=8080 

Я пропускаю любую другую конфигурацию, чтобы заставить его работать?

Update:

Как @ Роман-C предложил, я проверил журналы Запуск сервера Tomcat и контекста идентичны.

Внешний сервер Tomcat

[ost-startStop-1] o.a.c.c.C.[.[localhost].[/clear]   : Initializing Spring embedded WebApplicationContext 

Встроенный сервер Tomcat

[ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/clear] : Initializing Spring embedded WebApplicationContext 

The application.properties находится в папке

src/main/resources  

до сих пор нет удачи. Как бы то ни было, аннотации struts игнорируются.

Я совершил исходный код в Git https://github.com/creativekarma/clear

+0

Bala, у вас не везло в этом вопросе? Благодарю. –

+0

К сожалению, я этого не сделал. – Bala

ответ

1

По умолчанию Spring ботинка инициализирует встроенный в кот корневого контекста приложения. Таким образом, вы можете получить доступ к своей заявке от /.

URL-адрес сопоставляется действию с помощью карты действий. Реализация mapper-файла по умолчанию находится в DefaultActionMapper, который анализирует URL-адрес и извлекает имя и пространство имен. Путь до последней косой черты после контекстного пути является пространством имен, имя действия - это оставшийся путь.

application.properties

server.contextPath=/clear 
server.port=8080 

работает отлично, если они находятся в src/main/resources, используя структуру проекта в Maven.

сообщения Проверка журнала, которые должны иметь следующую строку

INFO 4496 --- [ost-startStop-1] o.a.c.c.C.[.[localhost].[/clear]  : Initializing Spring embedded WebApplicationContext 
+0

Журналы обоих серверов Tomcat читаются одинаково, а ресурсы находятся в папке ресурсов. Этим выводам я обновил исходный ответ. – Bala

+0

Можете ли вы использовать URL-адрес действий на странице конфигурации-браузера? –

+0

Проверено, страница с конфигурационным браузером. Для встроенного Tomcat. Действия в пространстве имен/все пустые. Принимая во внимание, что для внешнего Tomcat он отображает все действия. – Bala

Смежные вопросы