将数组从一个servlet发送到另一个servlet并打印出来?

时间:2016-05-25 20:29:08

标签: java arrays servlets web-applications

首先,我想将参数从html发送到Servlet并且它可以工作。 然后我从参数创建一个数组,我想将该数组发送到另一个servlet。然后将其打印在Servlet2中。 这是我的代码:

    public void doGet(HttpServletRequest request,
                        HttpServletResponse response) throws ServletException, IOException {
                //System.out.println("XML servlet called!"); 
                response.setContentType("text/html");
                  response.getWriter();
                  //read value from selection
                  String videoname = request.getParameter("video");
                  String videoformat = request.getParameter("format");
                  String videoquality = request.getParameter("quality");

                  //System.out.println("Name" + videoname);
                 //System.out.println("format" + videoformat);
                 //System.out.println("quality" + videoquality);
                 String [] chain1 = {"v1","f1","q1"};
                 String [] chain2 = {"v1","f1","q2"};
 if (videoname.equals(chain1[0]) && (videoformat.equals(chain1[1])) && (videoquality.equals(chain1[2])) ){

                 request.setAttribute("chain",chain1);

             }
            }else if (videoname.equals(chain2[0]) && (videoformat.equals(chain2[1])) && (videoquality.equals(chain2[2])) ){
                 request.setAttribute("chain",chain2);}


             RequestDispatcher dispatch = request.getRequestDispatcher("/Servlet2");
         dispatch.forward(request, response);

在Second Servlet中,我的代码是:

String value = (String)request.getAttribute("chain");
        System.out.println("Chain is" + value);

我的问题是这不起作用。我有2个问题。 1)如何发送attribiute 2)是否可以在同一个mashin中看到servlet2中的结果?我只是在同一个项目中创建另一个名为Servlet2的类,并在web.xml中定义名称和路径。那是对的吗?

2 个答案:

答案 0 :(得分:0)

  1. 如何发送属性? 您正在做什么来发送属性(使用request.setAttribute,然后使用dispatch.forward是正确的。
  2. 假设您刚刚在同一个项目中创建了一个名为Servlet2的新servlet并在web.xml中正确配置了它,您应该能够在该servlet的GET或POST方法中获取该属性。
  3. 我认为你遇到了问题,因为你正在修改响应,这应该由Servlet2而不是Servlet1来完成。从代码中删除以下行

     response.setContentType("text/html");
     response.getWriter();
    

    ,因为您没有在Servlet1中处理响应。这应该可以工作,如果没有,修改你的问题,并包括你尝试编译/运行它时得到的错误的完整堆栈跟踪。

答案 1 :(得分:0)

创建Servlet以处理客户端发送的请求。我假设你的servlet2类做了这样的服务。如果在servlet中声明public static变量,则任何类都可以访问它。因此,您不需要从servlet1将数据发送到客户端,并让客户端将它们发送回servlet2。如果Web服务器中的所有servlet都有公共变量,则可以使用静态变量。如果servlet2的唯一目的是打印您的数据,它不应该是一个servlet,只是一个java类就可以了。

请记住,只会为所有请求创建一个servlet实例。因此,请勿使用实例变量来存储客户端特定数据。尝试使用会话。

This可以帮到你。