0

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

我正在做一个小项目,现在它只是一个简单的网络服务,在谷歌应用引擎上工作。我们使用这样的 JSP。

查看-jsp文件

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

控制器 - java bean。

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

---添加---第一次被隐藏

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

- -/添加 - -

<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,猜猜这是我需要的。但是,对于小型 Web 服务来说,这可能是矫枉过正
  4. 使用 taglib 并制作我自己的标签,像 JSTL 一样使用它们
  5. 你的建议?
4

2 回答 2

2

身份验证不是您的页面应该知道或考虑的事情。

将此逻辑移动到一个过滤器中,该过滤器检查身份验证并在需要时进行重定向。

于 2013-06-21T11:20:21.280 回答
1

简单的动态包括:

<jsp:include page="pagename" />

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

于 2013-06-21T11:21:22.803 回答