我有一個Web表單(JSP),它將數據提交給託管在不同服務器上的不同應用程序。提交表單數據後,該應用程序將重定向回相同的JSP頁面。現在,我想保存輸入的數據。以網頁形式保留提交的數據有哪些不同的方法。我不希望將數據存儲在數據庫或任何文件中。 PS:我想保留提交的表單數據,當請求再次被重定向到相同的JSP頁面時。因此,用戶不需要重新輸入數據。就像數據可以存儲在會話或請求中一樣。保留提交的JSP表單數據
回答
在JSP中,通常使用javabean來存儲表單值,然後使用jsp:useBean標記來處理這種事情。例如,您將創建以下的JavaBean:
package com.mycompany;
public class FormBean {
private String var1;
private String var2;
public void setVar1(String var) { this.var1 = var; }
public String getVar1() { return this.var1; }
public void setVar2(String var) { this.var2 = var; }
public String getVar2() { return this.var2; }
}
在您的表單JSP你使用useBean標籤和表單字段的值會從bean獲得它們的值:
<jsp:useBean id="formBean" class="com.mycompany.FormBean" scope="session"/>
...
...
<input type="text" name="var1" value="<%=formBean.getVar1()%>" />
在你的JSP表單數據被髮布到(然後重定向回來),你會有下面的代碼將發佈的表單數據推送到bean中。
<jsp:useBean id="formBean" class="com.mycompany.FormBean" scope="session"/>
<jsp:setProperty name="formBean" property="*"/>
另一種選擇是隻是形式的數據塞進會議在保存網頁:
String var1 = request.getParameter("var1");
String var2 = request.getParameter("var2");
session.setAttribute("var1", val1);
session.setAttribute("var2", val2);
...
,並在表單中引用它(檢查省略空):
<input type="text" name="var1" value="<%= session.getAttribute("var1") %>" />
最好你可以做的就是提交給你自己的servlet,然後在java.net.URLConnection
的幫助下向外部web應用程序發出另一個請求。最後,在相同的請求中回發到結果頁面,以便您可以通過EL訪問請求參數。有一個隱含的EL變量${param}
,它允許您訪問請求參數,如Map
,其中參數名稱是關鍵字。
<form action="myservlet" method="post">
<input type="text" name="foo">
<input type="text" name="bar">
<input type="submit">
</form>
,並大致有以下的servlet方法
所以
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
String foo = request.getParameter("foo");
String bar = request.getParameter("bar");
String url = "http://external.com/someapp";
String charset = "UTF-8";
String query = String.format("foo=%s&bar=%s", URLEncoder.encode(foo, charset), URLEncoder.encode(bar, charset));
URLConnection connection = new URL(url).openConnection();
connection.setUseCaches(false);
connection.setDoOutput(true); // Triggers POST.
connection.setRequestProperty("accept-charset", charset);
connection.setRequestProperty("content-type", "application/x-www-form-urlencoded;charset=" + charset);
try (OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(), charset)) {
writer.write(query);
}
InputStream result = connection.getInputStream();
// Do something with result here? Check if it returned OK response?
// Now forward to the JSP.
request.getRequestDispatcher("result.jsp").forward(request, response);
}
你應該能夠訪問result.jsp
輸入如下
<p>Foo: <c:out value="${param.foo}" /></p>
<p>Bar: <c:out value="${param.bar}" /></p>
就這麼簡單那。無需jsp:useBean
和/或令人討厭的scriptlet。
當它直接使用它時,它會把它放在這個標籤中
如果我正確地理解了這個問題(大「如果」那裏),你有一個FORM的方法是POST和一個直接指向遠程服務器的ACTION。當用戶單擊「提交」時,瀏覽器不涉及您的主機在該交易中,數據將轉到「ACTION」收件人。這將使您的選項受限於實現與遠程服務的回調關係(可能無法控制),設置本地代理servlet來攔截數據並將POST轉發給它的預期收件人(這將使POST始發於服務器而不是客戶端(這可能會導致問題)),或者利用一些AJAX設計模式將表單數據發送到兩個位置,而不是FORM標籤指定的一個位置。
除此之外,您需要擁有某種形式的本地持久性,如數據庫或文件。
我有幫助嗎?
- 1. 如何使用jsp在表單提交後保留textarea內容?
- 2. 3次提交的表單;如何保留最終提交的數據?
- 3. 提交後保留表單數據 - 多個選定的值
- 4. 在django上提交表單並提交錯誤後,保留字段的數據
- 5. 將表單提交給Servlet後,如何在JSP中保留HTML表單域值?
- 6. 提交表單並保留值設置
- 7. 表單提交後保留模型
- 8. 在php提交後保留表單值
- 9. 通過多個表單提交保留數據
- 10. 表單提交多個文件不保留數據
- 11. 表單數據提交後是否保留?
- 12. Django提交多個表單並在提交後保留字段數據輸入
- 13. 在提交第二個表單時保留一個表單的編輯數據
- 14. 使用JSP提交表單提交
- 15. 如何在提交後保留jsp下拉列表中的值
- 16. 帶參數的JSP表單提交URL
- 17. jQuery Mobile:提交後保留數據
- 18. 表單提交保存數據
- 19. JSP - 檢查表單提交
- 20. 未提交JQuery/JSP表單
- 21. jsp表單沒有提交
- 22. JSP表單提交錯誤
- 23. 表格提交後保留URL參數
- 24. MVC 3 C#::提交表單後保留表單的值
- 25. 如何在提交表單時保留當前的URL參數?
- 26. 提交表單不會留
- 27. Vue js - 保留表格上的數據值提交
- 28. Thymeleaf:在提交後保留數據表中的選定行
- 29. 提交表單後保留動態表單域值
- 30. 防止表單提交但保留表單驗證
一個問題:如果既沒有數據庫也沒有涉及任何文件,您如何建議「保存提交的數據」? – duffymo 2009-06-28 17:24:48