java - 使用 response.sendRedirect() 传递隐藏参数

标签 java jsp servlets post url-parameters

如何传递隐藏参数?我想调用一个页面(test.jsp),但也传递 2 个隐藏参数,如帖子。

response.sendRedirect("/content/test.jsp");

最佳答案

TheNewIdiot's answer成功解释了问题以及无法通过重定向在请求中发送属性的原因。可能的解决方案:

  1. 使用转发。这将使请求属性可以传递给 View ,您可以以 ServletRequest#getAttribute 的形式使用它们或使用 Expression LanguageJSTL .简短示例(重用 TheNewIdiot 的答案] 代码)。

    Controller (您的 servlet)

    request.setAttribute("message", "Hello world");
    RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url);
    dispatcher.forward(request, response);
    

    查看(您的 JSP)

    使用小脚本:

    <%
        out.println(request.getAttribute("message"));
    %>
    

    这仅用于信息目的必须避免使用小脚本:How to avoid Java code in JSP files? .下面是使用EL和JSTL的例子。

    <c:out value="${message}" />
    
  2. 如果你不能使用转发(因为你不喜欢它,或者你不这么觉得,或者因为你必须使用重定向),那么一个选项是将消息保存为 session 属性,然后重定向到您的 View ,在您的 View 中恢复 session 属性并从 session 中将其删除。请记住始终让您的用户 session 只包含相关数据。代码示例

    Controller

    //if request is not from HttpServletRequest, you should do a typecast before
    HttpSession session = request.getSession(false);
    //save message in session
    session.setAttribute("helloWorld", "Hello world");
    response.sendRedirect("/content/test.jsp");
    

    查看

    再次,使用 scriptlet 和 EL + JSTL 来展示这一点:

    <%
        out.println(session.getAttribute("message"));
        session.removeAttribute("message");
    %>
    
    <c:out value="${sessionScope.message}" />
    <c:remove var="message" scope="session" />
    

关于java - 使用 response.sendRedirect() 传递隐藏参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17001185/

相关文章:

java - 将上传文件的文件名存储在数据库java中

java - 通过嵌入请求重定向到国外页面

java - 方法重载显示 'incompatible type error' 带 float 但不带 double

java - 如何从字符串创建 Java 内置对象

javascript - 如何防止用户右键单击后退按钮返回?

java - 当存在多个同名属性时指定EL中的范围

javascript - 使用 jquery 向表中添加行

java - 如何处理带有 4xx/5xx 状态代码的 HTTP 响应,Java servlet/HttpURLConnection

java - 使用 RMI 的 ClassNotFoundException

java - 需要配置类中的属性