Java 有没有办法将列表从servlet返回到html页面
我想将请求从html页面发送到servlet,然后在java servlet中创建一个列表,然后我想将此列表返回到同一html页面。问题是,您从未初始化Java 有没有办法将列表从servlet返回到html页面,java,html,servlets,Java,Html,Servlets,我想将请求从html页面发送到servlet,然后在java servlet中创建一个列表,然后我想将此列表返回到同一html页面。问题是,您从未初始化HttpSession s变量: @WebServlet(urlPatterns = {"/ShowPersonServlet"}) public class ShowPersonServlet extends HttpServlet { HttpSession s; //null by default //... p
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)管理的资源
- 将
的范围更改为每个方法的本地范围。另外,将其名称从httpsessions
更改为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);
}
}
@WebServlet(urlPatterns={”/ShowPersonServlet“})
公共类ShowPersonServlet扩展了HttpServlet{
/*
HttpSession s;//作为局部变量移动
Person=新Person();//作为局部变量移动
private List user=new ArrayList();//不确定要将其存储在何处
*/
受保护的void processRequest(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
HttpSession session=request.getSession();
List personList=(List)session.getAttribute(“personList”);
if(personList==null){
personList=新的ArrayList();
setAttribute(“personList”,personList);
}
添加((Person)session.getAttribute(“Person”);
/*
尝试(PrintWriter out=response.getWriter()){
//删除以缩短此答案
}
*/
request.getRequestDispatcher(“/showPerson.jsp”).forward(请求,响应);
}
@凌驾
受保护的void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
Person=新人();
person.setKey(request.getParameter(“txt_Key”);
person.setFirstName(request.getParameter(“txt_firstName”);
person.setLastName(request.getParameter(“txt_lastName”);
processRequest(请求、响应);
HttpSession session=request.getSession();
session.setAttribute(“person”,person);
}
@凌驾
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
processRequest(请求、响应);
}
}
更多信息:
httpsessions获取会话代码>-有s
为null
// Something like this (in processRequest), although I
// would prefer a local session variable.
s = request.getSession();
您需要提供异常的stacktrace。但它看起来可能在两个地方:
s、 setAttribute(“person”,person);在那里,s永远不会被设定李>
out.println(“+p.getKey()+”);从未设置属性“person”李>
祝你好运。未定义var s
的值。它为空,因此使用s.getAttribute(“str”)
将引发异常
https会话代码>
s = request.getSession(false);
不要把HTML放在Java代码中。不要将Java代码放在HTML中。不要在Servlet中处理状态,这将导致线程安全问题。@SotiriosDelimanolis我不会说您永远不必将HTML代码放在Servlet中。我想说的是,不要从servlet端处理整个HTML页面,“空错误异常”?从来没听说过这些。也许您可以给我们空错误异常的堆栈跟踪,并指出它所指的行号?@LuiggiMendoza对,如果您要编写HTML,请在专用组件中执行。但是如何将列表返回到HTML页面以在那里打印呢?我应该在所有用户添加的同一html页面中打印。我在这里遇到了一个错误:if(personList==null){personList=new List();session.setAttribute(“personList”,personList);列表是抽象的,无法实例化。此外,我还有一个错误:**NullPointerException()**@user3459148将新列表
错误修复为新数组列表
,我的错误(快速键入)。