根据url动态包含.jsp页面

时间:2013-06-26 22:33:28

标签: java jsp servlets

我正在使用带有Servlet和JSP的Java来创建一个基本的应用程序。

我有这个基本的html文件,我称之为基本布局,它具有基本的页面结构,带有导航菜单,页眉和页脚。

我还有一个register.jsp页面,用户可以在其中注册。

当用户点击register.jsp网址时,如何将/register包含在基本布局中?

目前,我使用PrintWriter对象从Servlet转储注册页面的html内容,并使用ajax动态呈现基页上的内容。但这确实是一种不好的做法。

2 个答案:

答案 0 :(得分:1)

是的确这是不好的做法。

可以轻松完成的更简单的选择是将您的html文件转换为jsp。然后在jsp中,您可以包含您想要的任何其他资源。考虑这个例子:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <jsp:include  flush="true" page="/templates/css.jsp"/>
        <jsp:include  flush="true" page="/templates/scripts.jsp"/>
    </head>
    <body>
        <div id="container">
            <div id="header">
                <jsp:include  flush="true" page="/templates/header.jsp"/>
                <jsp:include  flush="true" page="/templates/top_menu_visitor.jsp"/>
            </div>
            <div id="wrapper">
                <jsp:include  flush="true" page="/templates/top_content_visitors.jsp"/>
            </div>
            <div id="footer">
                <jsp:include  flush="true" page="/templates/footer_credits.jsp"/>
            </div>
        </div>
    </body>
</html>

在此示例中,您有一个包含许多组件的模板页面,其中大多数组件在不同页面之间是通用的。这可能是你的index.jsp。对于寄存器jsp,你只需要像这样创建一个新的jsp页面,只需更改几个部分。

这是一种方法。在Java EE中,有许多框架可以自动执行此过程。

答案 1 :(得分:0)

您可以使用<jsp:include>结合检查当前网址的<c:if>条件块。

可以使用${pageContext.request.requestURI}

获取当前请求网址

还有Apache Tiles library有助于克服JSP上缺乏可重用性

在Java EE5教程中查看有关<jsp:include>的更多信息:http://docs.oracle.com/javaee/5/tutorial/doc/bnajb.html