【问题标题】:Handle multiple web modules in a spring MVC application在 Spring MVC 应用程序中处理多个 Web 模块
【发布时间】:2013-07-24 19:38:04
【问题描述】:

我正在尝试在 Spring MVC 应用程序中处理多个 Web 模块。 假设我有两个模块:财务模块和仓储模块。 他们有自己的业务流程,但也有一些常见的流程,例如 LDAP 身份验证和搜索……以及它们之间的依赖关系。 所以我想将它们保存在一个 Web 应用程序中,有两个不同的请求映射:/finance/* 和warehouse/*

我的问题与此类似: How should I build a modularized enterprise application which must use Spring and JPA?

所以我的第一个方法是创建一个枚举来存储模块列表:

public enum WebApplicationModule {
FINANCE("/finance", "Finance Module"),
WAREHOUSE("/warehouse", "Warehouse Module");    

private final String moduleTitle;   
private final String moduleRequestMapping;

WebApplicationModule(String moduleRequestMapping, String moduleTitle) {
    this.moduleRequestMapping = moduleRequestMapping;
    this.moduleTitle = moduleTitle;
}

public String getModuleTitle() {
    return moduleTitle;
}
public String getModuleRequestMapping() {
    return moduleRequestMapping;
}

}

然后我创建了两个抽象控制器:

@Controller
@RequestMapping(value = {WebApplicationModule.FINANCE.getModuleRequestMapping()})
public abstract class FinanceAbstractController {
private final String VIEWS_FOLDER = "finance";
}

@Controller
@RequestMapping(value = {WebApplicationModule.WAREHOUSE.getModuleRequestMapping()})
public abstract class WarehouseAbstractController {
private final String VIEWS_FOLDER = "warehouse";
}

模块中的所有控制器都会扩展它们。

目标是动态处理 RequestMappings:/finance/* 和 warehouse/*。 我还希望能够动态显示一个菜单(ul li ahref)来选择网页标题上的模块。

我知道它不起作用,因为 RequestMapping 的值必须是一个常数值,这就是为什么我问你最好的方法来做到这一点。

谢谢

【问题讨论】:

    标签: spring-mvc routing modularity


    【解决方案1】:

    您要提供共享请求映射前缀吗?像所有以“/finance/..”开头的 FinanceControllers 地图一样。

    首先使用不同的 DispatcherServlet 怎么样?

    <servlet>
        <servlet-name>finance</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>finance</servlet-name>
        <url-pattern>/finance/*</url-pattern>
    </servlet-mapping>
    
    <servlet>
        <servlet-name>warehouse</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>warehouse</servlet-name>
        <url-pattern>/warehouse/*</url-pattern>
    </servlet-mapping>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 2013-10-21
      • 2018-08-30
      • 1970-01-01
      • 2014-07-29
      • 2010-10-18
      • 1970-01-01
      相关资源
      最近更新 更多