如何处理Spring MVC中静态页面的寻址

我有一个使用Tile3的Spring MVC应用程序。 我有很多静态页面需要将它们嵌入到tile3当前提供的网站模板中。 (我需要在所有页面上使用相同的页脚和页眉,无论是动态还是静态,但不确定如何对静态页面进行寻址)。

静态页面的示例是index.jsp和aboutus.jsp。 如何访问这些静态页面? 我应该通过控制器来做吗?

我知道我可以使用jsp:include但这是一个好习惯吗? 因为我正在使用瓷砖,所以没有其他选择吗? 本教程建议使用单独的控制器,但我不确定这是否是最佳解决方案。 因为它向服务器发送不必要的请求。

如果有比Tiles更好的选择,请告诉我

web.xml中

   org.apache.tiles.extras.complete.CompleteAutoloadTilesListener   org.springframework.web.context.ContextLoaderListener   springapp org.springframework.web.servlet.DispatcherServlet 1   springapp *.htm   contextConfigLocation /WEB-INF/springapp-servlet.xml   

tiles.xml

                    

调节器

 @Controller public class HelloController { protected final Log logger = LogFactory.getLog(getClass()); public HelloController() { System.err.println("Constructor of HelloController"); } @RequestMapping("/index.htm") public String index(){ System.err.println("in index method"); return "index"; } 

baseLayout.jsp

          

的index.jsp

 

This is the body of index page

使用JSP:include

  pros - No extra load neither on DB nor on server cons - To backup need to backup all static files - Might have overwork as each page should be prepared separately rather than having a single template for all pages and just populate the template - If need to add something to static pages need to change all pages. 

我刚刚找到了一个很好的解决方案,处理静态页面我们可以在servlet中使用 ,示例代码在这里和这里 ,它也适用于Tiles以确保你有一个每个路径的definition在您的tiles.xml文件中。

    

你完成它的方式应该有效,但为每个静态页面创建一个新的Mapper函数并不是一个好主意。 你能做的就是你的控制器

 @RequestMapping("/page/{viewName}.htm") public String index(@PathVariable(value="viewName") String viewName, Model model){ if(isValidView(viewName)){ model.addAttribute("viewName", viewName); return "page"; } return null; } 

但是你必须确保viewName有效,否则会出现安全问题。

另请阅读本文

编辑

isValidView函数可以是同一个类或BaseController类,也可以是服务调用来检查数据库。 检查该文件是否存在不是一个好主意,因为它占用资源,但因为生产服务器上的路径可能不同。

如果静态页面的主体只是HTML,您可以在DB中加载内容而只是这样做

  ${htmlContent}  

或者如果你想让身体保持活力。

对于tiles.xml,你可以拥有

     

for page.jsp

    

那么你总是可以在baseLayout页面上加载所有内容并创建更高级别。 我的意思是如下:


'

现在,您可以通过菜单点击将内容加载到此iframe,其中包含一个简单的脚本: loadPage(pageLink); 并且函数的内容可以是: $("#dynFrame").attr("src",pageLink);
菜单单击可以将URL传递给loadPage函数,并且您只需要加载任何静态页面的一个副本。

我希望这有帮助。