java-手动设置测试头

我想创建一个servlet类,该类从jsp接收两个输入参数,假设login.jsp,然后servlet“ CommandQueueTestServlet”将这些传入的参数设置为头参数,然后将请求和响应参数发送到另一个servlet“ CheckForCommandServlet”.

我需要这样做只是为了测试我的功能,因为我的“ CheckForCommandServlet”实际上将由具有标头参数的某些其他应用程序调用.

但是对于我自己的测试,我想创建一个用于设置标头的servlet“ CommandQueueTestServlet”.

请检查以下代码,我试图解释

javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class CommandQueueTestServlet extends HttpServlet{

 public void doGet(HttpServletRequest request,
         HttpServletResponse response)
throws ServletException, IOException {


String hwId=request.getParameter("hardware_id");
String panelistId=request.getParameter("panelist_id")); 

// Setting input parameter as header parameter.Since request object dont have setHeader so setting in response
//object

response.setHeader("x-HwId",hwid);
response.setHeader("x-panelistId,panelistId);

// creating instance of CheckForCommandServlet and passing in doGet() method:

CheckForCommandServlet headerParam= new CheckForCommandServlet();

 headerParam.doGet(request,response);


 }
 }
 // Code for CheckForCommandServlet 

 public class CheckForCommandServlet extends HttpServlet {

 @Override
 public void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {



    Enumeration enumeration = httpServletRequest.getHeaderNames();
    String headerName;
    String headerValue;
    while (enumeration.hasMoreElements())
    {
        headerName = (String)enumeration.nextElement();
        if (headerName == null)
        {
            headerName = "";
        }

        headerName = headerName.toLowerCase();
        headerValue = httpServletRequest.getHeader(headerName);
        logger.log(Level.INFO, "Header headerName " + headerName);
        logger.log(Level.INFO, "Header ParamaterValue " + headerValue);

    }

  }

我的CheckForCommandServlet如何获得在CommandQueueTestServlet中设置的headerParemeter,因为它是在header参数中设置的.

解决方法:

以下几行:

// Setting input parameter as header parameter.Since request object dont have setHeader so setting in response
//object

response.setHeader("x-HwId",hwid);
response.setHeader("x-panelistId,panelistId);

向将由servlet容器生成的HTTP响应添加两个标头,而不是向转发到CheckForCommandServlet servlet的HTTP请求添加两个标头.

由于您打算向原始请求添加HTTP标头,以便随后的HttpServletRequest.getHeader()调用将读取适当的值,因此您可以采用使用HttpServletRequestWrapper覆盖getHeader方法的方法来返回客户端发送的值.更多详细信息,请参见this related * answer.

为了验证CheckForCommandServlet的行为,一种更好的方法是使用HTTP调试代理(例如Fiddler).Fiddler允许您将request headers automatically添加到客户端发出的请求中.您需要做的就是确保将客户端配置为使用Fiddler作为HTTP代理.

即使您打算编写轻量级单元测试,也最好在客户端中使用HTTP库(例如Apache HttpComponents),而不是使用编写请求包装程序和Servlet以及需要测试的额外开销的方法.特定的WAR.

上一篇:Java-使用jQuery-ajax和Servlet的阿拉伯数据


下一篇:emc 郵件設置