如何减少jsp中的重复?

时间:2013-06-21 11:12:30

标签: java jsp code-duplication

我最近开始学习Java,我的问题可能很愚蠢,但不过:

我正在开展小型项目,目前它只是一个简单的网络服务,在Google App Engine上工作。 我们使用这样的JSP。

查看 - jsp文件

<jsp:useBean id="bean" class="my.package.web.SpecificBean" />
<jsp:setProperty name="bean" property="request" value="<%=request%>" />

Controller - java bean。

public class SpecificBean {
    public void setRequest(HttpServletRequest request) {
        /*
        Do authorization
        Prepare data for page
        */
    }
}
  

--- ADDED ---第一次被隐藏

<jsp:setProperty调用setRequest方法,它为页面准备数据,我正在使用JSTL将这些数据放在必要的位置。 使用域和控制器的控制器等,但这不是我在说什么。 当我添加授权时,我决定不重定向人员,而是在这个地址上给他们登录页面。 我这样写了一下:

  

--- / ADDED ---

<jsp:useBean id="bean" class="my.package.web.SpecificBean" />
<jsp:setProperty name="bean" property="request" value="<%=request%>" />
<c:choose>
    <c:when test="${!bean.userAuth.loggedIn}">
        <html><head><title>Please log in</title></head><body>...</body></html>
    </c:when>
    <c:when test="${!bean.userAuth.userValid}">
        <html><head><title>You are not allowed</title></head><body>...</body></html>
    </c:when>
    <c:otherwise>
        <html><head><title>Page you have been requested</title></head><body>...</body></html>
    </c:otherwise>
 </c:choose>

是的,这看起来很笨重,我知道!在每个.jsp中,我必须复制粘贴如此大的代码。 当然我做了一些改进,比如把“请登录”html放到单独的.jsp中并使用<%@include file=""%> 但无论如何,有一段很好的代码,包含每一页。只有3页,但...... 我可以使用两个<%@include file=""%>指令,用于“头部”和“底部”,但我不确定这个决定是否会产生不良后果。

所以我该怎么办?

  1. 仅使用<%@include file=""%>
  2. 重定向(但我认为这不是我架构的最后一个问题)
  3. 我听说过Spring Web Flow,猜测它是我需要的。然而,对于小型网络服务来说,这可能是过度的。
  4. 使用taglib制作我自己的标签,使用它们像JSTL
  5. 你的建议?

2 个答案:

答案 0 :(得分:2)

身份验证不是您的网页应该了解或考虑的内容。

将此逻辑移至Filter,检查身份验证并在需要时重定向。

答案 1 :(得分:1)

简单的动态包括:

<jsp:include page="pagename" />

<jsp:include动作在请求时执行,<%@include执行编译时。