【问题标题】:Rewriting getAttribute() scriptlet as a JSTL in JSP/HTML?在 JSP/HTML 中将 getAttribute() scriptlet 重写为 JSTL?
【发布时间】:2019-04-23 12:09:15
【问题描述】:

我的 JSP 页面中有一个 scriptlet,它获取从以前的 serlvet 传递的属性“用户名”。 scriptlet 验证是否设置了“用户名”属性,如果没有设置,则拒绝访问主页并重定向到登录页面:

<%
    String validUser = (String) session.getAttribute("username");
    if (validUser == null){
    session.setAttribute("errorMsg", "Access Denied:  Please login to access this page");
    session.setAttribute("username", "");
    response.sendRedirect("LoginFormError.jsp");
        }
%>  

由于 JSP/HTML 代码中的 scriptlet 并不理想,我该如何将这个 scriptlet 重写为 JSTL?

编辑

好的,到目前为止,这是我所拥有的:

<c:set var="validUser" value='${param.username}' />

<c:if test = "${validUser == null"}   
   <c:set var="errorMsg" value="${'Access Denied:  Please login to access this page'}"/>
   <c:set var="username" value=""/>
   <c:redirect url="LoginFormError.jsp"/>
</c:if>

getAttribute() 和 setAttribute() 做对了吗?

【问题讨论】:

    标签: java jsp jstl scriptlet getattribute


    【解决方案1】:

    很高兴看到你这样做,你可以使用jstl/core taglib

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    
    <c:if test="${sessionScope.username == null}">
        <c:redirect url="LoginFormError.jsp" />
    </c:if>
    

    【讨论】:

    • 在看到您的回答之前,我进行了编辑。我想知道${param.attr["username"]} 是否等同于getAttribute("username")
    • 我认为 username 根据您的原始帖子是一个会话变量。你为什么不试试我发布的内容?
    • 啊,是的。对此感到抱歉,我正在关注以 attr 作为会话变量的 JSTL 指南。是的,username 是我的正确变量。
    • ${param.username}${sessionScope.username} 有什么区别?一位贡献者根据他在此处的回答(第二个回答)建议使用param*.com/questions/4912690/…
    • 是的,这是我的理解,即 username 将成为 queryString 的一部分,但是您的问题将其发布为 String validUser = (String) session.getAttribute("username");,这是一个会话变量。只有可以说哪个是正确的。但无论如何,请根据您的要求修改我的答案。