웹 기술 - accidentlywoo/secsec GitHub Wiki

웹 기술

Client Side

  • HTML
  • CSS
  • JS

Server Side

  • ASP : (기반언어) Visual Basic, (웹서버) IIS [ ASP실행용 DLL 포함 ]
  • PHP : (기반언어) Perl, C (웹서버) 아파치 [ PHP실행용 모듈 포함 ]
  • JSP : (기반언어) Java (웹서버) 톰캣, 에진, 웹로직/웹스피어/제우스 [JSP 실행용 엔진포함][서블릿실행용 엔진 포함]*엔진 =

서버연동

IIS[정적문서용] + 톰캣[JSP실행엔진용]

아파치 + 톰캣

Tomcat 뜯어 보기

config -> server.xml / web.xml : 실 운영 서버의 설정

eclipse에 연동된 server의 설정파일들 : 개발 서버의 설정 (설정을 어떻게 하느냐에 따라 다르다.)

Tomcat > config > web.xml에서 Servlet mapping -> servlet-name의 Default와 jsp 차이점 구분하기

C:\수업용sw\apache-tomcat-9.0.36\wtpwebapps 경로에있는 컴파일된 소스코드가 배포된다.

코드가 컴파일 되서 build에 생성된 class파일이

C:\수업용sw\apache-tomcat-9.0.36\wtpwebapps[프로젝트이름]\WEB-INF\classes 디렉토리로 아래에 패키지 포함 class파일 생성

http://localhost/back25/WEB-INF/classes/com.my.control.FirstServlet

-> 접근 불가

WEB-INF는 url로 접근하지 못하게 보안처리되어있고, WAS를 통해 접근해야 한다.

http://localhost/back25/first

WebContent > WEB-INF > web.xml

<servlet>
    <description></description>
    <display-name>FirstServlet</display-name>
    <servlet-name>FirstServlet</servlet-name>
    <servlet-class>com.my.control.FirstServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>FirstServlet</servlet-name>
    <url-pattern>/first</url-pattern>
  </servlet-mapping>

*** ~let(Server _ Book)*** 형태인 Servlet은 Main Thread가 필요없다. 서블릿의 실행은 서블릿 컨테이너의 GernericServlet.service()이 요청 방식(GET, POST)에따라 doGet(), doPost()등 메소드에 해당하는 적절한 doXXX()호출이 한다.doXXX()메소드는 HTTP요청을 해석하고 적절한 응답을 제공할 책임이 있다. 마치 이벤트 헬들러 같은 측면에서 코드의 작성은 개발자가 하고, WAS(Tomcat)에 요청이 들어올때 적절한 메소드가를 호출한다고 생각하면 유용하다.

계층 구조 : Servlet<> -> GernericServlet<> -> ServletHttp

이클립스 java 를 컴파일 소스를 [ant build] 기술로 컴파일된다.

프로젝트용 web.xml 우선순위가 높고 Tomcat > config > web.xml 다음순위이다.

Servlet 2.x -> web.xml 필수

Servlet 3.x -> web.xml 비권장, 어노테이션 사용 권장

WAS(Tomcat)의 Inversion of Controll

  • JAVA SE : Networt, GUI
  • JAVA EE : Servlet

HttpServlet API 보기 : https://docs.oracle.com/javaee/5/api/

HttpServlet 부모 메소드 GenericServlet : https://docs.oracle.com/javaee/5/api/javax/servlet/GenericServlet.html

-> 핵심 메소드 :

  • destroy() : Called by the servlet container to indicate to a servlet that the servlet is being taken out of service.

  • init() : A convenience method which can be overridden so that there's no need to call super.init(config). : initialize하기 이전의 서블릿 클래스는 일반적인 자바 객체이다. init()호출되고 ServletContext가 인스턴스화, 초기화되고, 서블릿의 기능*을 준비한다. : 서블릿의 기능 Servlet객체생성, web.xml 설정적용, Servlet Param 초기화

  • service(ServletRequest req, ServletResponse res) : Called by the servlet container to allow the servlet to respond to a request. : 요청방식에 따른 메소드를 선택해준당 ex) GET -> doGet() / POST -> doPost() : 멀티 쓰레드 프로그램에서 service() 호출이전에 스레드 생성 후 service()호출이된다.

Tomcat Engine 실행작업 순서

  1. web.xml 파일
  2. url-pattern
  3. servlet class찾기
  4. servlet class 생성자 호출(인스턴스화)
  5. init() 호출
  6. ServletContext 생성 (ServletContext param 초기화)
  7. servlet class에 ServletContext와 참조
  8. [멀티 스레드] 스레드 생성
  9. service() 호출
  10. [REST API] HTTP Method에 맞는 메소드 호출

servlet class의 생성자에서 ServletContext param을 참조하면 NPE이 발생한다.

Tomcat과 Jeus 등의 ServletContext객체에서 생성되는 HttpServletRequest/HttpServletResponse 객체의 생성시점이 다르다!

Tomcat은 클라이언트의 요청이 들어오자마자 만들어지고, Jeus는 서블릿 객체를 생성, 생성자호출, init()호출하는 이때에 만들어진다.

HttpServletRequest/ HttpServletResponse 뽄지르기

MIME 자료 :

경로를 정리해 보자

클라이언트 사이드 소스에서 경로 지정 jq/first.html -> http://localhost/back25/jq/first.html

Request!

url입력, 링크 클릭은 GET방식 요청처리된다.

JSP 파기

JSP는 서블릿 컨테이너가 Servlet으로 자동 변환된다.

경로 -> $\apache-tomcat-9.0.36\work\Catalina\localhost\back25\org\apache\jsp

org.apache.jasper.runtime.HttpJspBase -> HttpServlet을 상속받았다.

요청시 자동 호출되는 메소드 _jspService(req, res)

⚠️ **GitHub.com Fallback** ⚠️