23.01.25

이동욱·2023년 8월 6일
0

NaverCloudCamp

목록 보기
17/42

학습내용

  1. edu webApplication 만들기
  2. servlet life cycle
  3. Http Protocol
  4. Servlet 계층구조
  5. 절대경로, 상대경로
  6. HttpServletRequest setCharacterEncoding method

edu webApplication 만들기(txt 파일 참조)

  1. edu Web Application directory 만들기
  • C:\edu
  1. 새로 생성한 edu Web Application Tomcat 환경파일 server.xml 등록
  • WAS에게 새로 만든 Application directory를 알려줘야한다.(sever.xml이 해당 역할 수행)
  • C:\apache-tomcat-9.0.58\conf\server.xml에 아래 설정 추가
    <Context path="/edu" docBase="c:/edu" debug="0" reloadable="true" />
  1. edu Web Application Tomcat WAS 등록 확인
  • html은 C:\edu 밑에 추가
  • servlet은 C:\edu\WEB-INF\classes에 추가
  1. 추가한 servlet class web.xml에 등록
  • WAS는 Client의 request로 url을 받는다, 따라서 url요청에 대한 servlet class를 매핑시켜주는 작업이 필요하다.(web.xml 밑에 해당 코드 추가)

    <servlet>
    			<servlet-name>FirstServlet</servlet-name>
    			<servlet-class>FirstServlet</servlet-class>
    		</servlet>
    
    		<servlet-mapping>
    			<servlet-name>FirstServlet</servlet-name>
    			<url-pattern>/FirstServlet</url-pattern>
    		</servlet-mapping>
    
    		<!-- http://217.0.0.1:8080/edu/FirstServlet -->

    WAS의 webapp root classpath는 C:\edu\WEB-INF\classes이다.

servlet life cycle

Servlet Container는 각 Servlet class들이 어떤 method를 가지는지 알 수 없기에 정해진 method를 사용해야한다.
또한 Servlet class들은 WAS라는 하나의 process 안에 thread단위로 실행된다.

  1. init()
    Servlet class를 생성하고 초기화 하는 역할을 수행한다.
    다른 request가 동일한 Servlet class를 사용하면 다시 init()을 호출하는것이 아닌 기존에 생성된 Servlet class를 사용한다

  2. service()
    service()를 통해 request 요청에 대한 처리 로직을 수행한다, overriding하지 않아도 servletContainer가 자동으로 실행하며

    doGet(), doPost()를 내부적으로 실행한다

  3. destroy()
    destory()는 변경, 반납할 자원이 있을때 실행되며 thread 단위로 실행된 Servlet을 종료한다.

Http Protocol가 Server에 Data 전달하는 방식

  1. GET
  2. POST
  3. Https(http에 sercurity 추가 request를 암호화해서 보낸다)
  • default 요청방식은 get방식
  • http message body에는 크기제한이 없다

Http Protocol가 Client에 Data 전달하는 방식

  1. 정적 html로 전달
  2. Servlet을 통한 동적 html 전달
  3. Http message body에 메시지를 담아 전달

Servlet 계층 구조

  1. Servlet
  • Servlet package의 최상위 interface이다 abstract method로는 init(), service(), destory()를 가지고있다.
  1. Generic Servlet
  • Servlet의 구현체이며 프로토콜에 독립적으로 사용 할 수 있는 Servlet
  1. HttpServlet
  • GenericServlet을 상속받고 Servlet의 구현체이다.
  • 반드시 구현해야하는 init(), service(), destory()뿐 아니라 client의 url request에 대한 doPost(), doGet()등의 메서드를 제공한다.
  • HttpServlet의 Service()를 구현하지 않으면 GenericServlet의 Service()를 호출한다.
  • 호출된 GenericServlet의 Service()는 doGet(), doPost()를 호출하고 두 method는 아무것도 overriding된것이 없으면 error를 반환한다.

절대경로 상대경로

http://localhost:8080/edu/testServlet
  • 개발시 위 처럼 경로를 명시하면 ip에 종속적인 개발을 해야한다

    edu/testServlet
  • 위 경로로도 변경이 가능하지만 아직 폴더에 종속적인 개발을 해야한다

./testServlet

-위 경로로 작성하면 경로에 종속되지 않는 개발이 가능하다.(web.xml의 설정을 통해 위 경로가 가능)

HttpServletRequest setCharacterEncoding method

request.setCharacterEncoding("EUC_KR");

setCharacterEncoding method를 통해 Http Request의 Body의 한글화 문제를 해결 할 수 있다.
해당 메서드는 Body부분까지만 적용되기에 Http Header의 start line에 적용하기 위해서는 Tomcat Home의 Server.xml에 아래와 같이 추가하면
Header에도 적용이 가능하다.

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
			   useBodyEncodingForURI="true"/>

용어정리

root tag markup language에서 등장하는 첫번째 태그(html일 경우 이 root tag)
servlet directory, web app, servlet context 웹개발의 표준화된 폴더구조를 지칭하는 용어들
xml(EXtensible Markup Language)

profile
Backend Developer

0개의 댓글