2014-03-25 34 views
-2

我想从html页面发送请求到servlet然后在java servlet中创建一个列表然后我想把这个列表返回到同一个html页面。有没有办法从servlet返回一个列表到html页面

+2

**不要把HTML Java代码。不要将Java代码放入HTML中。** –

+1

不要在Servlet中处理状态,否则会导致线程安全问题。 –

+0

@SotiriosDelimanolis我不会说你永远不必把HTML代码放到你的servlet中。相反,我不会说从servlet端处理整个HTML页面。 –

回答

1

的问题是,你永远不会初始化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); 
    } 
} 

更多信息:

+0

但如何返回一个列表到HTML页面打印它?我应该在同一个html页面中打印所有添加的用户。 – user3459148

+0

我在这里得到一个错误:if(personList == null){personname = new List <>(); ** session.setAttribute(“personList”,personList);列表是抽象的,不能被实例化。 – user3459148

+0

另外我仍然有错误:** NullPointerException()** – user3459148

0

你需要得到来自会话request,你c annot只是期望得到它与HttpSession s ; - 有snull

// Something like this (in processRequest), although I 
// would prefer a local session variable. 
s = request.getSession(); 
0

您需要提供异常的堆栈跟踪。但它看起来可能在两个地方:

  1. s.setAttribute(“person”,person); s从未设置;
  2. out.println(“”+ p.getKey()+“”);其中属性“人”从未设置;

祝你好运。

0

var s的值未定义。它是空的,所以使用s.getAttribute("str")将会抛出异常。

HttpSession s ;

s = request.getSession(false); 
相关问题