Java 使用href传递参数值,仅使用JSP';s

Java 使用href传递参数值,仅使用JSP';s,java,jsp,url-rewriting,httpsession,Java,Jsp,Url Rewriting,Httpsession,与我的问题所暗示的相反,我完全理解在JSP中使用任何形式的代码是不对的。但我有一项重要任务要完成,这就是情景: 单击链接后,传递的参数(无论是什么)将被截断(出于安全原因),我需要在用户登录后以某种方式获取这些参数。我正在尝试使用会话来完成此操作 我有四个JSP页面,上面写着: routing.jsp jsp login.jsp target.jsp 和页面,其中包含链接和一些参数: < a href="router.jsp?p1=s&p2=s123">Click here&

与我的问题所暗示的相反,我完全理解在JSP中使用任何形式的代码是不对的。但我有一项重要任务要完成,这就是情景: 单击链接后,传递的参数(无论是什么)将被截断(出于安全原因),我需要在用户登录后以某种方式获取这些参数。我正在尝试使用会话来完成此操作

我有四个JSP页面,上面写着:

  • routing.jsp
  • jsp
  • login.jsp
  • target.jsp
  • 和页面,其中包含链接和一些参数:

    < a href="router.jsp?p1=s&p2=s123">Click here</a>
    
    router.jsp
    被执行
    onload
    ,因此它基本上被重新定向到
    intermediateTarget.jsp

    这里,我使用getAttribute获取参数:

        HttpSession session1 = request.getSession();
        String param1 = (String) request.getAttribute("p1");
        String param2 = (String) request.getAttribute("p2");
    
        String param = request.getParameter("param");
        String lgn = request.getParameter("lgn");
    
        if (null != param) {
            response.sendRedirect("empLogin.jsp");
        } else if (null != lgn) {
            response.sendRedirect("target.jsp");
        }
    
    我从登录页面和路由页面传递了两个隐藏参数,分别是
    lgn
    param
    。在检查请求来自哪个页面之后,我需要将其重定向到
    target.jsp
    login.jsp

    基本上,登录后,我需要能够从会话中获取相同的参数,并将其显示在目标页面上(比如确认我实际上能够获取在链接中传递的参数)

    同样,我不需要servlet,因为这是我们只需要使用JSP就可以从终端包含的内容

    另外,我也读过试图在
    之后提取URL部分的文章,甚至开始了提取深度链接的概念,但我没有取得任何进展

    对不起,如果这篇文章看起来太长了。我只是想对我的情况有一个清楚的了解,如果还有其他的想法,我将不胜感激


    提前多谢

    首先,我不明白您为什么不想要servlet,因为它的代码更清晰、更漂亮。它们也非常适合这种情况

    这与问题无关,只是为了让你的生活更轻松

    如果您使用的是scriptlets,读起来很烦人,我建议您把它放在 为了代码的可读性,使用scriptlet标记,例如

    <jsp:scriptlet>
        String param1 = request.getParameter("p1");
        String param2 = request.getParameter("p2");
    
        HttpSession session1 = request.getSession(true);
        session1.setAttribute("p1", param1);
        session1.setAttribute("p2", param2);
        response.sendRedirect("intermediateTarget.jsp");
    </jsp:scriptlet>
    
    您希望在getSession中使用false参数,因为如果用户登录,那么他/她必须有一个会话,并且您希望使用筛选器重定向他们,而不是创建一个新会话

    不过我还是喜欢这样写

    <c:choose>
        <c:when test="${not empty param}">
            <c:redirect url="empLogin.jsp"/>
        </c:when>
        <c:otherwise>
           <c:redirect url="target.jsp"/>
        </c:otherwise>
    </c:choose>
    
    
    

    希望它能回答您的问题,如果我误解了您的问题,请随意评论:)

    我已经用scriptlet标记替换了scriptlet。另外,我不太熟悉JSTL标记的使用,这就是为什么我尝试使用if-else条件编写它们。我能够从
    intermediateTarget.jsp
    中的会话中获取参数,但我不确定如何从那里开始。当您说
    test=“${not empty param}”
    是否在此处传递隐藏字段名,然后检查条件?另外,我在两个不同的jsp中有两个隐藏字段,一个在
    router.jsp
    上,另一个在
    empLogin.jsp
    上,我试图在
    intermediateTarget.jsp
    中获取该字段,以检查请求是从哪个页面获得的,以及
    response.sendRedirect
    将该请求重定向到相应的jsp,然后在jsp页面上获取这些参数并将其再次附加到url。很抱歉我的解释不好,但我很累,也没有任何环境来测试它。“${not empty param}”是一个el表达式,用于检查请求或会话变量param是否存在,您可以直接将其值与页面内的“code${param}”一起使用以将其打印出来。对我来说,scriplets属于其他地方,我总是选择servlet来进行此类验证,因此我认为在scriptlets中使用纯java更容易jstl基本上是一个“code if(param!=null)”与el表达式中的“code test=“${not empty param}”相同,很难说,因为我不知道你想用它们做什么,或者你打算如何使用它们。因此,解释是非常笼统的,如果你在会话中有它们,你不必访问它们只是为了将它们传递到下一页,它们已经在那里了。因为看起来它们只是消耗额外资源的未使用变量。
    String param2 = (String)request.getSession(false).getParameter("p2");
    // or session1.getParameter("p2"); 
    // if you add false where you create the variable.
    
    <c:choose>
        <c:when test="${not empty param}">
            <c:redirect url="empLogin.jsp"/>
        </c:when>
        <c:otherwise>
           <c:redirect url="target.jsp"/>
        </c:otherwise>
    </c:choose>