我想從html頁面發送請求到servlet然後在java servlet中創建一個列表然後我想把這個列表返回到同一個html頁面。有沒有辦法從servlet返回一個列表到html頁面
回答
的問題是,你永遠不會初始化HttpSession s
變量:
@WebServlet(urlPatterns = {"/ShowPersonServlet"})
public class ShowPersonServlet extends HttpServlet {
HttpSession s; //null by default
//...
protected void processRequest(...) {
//...
//since never initialized, s is null
user.add((Person) s.getAttribute("person"));
}
@Override
protected void doGet(...) {
//...
//since never initialized, s is null
s.setAttribute("person",person);
}
}
化妝它工作解決方案:設置s
s = request.getSession();
現實世界解決方案的價值:
- 刪除 Servlet中的所有字段,從不嘗試處理servlet中的狀態,除非它們是由容器(如EJB)管理的資源。
- 將您的
HttpSession s
的範圍更改爲每個方法的本地範圍。另外,將其名稱從s
更改爲session
或更有用的東西。 - 將您的HTML代碼移動到處理查看詳細信息(如JSP)的組件,然後執行轉發視圖。
所以,你的代碼應該是這樣的:
@WebServlet(urlPatterns = {"/ShowPersonServlet"})
public class ShowPersonServlet extends HttpServlet {
/*
HttpSession s ; //moved as local variable
Person person = new Person(); //moved as local variable
private List<Person> user = new ArrayList<Person>(); //not sure where you want to store this
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();
List<Person> personList = (List<Person>) session.getAttribute("personList");
if (personList == null) {
personList = new ArrayList<>();
session.setAttribute("personList", personList);
}
personList.add((Person) session.getAttribute("person"));
/*
try (PrintWriter out = response.getWriter()) {
//removed to shorten this answer
}
*/
request.getRequestDispatcher("/showPerson.jsp").forward(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Person person = new Person();
person.setKey(request.getParameter("txt_Key"));
person.setFirstName(request.getParameter("txt_firstName"));
person.setLastName(request.getParameter("txt_lastName"));
processRequest(request, response);
HttpSession session = request.getSession();
session.setAttribute("person",person);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
更多信息:
但如何返回一個列表到HTML頁面打印它?我應該在同一個html頁面中打印所有添加的用戶。 – user3459148
我在這裏得到一個錯誤:if(personList == null){personname = new List <>(); ** session.setAttribute(「personList」,personList);列表是抽象的,不能被實例化。 – user3459148
另外我仍然有錯誤:** NullPointerException()** – user3459148
你需要得到來自會話request,你c annot只是期望得到它與HttpSession s ;
- 有s
是null
。
// Something like this (in processRequest), although I
// would prefer a local session variable.
s = request.getSession();
您需要提供異常的堆棧跟蹤。但它看起來可能在兩個地方:
- s.setAttribute(「person」,person); s從未設置;
- out.println(「」+ p.getKey()+「」);其中屬性「人」從未設置;
祝你好運。
var s
的值未定義。它是空的,所以使用s.getAttribute("str")
將會拋出異常。
HttpSession s ;
s = request.getSession(false);
- 1. 有沒有辦法讓YQL返回HTML?
- 2. 有沒有辦法將頁面修復到一個頁面?
- 3. 有沒有辦法從Python返回一個數據框到R?
- 4. 有沒有辦法呈現一個沒有視圖模型的HTML頁面?
- 5. 彈出html頁面沒有返回值?
- 6. GithHub頁面 - 沒有返回索引html
- 7. typo3:有沒有辦法在一個地方看到頁面及其html模板?
- 8. 有沒有辦法到達ASP.NET頁面上的HTML控件?
- 9. 有沒有辦法將HTML頁面上傳到AEM DAM
- 10. 有沒有辦法從另一個網頁上的HTML表中提取數據?
- 11. 在Servlet Post方法沒有從html頁面調用?
- 12. 有沒有辦法修改XML頁面,就像HTML頁面的「page-mod」一樣?
- 13. 有沒有辦法在javascript中添加一個列表到另一個列表?
- 14. 有沒有辦法從散列中返回排序後的鍵列表?
- 15. 有沒有辦法在一個getter中返回三個容器?
- 16. 有沒有辦法找到頁面中的表是一個dataTable對象?
- 17. 有沒有辦法將django-cms中的插件從一個頁面移動到另一個頁面?
- 18. 返回返回一個HTML頁面
- 19. HTML表,有沒有辦法把第二列放到一個新行?
- 20. 有沒有辦法知道返回一個布爾
- 21. 有沒有辦法在Response中返回一個值?
- 22. FLEX:有沒有辦法一次返回多個標記
- 23. 有沒有辦法簡單地返回一個BlockingCollection
- 24. 有沒有辦法一次編輯多個SharePoint 2013頁面的HTML?
- 25. 有沒有辦法從一個ItemsControl
- 26. 有沒有辦法讓一個asp.net頁面來自XSLT轉換?
- 27. 有沒有辦法使用ModalPopup Extender打開另一個頁面?
- 28. 有沒有辦法從一行中的函數返回一個數組鍵?
- 29. 有沒有辦法從一個文件夾中只使用Javascript返回所有圖像文件名的列表?
- 30. 有沒有辦法顯示不依賴於IE的HTML頁面?
**不要把HTML Java代碼。不要將Java代碼放入HTML中。** –
不要在Servlet中處理狀態,否則會導致線程安全問題。 –
@SotiriosDelimanolis我不會說你永遠不必把HTML代碼放到你的servlet中。相反,我不會說從servlet端處理整個HTML頁面。 –