Java 如何从servlet发送响应

Java 如何从servlet发送响应,java,ajax,servlets,testng,Java,Ajax,Servlets,Testng,我有一个从浏览器发送到Servlet的Ajax调用。在Servlet上计算一些值,比如A。我的问题是如何验证A。我从浏览器启动的位置使用TestNG,但在控制转移到Servlet之后。我应该如何从Servlet返回值,以便在TestNG中获取并验证它。我可以想到的解决方案: (1) 绕过servlet:将业务计算放在单独的方法/类中,并直接进行测试。如果将重点放在业务代码上(而servlet层执行诸如提取简单请求参数之类的琐碎任务),这可能就足够了。例如: (2) 使用嵌入式服务器,如Jet

我有一个从浏览器发送到Servlet的Ajax调用。在Servlet上计算一些值,比如A。我的问题是如何验证A。我从浏览器启动的位置使用TestNG,但在控制转移到Servlet之后。我应该如何从Servlet返回值,以便在TestNG中获取并验证它。

我可以想到的解决方案:

(1) 
绕过servlet:将业务计算放在单独的方法/类中,并直接进行测试。如果将重点放在业务代码上(而servlet层执行诸如提取简单请求参数之类的琐碎任务),这可能就足够了。例如:

(2) 使用嵌入式服务器,如Jetty。 在单元测试中,您只需启动一个jetty(使用“new Server()”…),并告诉它执行servlet

(3) 您还可以调用servlet,向其注入模拟请求/响应/会话等。例如,Spring有这样的模拟对象。 所以它有点像:

HttpServletRequest mockReq=new MockHttpServletRequest();
HttpServletRequest mockResp=new MockHttpServletResponse();
new MyServlet().service(mockReq, mockResp);

请注意,它可能需要根据您的servlet需要进行一些调整,例如请求参数、会话(模拟请求有添加它们的方法)

Tx Pelit,但我关心的不是通过模拟或其他方式访问servlet。实际上,我需要阅读servlet/业务逻辑类计算的内容,所以我只需要以某种方式返回该值。我需要java程序中的返回值。您不能编写业务层来返回该值吗?例如,在上面的“MyBank”类中,让它返回您的_数据而不是“void”?实际上我使用的是TestNG,所以一旦浏览器从test method开始,然后控件到达Servlet,控制流就不会返回TestNG test method。只是澄清一下:您使用的是“模拟请求”方法(在上面的第3节中提到)?所以您的TestNG类包含类似“myServlet.service(mockReq,mockResp)”的内容?在这种情况下,servlet将只将其响应写入您的MockHttpServletResponse。。。所以回到TestNG中,您可以测试在那里编写的内容。确切的测试取决于MockHttpServletResponse的实现,例如,如果使用spring(org.springframework.mock.web.MockHttpServletResponse),则会询问“String str=myMockResp.getContentAsString()”
HttpServletRequest mockReq=new MockHttpServletRequest();
HttpServletRequest mockResp=new MockHttpServletResponse();
new MyServlet().service(mockReq, mockResp);