2020-11-20

jsbak·2020년 11월 20일
0

QTN 길게 쓰기 싫을 때 사용하는 형태가 import

클래스패스 동적으로 변경될 수 있는 것

톰켓이 가진 jar파일이 ee가 가진 API일부를 사용가능했다.
그래서 가능

웹어플리케이션 구동할때는 단순히 메인쓰레드 구동이 아닌 WAS(웹.어.서), 가

  1. 어플리케이션(컨텍스트?) 관리

하나의 어플리케이션 안에는 서버,클라이언트 사이드 다 존재

주소를 띄는데 주소상에서 우리가 쓰는게 로컬호스트(가상경로체계, webapps까지 들어간 것)
WEB-INF 외부에서 URL로 접근 불가능하다(보호자원, 보호가 필요한 자원이 들어간다)

컨텍스트에 서블릿하나 개발해서 넣어줬는데
톰캣이 가지는 자르파일을 클래스 패스로 잡아야하니 옵션이 추가되었고
내 클래스에 가져와야함
그래서 -d라는 옵션을 사용했음
classes약속된 폴더로 "하나의 컨텍스트에 유효한"
서로간에 달라 서로 접근이 불가능함

톰켓은 멍청 우리안에 뭔가 있어도 알려주기전에는 모름
그래서 서블릿을 등록 (맵핑), 왜 인지해야하나?(톰켓이 서블릿컨테이너이기 때문)
컨테이너 : 컴포넌트의 라이프사이클을 관리
서블릿 컨테이너 >> 서블릿 라이프 사이클을 관리, 인스턴스에 해댱하는 클레스를 알고 있어야함

  1. 서블릿 등록 web.xml 그래서 서블릿이름 등등을 입력해야함

톰켓도 객체를 생성하려면 언제 생성할지 시점을 알아야함, 근데 싱글턴으로 최초 요청 받았을때 생성을 한다. 웹상에서 발생하는데 요청이 클라이언트가 어떤요청을 날릴지 모름

  1. 서블릿 맵핑 xml 서블릿이름에 해당하는 url패턴 입력

  2. 톰켓은 배포 서술자를 처음에 서버가 구동되어 어플리케이션이 로딩되는 순간 딱 한번
    그래서 다시 읽을 수 있도록 서버를 리로딩해야하는것

그리고 나서 원래 왔던 요청의 경로로 돌려줌

서블릿은 라이프사이클을 관리하다가 요청이 오면 쓰레드를 통해서 해당요청을 처리

단점 : 해야할 일이 많은 개발자, 2. 재컴파일 재배치 ,등등 3. 여러 언어의 형태가 섞인다.

JSP 따로 등록 매핑 한적이 없어 따로 리로딩 한적이 없고 그냥 실행하면됨 개발자의 일이 줄음
JSP거의 대부분 정적인코드 , 대신 중간에 뭐 넣을때 스크

work밑에 ?? 보니까 사실 서블릿과 JSP는 같은 녀석이었다.

톰켓 : 미들티어 WAS, 서블릿 컨테이너, JSP컨테이터 등이 될 수 있다.

이클립스가 가진 톰캣


이클립스 에서는 wtpwebapps가 독베이스임


바로가기 만듬


Java Properties File, Properties File 관련 빼고 나머지 다 UTF-8


콩글리시 빨간거 뜨는거 제거


자동완성은 ctrl space하면 하게 되게끔 원래는 상시 대기임

Validation 체킹 ? 전부 disabled

Yes


기본 Charater 셋을 UTF-8인지 확인

html, css, jsp UTF-8인지 확인



Target runtime이나 web module version 확인

서블릿 스펙 버전이 3.1 이고 톰캣이 8.5인지 확인

빌드 패스(클래스패스)

톰켓은 web-inf 아래 클래시스가 필요
저 아래 폴더가 클래스 패스인데 배포가 되면 web-inf에 bulid/classes에 있는 녀석들을 고스란히 옮겨 준다.

관리가 수월하게 폴더가 여러개 인것이지 하나에 있어도 전혀 문제가 없다는 사실을 알 수 있다.
xml을 클래스 패스 리소스로 만들기 위해서?

클래스 패스 리소스의 특징? 클래스 패스 리소스?? 웹리소스? 자원에 접근하는 방법이 다르다.
웹 리소스는 네트워크상에서 url 주소체계상으로 접근

얘 체킹

build는 개발자 영역이 아니고 대표적으로 classes가 존재함.

위아래 접근할 수 있는 영역의 차이, 웹상에서 다이렉트로 접근되는 영역이나 주소로 통해ㅑ서 접근 불 가능한 영역이냐의 차이이다. WebcContent아래는 주소체계로 접근 가능 html, css jsp등등
java Re소스는

