728x90
문제상황
서블릿을 공부하던 중 기본 HttpServlet의 Service 메소드를 오버라이딩 하여 동작원리를 보고 있었다.
원래 response.getWriter().write("hello " + username) 을 작성하고 페이지를 보면 글이 랜더링 되어 있어야하는데 while lable 인것..
그래서 콘솔창을 열어보니 제목과 같은 오류가 떠있었다.
package hello.servlet.basic;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "helloServlet", urlPatterns = "/hello") // /hello로 url이 오면 HelloServlet 실행
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
super.service(request, response)
// ctrl + o 눌러서 자물쇠 잠긴(protected) 서비스 메서드 생성
// 이 서블릿이 호출되면 서비스 메서드가 호출됨
System.out.println("HelloServlet.service"); // HelloServlet.service
System.out.println("request = " + request); // request = org.apache.catalina.connector.RequestFacade@6f162ef5
System.out.println("response = " + response); // response = org.apache.catalina.connector.ResponseFacade@21f039c6
// 요청: 쿼리 파라미터 조회
String username = request.getParameter("username");
System.out.println("username = " + username); // username = kim
// 응답
// 컨텐트 타입 작성(여기선 그냥 텍스트지만 보통은 json 타입일듯)
response.setContentType("text/plain");
// 인코딩 타입 작성
response.setCharacterEncoding("utf-8");
// 응답 한 내용을 랜더링
response.getWriter().write("hello " + username);
}
}
원인
HttpServlet의 service() 메소드를 호출하는 super.service(request, response) 코드가 있으면 요청 타입에 따라서 doGet(), doPost() 등의 메소드가 호출되게 되는데 나는 doGet()과 doPost()를 오버라이딩하여 구현하지 않았기 때문에 기본 메소드가 호출되게 되고 이 메서드는 기본적으로 제목과 같은 오류를 반환하도록 구현이 되어있는 것이다.
해결
그래서 그냥 간단하게 super.service(request, response) 이 코드만 지워주면 doGet(), doPost() 메서드가 호출되지 않게 되어서 랜더링이 잘 되고 오류 해결도 잘된다!!
추가
405 오류코드
추가적으로 405번 오류코드는 허용되지 않는 메소드를 의미하고 이 오류는 클라이언트가 요청한 Http 메소드가 해당 리소스에 대해 허용되지 않을때 반환된다.
예를 들어서 웹서버가 특정 URL에 대해서 GET 요청만을 허용하고 있는데 클라이언트가 해당 URL에 POST 요청을 보낼경우 405 코드를 반환한다.
반응형
'트러블 슈팅!!' 카테고리의 다른 글
| [세포아소프트]java.lang.NumberFormatException: For input string: "” (0) | 2024.04.07 |
|---|---|
| [세포아소프트]각 탭바의 id 가져오기 (0) | 2024.04.07 |
| [세포아소프트] 시퀀스 처리 (0) | 2024.03.30 |
| [세포아소프트] 부서 이름 코드값으로 들어가는 문제 (0) | 2024.03.30 |
| [세포아소프트] 공통 테이블 요소 데이터베이스에 안들어가는 이슈(해결) (0) | 2024.03.30 |