我想从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页面。 –