使用Struts过滤器和Tomcat进行Spring启动

时间:2017-02-16 18:00:19

标签: java spring-boot configuration struts2

我正在将struts 2应用程序迁移到Spring Boot。我在Application引导类中定义了StrutsPrepareAndExecuteFilter。

@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;
  }
}

pom文件配置在

之下
<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>

我的动作类有一个简单的struts动作和另一个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服务器上部署应用程序。我可以访问动作网址

http://localhost:8080/clear/welcome

http://localhost:8080/clear/users

但是,当我在STS中运行应用程序(或使用maven命令)时,我在访问上述URL时遇到标准struts错误

没有映射名称空间[/ clear]和与上下文路径[]相关联的操作名称[users]的Action。

application.properties具有以下属性

server.contextPath=/clear
server.port=8080 

我是否缺少任何其他配置才能使其正常运行?

更新

正如@ Roman-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

application.properties位于文件夹

src/main/resources     

仍然没有运气。不知怎的,我猜想struts注释会被忽略。

我已在Git https://github.com/creativekarma/clear

中提交了源代码

1 个答案:

答案 0 :(得分:2)

默认情况下,Spring Boot会将嵌入式tomcat初始化为根应用程序上下文。因此,您可以从/访问您的应用程序。

操作映射器将URL映射到操作。默认操作映射器的实现位于DefaultActionMapper中,用于解析URL并提取操作名称和命名空间。上下文路径之后的最后一个斜杠之前的路径是命名空间,操作名称是剩余路径。

application.properties

server.contextPath=/clear
server.port=8080 

如果使用maven的项目结构位于src/main/resources,则可以正常工作。

检查应该包含以下行的日志消息

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