微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 在类似网络应用程序之间共享Web层代码(控制器和JSP)的最佳做法

我正在努力重写一些老化的Web应用程序.有两个特别是非常非常相似,但今天没有分享代码,我的目的是解决这个问题.

这些项目正在用Maven,Spring MVC和Sitemesh进行重写.

模型层代码很容易使用JAR共享.但是我不知道在类似的应用程序之间共享常见的Web层代码(JSP和控制器)的任何好方法.

这里有一些背景.这些应用程式是网路商店.一个用户可以登录,搜索产品,添加到购物车和退房的普通商店(think amazon.com).另一个基本上是一样的,只是一个punchout网站.产品浏览和购物车部分是相同的.然而,登录和结帐是完全不同的.

我过于简单,但足以说明问题.产品浏览和购物车部分中的Web层代码中有很大一部分应该能够在两者之间共享.

我不认为可以简单地将相同的WAR文件与基于环境变量的“模式”或来自不同数据库的设置一起运行.其中一个区别是完全不同的Spring Security配置.最好将其他站点登录和检出控制器从组件扫描中离开,否则任何人都无法通过URL操作过渡到错误的控制器.

我最初开始使用Maven Profiles和过滤来保存两个不同的配置集(web.xml,spring配置等)在同一个WAR项目中.基于哪个Maven配置文件被选择,所生成的WAR是用不同的配置集构建的(为了清楚起见,使用不同的名称).这违反了一个人生产一件神器的Maven校长.

有没有更好的方法来做到这一点? 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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、
线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Descrip
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量
Java 9中JShell中的不同启动脚本是什么?
使用Java的位填充错误检测技术
java中string是什么
如何使用Java中的JSON-lib API将Map转换为JSON对象?