【问题标题】:How to pass LARGE string between two JSP's without losing content如何在两个 JSP 之间传递 LARGE 字符串而不丢失内容
【发布时间】:2014-07-01 07:05:07
【问题描述】:

我有一个非常大的 json 字符串,我试图通过隐藏的表单方法将它从一个 jsp 传递到另一个。但是当我在我的另一个 jsp 中收到它时,只有一半的字符串出现,我知道它非常大。我的 results.jsp 有不同的 id,单击其中任何一个都会转到 details.jsp,它通过隐藏表单传递单击的 id 和整个字符串。我认为 POST 方法对传递的大小有限制,因此我的整个字符串都没有发送。

results.jsp

       <head>
            <script type="text/javascript">
                    function submitHiddenForm(Key) {

                   document.getElementById("Key").value = Key;
                   document.myForm.submit();

               }
                </script>
        </head>
    <body>

        <div class="list-group">
            <% 
                List<ComparisonResultDTOarr> ls = diff.getComparisonResultDTOarr();

                for(int i = 0;i<ls.size();i++)
                {
                List<AuditItemLogsDTOArr> lsinner = ls.get(i).getAuditItemLogsDTOArr();
                %><a href="#" onclick="submitHiddenForm('<%=lsinner.get(0).getKeyAsString()%>')" class="list-group-item"> 
                <%out.println(lsinner.get(0).getKeyAsString());%></a><%
                }
            %>
       </div>

        <form action="details.jsp" method="post" name="myForm">
         <input type="hidden" name="Key" id="Key"><br>
         <input type="hidden" name="jsonString" id="jsonString" value=<%=(String)request.getAttribute("jsonstring") %>>
        </form>
    </body>

在我的 details.jsp 中,我只是获取参数

<%
String Key = request.getParameter("Key");
String jsonstr = (String)request.getParameter("jsonString");
%>

并在段落中显示 jsonstr:

<p><%=jsonstr %></p>

但它不完整,只显示部分。我知道这有点令人困惑,所以如果您需要更多详细信息,请告诉我。

P.S - 我不能使用调度程序,因为它需要点击 ID。

【问题讨论】:

  • 我知道有一个最大尺寸。这就是为什么我的内容被剪切的原因,我想知道还有什么其他方法可以做到这一点@ScaryWombat 我也使用 weblogic 而不是 tomcat

标签: java json jsp post


【解决方案1】:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<input
    type="hidden" name="jsonString" id="jsonString"
    value="<c:out value="${jsonstring}">">

当然 HTML 属性 value 需要引号,而 JSP 标签 &lt;c:out&gt; 转义要转义的内容,就像字符串中的 "。 ` 会抑制转义。

${jsonString}是EL,表达语言,可以通篇使用,简化一切。

对于一个非常大的字符串,我建议使用其他数据流。也许 Ajax 与 JavaScript,但似乎您需要将先前的 JSP 修改为刚刚过去的查询参数左右。

【讨论】:

  • 我知道 EL,但我的项目比较传统,我被要求使用 scriplets,尽管这不是最佳实践。谢谢你能指导我一些我可以使用的资源吗?我还需要在我的所有 jsp 页面中使用这个字符串,所以你会建议在我的会话变量中设置它还是这是错误的方法?
  • 如果 json 是个性化/个人化的,它可以保留在那里,当它很大时可能会被压缩。它真的不是一个 servlet 的 URL,它要么动态创建它,要么从会话或数据库中获取它?不是那么快,但更干净,也许更快的初始页面加载。您还可以转发(在 JSP 脚本中)到 servlet 以嵌入 JSON 文本。
  • 这个答案并没有完全解决我的问题,但它确实有帮助,所以我对你的答案和评论都投了赞成票!谢谢!
【解决方案2】:

考虑到 Joop Eggen 之前的回答和 cmets 的回答,我认为问题可能如下:

  1. JSON 数据未转义
  2. 将数据传递到 JSP 页面的错误选择

我建议的第一种方法是因为您有未转义的 JSON 字符串,并且在将其显示为 HTML 时可能会丢失。在这种情况下,您需要小心地在 JSP 和 HTML 以及您传递它的 SCRIPT 的上下文中正确地转义它。我的 JSON 数据遇到了这个问题。我选择转义 JSON 数据。另外我建议在日志中多次打印数据以确认其存在。如果数据很大,请确认其长度。

第二种方法,我从您的对话中得到的另一种方法是使用会话来存储字符串数据。如果您必须多次使用数据,请将其保持在会话中,这样会很容易处理。

您的解决方案是结合上述两种方法。如果您同时使用它们,您可以轻松完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    相关资源
    最近更新 更多