新搭了一个项目,做非业务控台,此控台涉及到多个子业务模块的控台访问,方案是用cas做单点登录,shiro做权限认证。
碰到一个问题,控台页面统一基于bootstrap做了页面框架,拆分出了header.jsp,menu.jsp 等,但jsp:include又不支持跨项目引用jsp。如果把这个header.jsp在每个子工程里放置,那维护起来也麻烦,而且冗余。实验了一些方案都不可行,后来查询了下,servlet 3.0支持读取META-INF/resources目录下的资源文件,跟读取本地的文件一样的。
所以考虑新建一个工程,把公用的jsp,css,js都放进去,然后其他项目依赖该工程即可。
比如A是个jar工程,在main/resources/下建一个目录 META-INF/resources,然后这个目录下的文件,按规范就可以使用了,可以在这个目录下新建css;js等子目录,按需放置文件即可。
特别要说的是jsp文件,要根据你自己工程里springMVC的实际配置放置,比如配置jsp在WEB-INF/jsp下面,那就需要在resources目录下建立WEB-INF/jsp目录,然后放置jsp进去。
最后子工程依赖A工程后,就可以使用里面的文件了,比如
<link href="css/test.css" rel="stylesheet">
<script src="js/test.js"></script>
<jsp:include page="test.jsp" flush="true" />
都是可以正常访问使用的,这样的工程结构,公用的jsp可以统一维护,包括统一的css管理等,以避免代码冗余,版本混乱等问题。