현재 자바로 가지고있는 HttpServlet 클래스에 대한 단위 테스트를 설정하려고합니다. 그러나 Jetty 문서는 부족한 모양이고 조금 붙어 있습니다. 서블릿에서 getContextPath()를 사용하여 인쇄 할 때 contextPath가/hbc라는 것이 확실합니다. 그러나, 나는 a) addServlet() 메소드에 대한 두 번째 매개 변수가 있어야하고 b) URI가 무엇이어야하는지에 대해 확신하지 못한다.부두 항상 Java에서 400 상태 코드를 반환합니다. HttpServlet
상태 코드는 400으로 돌아오고 내용은 null입니다. 나는 그것이 올바른 위치를 가리키고 있지 않기 때문에인지 확신 할 수 없다. (그러나 나는 그것이 404로 이어질 것이라고 생각한다.) 그렇지 않으면 뭔가가 빠져있다.
서블릿에는 init(), processRequest(), doGet() 및 doPost() 메소드가 있습니다.
생각하십니까?
public class HBCUnitTests extends TestCase {
private ServletTester tester;
@BeforeClass
public void setUp() throws Exception {
tester = new ServletTester();
tester.setContextPath("/hbc");
tester.addServlet(HubCommServlet.class, "/");
tester.start();
}
@AfterClass
public void tearDown() throws Exception {
tester.stop();
}
@Test
public void test() throws Exception {
HttpTester request = new HttpTester();
request.setMethod("POST");
request.setVersion("HTTP/1.1");
request.setURI("/");
System.out.println(request.generate());
HttpTester response = new HttpTester();
response.parse(tester.getResponses(request.generate()));
System.out.println(response.getContent());
System.out.println(response.getURI());
System.out.println(response.getReason());
assertEquals(200,response.getStatus());
assertEquals("<h1>Hello Servlet</h1>",response.getContent());
}
}
그래서 URI는 컨텍스트 경로 + 해당 함수의 두 번째 매개 변수 여야합니까? 또한 서블릿이 매핑되는 위치를 잘 모르겠습니다. 코드 매핑 방식에서는 특별한 것이 없으므로 매핑되는 위치를 어떻게 결정할 수 있습니까? – joshholat
addServlet의 두 번째 인수는 web.xml의 ''과 동일하게 보입니다. –
그래, 나는/servlet/hbc, addSerlvet 인수/HubComm (이는 url-pattern> servlet-mapping>. 수동으로 URI를/hbc/HubComm으로 설정해야합니까? 그렇다면 여전히 400을 얻고 있습니다. –
joshholat