如何处理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函数,并且您只需要加载任何静态页面的一个副本。
我希望这有帮助。