본문 바로가기
개발자/취업

대답 제대로 못했던 질문들 정리하기

by mingutistory 2020. 7. 13.
728x90

jsp forward, redirect

jsp 환경에서 다른 페이지로 이동하는 페이지 전환 기능들.  

forward : 웹 컨테이너 차원에서의 페이지 이동만 있는 것. 실제로 클라이언트는 다른 페이지로 이동했는지 알 수 없음. 현재 실행중인 페이지와 forwarding에 의해 호출 될 페이지는 request와 response 객체를 공유함. 사용자가 최초로 요청한 요청 정보는 다음 url에서 유효. url에 변화가 없음. 웹 컨테이너 차원에서의 페이지 이동 = 동일한 웹 컨테이너에 있는 페이지로만 이동이 가능. 

 

redirect : 새로운 페이지에서는 request와 response 객체가 새롭게 생성되므로 처음에 보냈던 요청 정보는 유효하지 않음. 추가적으로 발생한 처리 때문에 forward보다 느림. url에 변화가 있음. 

 

웹 컨테이너란? 웹 서버의 내부에서 서블릿 클래스 또는 JSP 파일을 실행하기 위한 실행 환경을 제공하는 역할. 웹 서버에서 jsp를 요청하면 웹 컨테이너에서는 jsp 파일을 서블릿 파일로 변환한 뒤 컴파일 하여 이것을 실행한 결과를 웹 서버에 전달함. 

 

웹 서버란? 사용자가 요청하는 정적 컨텐츠를 전달하는 소프트웨어/하드웨어. ex) Apache..

 

WAS ?  웹 서버 + 웹 컨테이너. 사용자의 요청에 따라 서버에서 프로그램을 실행 및 처리한 뒤 정적인 페이지로 변환해서 반환해주는 동적인 처리 담당. ex) Tomcat, Oracle .. 웹 서버를 통해서 필요한 페이지를 요청 받음

Container가 web.xml을 참조하여 스레드 생성, 요청 및 응답 객체(HttpServletRequest, HttpServletResponse)를 생성하여 스레드에게 전달. Container는 사용자의 요청에 맞는 Servlet 호출.

호출된 Servlet의 요청을 담당하는 thread가 요청에 따라 doGet(), doPost()를 호출하고 동적인 페이지를 response 객체에 실어 Container에게 전달.

Container은 전달받은 Response 객체를 HttpResponse 형태로 전환하여 웹서버에 전달. 생성되었던 스레드를 종료하고 요청 및 응답 객체 소멸.

 

block,inline

displaly 속성 

block : 줄 바꿈이 일어남. 텍스트와 인라인 요소를 포함 할 수 있음. 블락 요소 안에 또 다른 블락 요소를 포함 할 수 있음. dex) div, p, section, table.. 

inline : 줄 바꿈이 일어나지 않음. 텍스트와 인라인 요소를 포함 할 수 있지만 블록 요소는 포함 할 수 없음. ex) a, button, span.. 

 

servlet의 생명주기(LifeCycle)

클라이언트가 Servlet에 요청을 하면 객체를 생성하고 초기화 작업을 거친 후 요청을 처리 함.

servlet : 서버에서 웹페이지를 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램. java 코드 안에 html 태그가 삽입 되어 만들어지며 확장자는 .java

jsp : html 내부에 java 코드를 삽입하는 형식.

 

instanceof 객체 타입 확인

형변환 가능 여부 true or false.

부모 객체인지 자식 객체인지 확인.

A 클래스(부모) B 클래스(자식) 인 경우. a instance of A (T)b instance of A (T)a instance of B (F) // 부모 클래스의 객체는 자식 클래스로 형변환 할 수 없음.b instance of B (T)

 

getClass : 현재 참조하고 있는 클래스 확인

objA.getClass(); 

 

상속 : 부모, 자식 클래스 관계

 

string, stringubuilder, stringbuffer 메모리 관련

 

String은 new 연산자를 통해 생성되면 인스턴스 메모리 공간이 절대 변하지 않으므로 +, concat과 같은 연산시 메모리의 내용이 변하는 것이 아니라 새로운 String 인스턴스가 생성됨. 이렇게 새로운 문자열이 만들어지면 기본의 문자열은 가비지 콜렉터에 의해 제거되야 함. 문자열 연산이 많아지는 경우 성능이 떨어짐. 하지만 불변하기 때문에 조회가 빠르고 멀티스레드 환경에서 동기화를 신경 쓸 필요 없음.

 

StringBuffer와 StringBuilder는 String과 다르게 클래스는 한 번만 만들고 메모리의 값을 변경시켜서 문자열을 변경함. 그러므로 문자열 연산이 자주 있을 때 사용하면 좋음.

 

StringBuffer은 멀티 스레드 환경에서 synchronize 키워드가 가능하므로 동기화가 가능하다. StringBuilder는 동기화를 지원하지 않기 때문에 멀티 스레드 환경에서 적합하지 않음.

 

참고

https://doublesprogramming.tistory.com/63

300x250

댓글