Kev*_*inF 10 java spring spring-mvc sitemesh maven
我正在努力重写一些老化的Web应用程序.有两个特别是非常非常相似,但今天没有共享代码,我的目标是解决这个问题.
这些项目正在用Maven,Spring MVC和Sitemesh重写.
模型层代码很容易使用JAR共享.但我不知道在类似的应用程序之间共享通用Web层代码(JSP和控制器)的任何好方法.
这是一些背景知识.这些应用程序是网络商店.一个是普通商店(想想amazon.com),用户可以登录,搜索产品,添加到购物车,结账.另一个基本上是相同的东西,只有它是一个打击站点.产品浏览和购物车部分是相同的.但是,登录和结帐完全不同.
我过于简单了,但这足以说明问题.产品浏览和购物车部分中有很大一部分Web层代码应该能够在两者之间共享.
我认为根据环境变量或来自不同数据库的设置,只能将相同的WAR文件作为"模式"运行.其中一个差异是完全不同的Spring Security配置.最好将其他站点的登录和结帐控制器从组件扫描中移除,这样任何人都无法通过URL操作以某种方式转换到错误的控制器.
我最初开始使用Maven Profiles并过滤以在同一个WAR项目中保留两个不同的配置集(web.xml,spring configs等).根据选择的Maven配置文件,生成的WAR使用不同的配置集(为清晰起见,使用不同的名称)构建.这违反了Maven原则,即一个pom产生一个工件.
有一个更好的方法吗?Maven WAR Overlays怎么样?我看到人们谈论使用叠加来共享CSS,JS,图像甚至一些常见的JSP等公共资源.但我没有看到有人提到像控制器这样的方式共享类.
我可以将Controller类推送到JAR,但从逻辑上看,它们应该保留在各自的JSP中.并且JSP也不能被推送到JAR(对吧?).
我还想过让它成为一个包含多个WAR文件的EAR - 一个用于常见购物体验的WAR,另一个用于相应登录和结帐的WAR.我相信会话可以在同一个EAR中的两个WAR之间共享,但我不确定它是否与Spring的会话范围bean相配.我听说他们并没有真正存储在会话中.我还必须弄清楚如何处理用于页眉/页脚的Sitemesh装饰器.需要将相同的Sitemesh配置及其资源复制到两个WAR中,对吗?所以最后,购物WAR工件在每种情况下仍然会有所不同.
我不得不相信其他人以前曾经处理过这个问题.我想错了吗?这种事情有一个共同的解决方案吗?
反对复制粘贴的出色工作。为什么说JSP很难共享呢?您可以使用 Maven 依赖插件将它们从共享 jar 中复制出来:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>unpack</id>
<phase>package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.example</groupId>
<artifactId>webapp-common</artifactId>
<version>1.0-SNAPSHOT</version>
<outputDirectory>[target jsp directory]</outputDirectory>
<includes>**/*.jsp</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2478 次 |
| 最近记录: |