ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 45일차 - 자바 웹 개발 (2)
    AI 솔루션 개발자과정(Java, Python) 2022. 12. 9. 17:07

    이번에 진행하는 자바 웹 개발은 Java JDK 1.8버전과 Tomcat 9.0버전을 사용한다.

    또한 이클립스 EE IDE을 설치해야 한다.

     

     

     

    이클립스를 실행해서 workspace를 설정하고, File > New > Dynamic Web Project로 프로젝트를 생성한다.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

     

    세부 문서들은 src/ main/ webapp 폴더 안에 작성한다.

     

     

    하단의 Server텝에서 서버를 생성할 수 있다.

    우클릭 > New > Server로 생성한다.

     

     

    Apache > Tomcat v9.0을 선택하고, 톰캣이 설치된 폴더로 경로를 지정한다.

    이후 위에서 작성한 프로젝트를 서버에서 구동하도록 추가한다.

     

     

     

     

     

     

    서버를 더블클릭하면 이러한 오버뷰가 나오는데, 여기서 포트를 지정할 수 있다.

     

    포트는 다음과 같이 설정한다.

     

     

     

    이후 Ctrl + F11 으로 서버를 실행하고, 웹 브라우저의 주소창에 다음과 같이 입력한다.

    localhost 혹은 127.0.0.1 혹은 0:0:0:0:0:0:0:1 혹은 자신의 ip를 입력하고 :포트번호 / 프로젝트이름 / 문서이름 or 서블릿 매핑을 입력하면 접속할 수 있다.

     

     

     

    서블릿은 Java Resources의 src/main/java에 주로 만들고, 패키지 이름으로는 주로 action을, 클래스 네임에 서블릿 이름을 쓰면 된다.

     

     

     

    Next>로 넘어오면 서블릿의 URL mappings를 설정할 수 있는데, 서블릿을 통해 연결되는 URL을 지정할 수 있다.

    이 URL 매핑을 이용하면 url설정을 간결하게 바꿀 수 있다.

     

     

    서블릿에 사용할 메서드를 선택해 생성할 수 있다. 메서드 오버라이딩 개념으로 사용한다.

    init과 destroy는 생명주기 메서드로, 생성될 때와 소멸될 때를 뜻한다.

     

     

     

     

    서블릿이 생성되면 아래 사진처럼 import문 부분에 오류가 있다고 표시된다.

    자바에서 기본적으로 제공하는 라이브러리가 아니기 때문에 인식할 수 없는 것이다.

    다음과 같이 프로젝트를 우클릭하고, Build Path > Configure Build Path 에 들어가서 라이브러리텝을 클릭하고, Add Library를 클릭하여 Server Runtime에서 톰켓 라이브러리를 추가해야 한다.

     

     

    라이브러리 추가가 완료되면 오류가 사라진다.

     

     

    setContentType() 메서드로 페이지의 내용에 들어갈 부분의 설정이 가능하다.

    PrintWriter의 getWriter() 메서드를 통해 페이지에 원하는 내용을 출력할 수 있다.

    request.getRemoteAddr() 메서드로 요청한 클라이언트의 주소를 반환할 수 있다.

    현재 접속한 ip는 위와 같다.

     

     

     

     

     

     

    webapp에 login.html문서를 만들어서 클라이언트의 요청을 얻어보자.

    login.html을 이처럼 작성하고 서블릿을 만들어서 서버에서 실행시켜야 한다.

     

     

     

    login.html의 서블릿은 위의 3가지 메서드를 이용하여 만든다.

     

     

    goGet() 메서드만 다음과 같이 작성한다.

     

     

     

    로컬호스트 주소로 들어가서 확인해보면 정상적으로 폼이 보이고, 이클립스 콘솔창에 폼에 입력한 값이 출력되는 것을 확인할 수 있다.

     

     

     

     

    반대로 post 방식으로 서블릿에 요청을 보내본다.

    login.html은 form의 method는 post로, action은 login2로 변경한다.

     

     

    서블릿은 LoginServlet2로 이름을 짓고, 매핑은 login2로, doGet()메서드를 doPost()로 변경하여 생성한다.

     

     

     

    서블릿 확장 API

    서블릿 포워드 기능

    포워드란 하나의 서블릿에서 다른 서블릿이나 JSP와 연동하는 방법을 말한다.

    포워드 기능이 사용되는 용도는 여러 가지이며 요약하면 다음과 같다.

        * 요청에 대한 추가 작업을 다른 서블릿이 수행하게 한다.

        * 요청에 포함된 정보를 다른 서블릿이나 JSP와 공유할 수 있다.

        * 요청에 정보를 포함시켜 다른 서블릿에 전달할 수 있다.

        * 모델2 개발 시 서블릿에서 JSP로 데이터를 전달하는 데 사용한다.

     

    서블릿에서 사용되는 포워드 방법에는 네 가지가 있다.

        * redirect 방법 - 웹 브라우저에 재요청하는 방식이다.

                                  HttpServletResponse 객체의 sendRedirect() 메서드를 이용한다.

        * Refresh 방법 - 웹 브라우저에 재요청하는 방식이다.

                                  HttpServletResponse 객체의 addHeader() 메서드를 이용한다.

        * location 방법 - 자바스크립트에서 재요청하는 방식이다.

                                  자바스크립트에서 location 객체의 href속성을 이용한다.

        * dispatch 방법 - 서블릿이 직접 요청하는 방식이다. 일반적인 포워딩 기능을 지칭한다.

                                  RequestDispatcher 클래스의 forward() 메서드를 이용한다.

      

    서블릿을 이용하여 dispatch 포워딩 기능을 구현하기.

    dispatch를 이용한 포워딩 과정은 redirect 방법과 다른 점은 클라이언트의 웹 브라우저를 거치지 않고 바로 서버에서 포워딩이 진행된다는 것이다.

    따라서 웹 브라우저 주소창의 URL이 변경되지 않는다. 클라이언트 측에서는 포워드가 진행되었는지 알 수 없다.

     

     

    먼저 서블릿 2개를 생성한다.

     

     

    두 서블릿 모두 메서드는 doGet()만 사용한다.

     

     

    Entry 서블릿과 exit 서블릿은 다음과 같이 작성한다.

    Entry 서블릿의 doGet() 메서드

     

    Exit 서블릿의 doGet() 메서드

     

     

     

    실행해보면 다음과 같은 결과가 나온다.

    실행은 Entry 서블릿에서 시작되었고 URL또한 Entry서블릿의  URL매핑값인 entry이지만,

    결과는 Exit 서블릿의 내용이 나왔다.

     

     

    서블릿의 포워드가 서버에서 수행되었기 때문이다.

     

     

Designed by Tistory.