我试图将数据从一个servlet传递到另一个servlet,但是当我从另一个servlet获取数据时,它返回null。

ViewServlet.java

 @WebServlet("/ViewServlet")
public class ViewServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out=response.getWriter();
    out.println("<a href='index.html'>Add New Employee</a>");
    out.println("<h1>All Employees</h1>");
    List<Employee> emp=EmpDao.getAllEmployees();
    out.print("<table width='50' border='1'>");
    out.print("<tr><th>Id</th><th>Username</th><th>email</th><th>country</th><th>Edit</th><th>Delete</th></tr>");
    for(Employee e:emp){
        System.out.println("in view "+e.getId());
    out.print("<tr><td>"+e.getId()+"</td><td>"+e.getUsername()+"</td><td>"+e.getPassword()+"</td><td>"+e.getEmail()+"</td><td>"+e.getCountry()+"</td><td><a href='EditServlet?id"+e.getId()+"''>edit</a></td><td><a href='DeleteServlet?id"+e.getId()+"'>Delete</a></td></tr>");
    }
    out.println("</table>");
}


在这个类中,我试图将ID发送到另一个Servlet EditServlet。在for循环中,它打印所有id,甚至在html中都打印。
但是在EditServlet中,其返回null。

EditServlet.java

@WebServlet("/EditServlet")
public class EditServlet extends HttpServlet {
private static final long serialVersionUID = 1L;


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out=response.getWriter();
    String id2=request.getParameter("id");
    System.out.println("id is"+request.getParameter("id"));//Null is getting printed
    int id=Integer.parseInt(id2);
    System.out.println("Inside doGet id is"+id);//NumberFormatException


}}

最佳答案

您在链接中缺少等号。您的代码正在生成URL EditServlet?id1,因此当您需要id1时,发送的参数将是EditServlet?id=1没有值,因此您将获得值为1的参数id

<a href='EditServlet?id"+e.getId()+"''>edit</a>

应该

<a href='EditServlet?id="+e.getId()+"'>edit</a>(请注意,额外的'也已删除)

删除链接也是如此。

查找此类参数问题的最简单方法是使用浏览器的开发人员工具查看浏览器实际发送和接收的内容。或者,如果服务器是从IDE启动的,则应该有一种方法可以查看每个请求的详细信息(例如,NetBeans中的HTTP Server Monitor)。

10-06 09:53