java Re소스는 클래스패스 아래 그래서 클래스 패스 리소스
WebContent는 임시 폴더 배포시 사라짐 대신에 이아래 모든 파일은 Context Root로 간다.
대신 이 depth구조로 들어가서 반영이 된다. 클라이언트가 접근 가능한 파일인 것 그래서 웹 리소스
당연히 그래서 접근할때 두 개의 주소 체계가 달라진다.

WebContent 관리가 쉽게 하기 위해서 가짐(고정적인 이름이 아니다)

웹리소스로 접근이 된것이다.

매핑이 기본적으로 되어있어 이름을 치지않아도 자동으로 가진다.

개발에 사용되는 클래스패스는 build 아래 있다?


얘 가 웹 INF 안에 classses에 고스란히 들어간다.

클래스 로더? 클래스패스의 맨처음을 찾기 위한 녀석?
A라는 클래스를 메모리에 적재하기 위해 일할때나 어떤일을 할때 모든걸 클래스 패스에서 찾아야하는한다.

서버안에 있는 주소를 접근할떄는 어떻게 하는가?
contextRoot로 부터 접근 (아무것도 없음)/web-inf/web.xml
이것이 서버 사이드의 형태, 서버에서 자원접근시는 이렇게
클라이언트에서 접근시에는 클라이언트 사이드의 형태로 접근

클래스 패스 리소스
, 웹 리소스 자원을 어떻게 접근하는가에 따라 이야하면된다는데

리소스 3가지
파일, 클래스 패스, 웹

MIME

  • MIME : Multipurposed Internet Mail Extension
    지금 오고 가는 형태가 어떤 것 인지를 알 수 있어야한다. 메일의 첨부파일의 형태를 알아야한다.
    메일에서도 첨부파일의 확장자를 보고 알수 있듯이 그걸 그대로 가져온것이 MIME이다.
    mime를 보내온 형식으로 해당하는 것을 실행시키면 되기 때문에.
    MIME로 반대편 브라우저의 다음 행동을 결정 시킬수 있다. (html이라 보내면 문장이 나오는데 plain을 보내면 태그도 다나온다.)
    메인타입/서브타입, main_type/sub_type;charset=encoding 이런형식
    text/html;charset=EUC-KR html형식으 text문서인데 인코딩이 EUC-KR로 되어있다.
    PrintWriter가 개방되기 이전에 이것을 새팅해야한다. 형식은 main_type/sub_type;charset=encoding 이렇게
    setContentType(main_type/sub_type;charset=encoding)

1.이미지 스트리밍 완성

3.클라에 이미지 목록 제공
4.클라가 선택하기 하기
5.선택한 서비스를 제공

클라이언트 입장에서
받는다 get
쓴다 post
그래서 가져오기 위해서 doget을 오버라이딩

//파일/폴더의 위치정보가 필요
//경로가 D: 이러기 때문에 파일시스템 리소스라함.

톰캣은 서블릿 집합

web.xml가 존재하고 {org.apache.catalina.servlets.DefaultServlet} 중요

 <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
 </servlet>

jsp 파일을 가져가서 컴파일하는 녀석이

 <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>

\/ 일단 모든 경로
일단 모든 요청을 잡아버린다는 부분 여기서 받고 다른 서블릿으로 보내준다. *.jsp라는 모든 것을 잡겠다

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- The mappings for the JSP servlet -->
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>

mime도 등록되어있다, 근데 모든게 다 있는게 아니라 커스텀하고 싶으면 여기에 등록하면된다. hwp파일

 <mime-mapping>
        <extension>123</extension>
        <mime-type>application/vnd.lotus-1-2-3</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>3dml</extension>
        <mime-type>text/vnd.in3d.3dml</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>3ds</extension>
        <mime-type>image/x-3ds</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>3g2</extension>
        <mime-type>video/3gpp2</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>3gp</extension>
        <mime-type>video/3gpp</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>7z</extension>
        <mime-type>application/x-7z-compressed</mime-type>
    </mime-mapping>

상수풀: 바뀌지 않는 값, 가비지 컬렉션 X
힙: 메모리 객체, 가비지 컬렉션 O

기술면접.. String, String버퍼 빌더 차이 등등 메모리 관련해서 이야기쳐 하기

서블릿 소스, tmpl소스 두가지

ibatis가 템플릿 메서드 패턴이 적용되어 있었다

과제

  1. 디자인 패턴에서 템플릿 디자인 패턴을 포함함, 빌더, 전략, 퍼사드, 디자인패턴 공부해보기
  2. ibatis의 소스코드 까보기?? 템플릿 메서드 패턴이 어떻게 되는 지 볼 수 있다.
  3. 정규표현식에 대해서 다시 보고 올것.. 정리
  4. 고급 자바떄 했던 서블릿과 JSP가 동작하는 구조를 다시 한번 공부하기
profile
끄적끄적 쓰는곳

0개의 댓글