



주말동안 풀스택




웹 서버 → 정적인 결과를 전달
WAS → 동적인 결과를 전달하는 역할
CSS
•
box - model이라 불리는 속성들(width, height, margin, padding, border)와 같은 크기와 배치 관련된 속성들은 하위 엘리먼트로 상속이 되지 않는다.
•
CSS는 여러가지 스타일정보를 기반으로 최종적으로 '경쟁'에 의해서 적절한 스타일이 반영된다.
•
inline > internal > external
•
동일하면 나중의 것 , 구체적으로 표현이 되어있으면 우선해서 적용됨.
•
id가 우선이다
•
이런 성질을 css specificity라고 함
엘리먼트가 배치되는 방식
기본적으로 위에서 아래로 쌓이는게 기본이다.
•
display
block : 위에서 아래로 쌓인다
div, p 등등, p태그: 기본적으로 마진이 있다.
inline: 좌에서 옆으로 쌓인다.
우측으로 흐르고, 꽉 차면 아래쪽으로 흐른다.
•
position
position 속성은 기본 static
absolute는 기준점에 따라서 특별한 위치에 위치, 상위 엘리먼트 들 중에 static이 아닌 포지션을 가지는 엘리먼트
•
float
기본 엘리먼트 배치에서 벗어나서 떠다니느 듯한 느낌
블록 엘리먼트는 기본적으로 부모의 사이즈를 가진다.
box-sizing: border-box → 경계를 기준으로 박스 사이즈를 정한다.
자식이 float면 자식의 사이즈를 인식을 못한다 → overflow: auto , overflow: hidden
부모가 float면 부모의 자리를 자식이 가져간다 → clear:left
html, css 디버깅
Servlet
LifecycleServlet
요청 시에 매번 서블릿을 만들지 않고 service만 실행시킨다.
destroy 메소드는 언제 실행시키냐 → 웹어플리케이션이 수정되거나 메모리에서 unload될 때
HttpServletRequest : 헤더 정보, 파라미터, 쿠키, URI, URL 등의 정보, Body의 Stream을 읽어들이는 메소드를 가지고 있다.
JSP
리다이렉트
특정 url로 이동하라고 요청하기
redirect하기 위해 HttpServletResponse가 가지고 있는 sendRedirect()
response.sendRedirect("redirect02.jsp");
forward
Servlet1에서 일을 처리하다가 나머지 일을 Servlet2가 처리하도록
리다이렉트의 결과는 다른 URL로 가라고 요청을 백하는 것
Forward의 결과 = 요청이 1개, 이 요청을 넘겼을 뿐
Redirect = 요청이 2개가 생성,
request.setAttribute("dice", diceValue);
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/nextServlet");
requestDispatcher.forward(request, response);
Java
복사
계산은 Servlet에서 표시는 Jsp에서
Scope
선언된 한 페이지에서 사용할 수 있는 것 → Page
클라이언트로부터 요청이 들어온 거부터 응답을 보낼 때까지→ Reqeust
Session 객체가 생성되서 소멸될 때까지 → Session, 하나가 아니라 여러 개의 요청이 들어와도 남아있는 것(상태유지)
하나의 웹 어플리케이션이 생성되서 소멸될때까지 계속 유지하고 있는 → Application
Page Scope
•
PageContext 추상 클래스를 사용한다.
•
pageContext = getPageContext(this, reqeust, response) 등등
•
pageContext.getAttribute() 이렇게 사용하면 됨.
•
JSP페이지에서 pageContext라는 내장객체로 사용가능하다.
•
JSP에서 pageScope에 값을 저장한 후 해당 값을 EL표기법 등에서 사용할 때 사용됨.
•
지역변수처럼 사용
Request Scope
•
HttpServletRequest 객체를 사용
•
JSP에서는 request 내장 변수를 사용
•
서블릿에서는 HttpServletRequest 객체를 사용
Session Scope
•
HttpSession 인터페이스를 구현한 객체를 사용
•
JSP에서는 session내장 변수를 사용
•
서블릿에서는 HttpServletRequest의 getSession()메소드를 이용하여 session 객체를 얻는다.
•
setAttribute(), getAttribute()
Application Scope
•
웹 어플리케이션이 시작되고 종료될때까지 변수를 사용
•
ServletContext 인터페이스를 구현한 객체를 사용
•
jsp에서는 application 내장 객체를 이용
•
서블릿의 경우 getServletContext()메소드를 이용하여 application 객체를 이용
EL
${expr} : 값을 나타내는 부분
${<표현1>,<표현2>} : 객체를 표현한다
표현1이 Map일 경우 표현2를 key로한 값을 반환
표현1이 List나 배열이면, 표현2가 정수일 경우 해당 정수번째 index에 해당하는 값을 반환, 정수가 아닐 경우 오류 발생
표현1이 객체일 경우에는 표현2에 해당하는 getter 메소드에 해당하는 메소드를 호출한 결과를 반환
${"10"+1} → ${10+1} 숫자가 아닌 객체와 수치 연산자 사용할 경우 객체를 숫자 값으로 변환
${"열" + 1} → 에러
${null + 1} → ${0+1} 수치 연산자에서 사용되는 객체가 null이면 0으로 처리
비교연산자 논리연산자 모두 사용 가능
<%@ page isELIgnored = "true" %> → EL이 실행되지 않는다.
JSTL
태그 형식으로 조건문, 반복문 등을 사용할 수 있다.
JSP Standard Tag Library
사용하려면 다운받아서 WEB-INF/lib 폴더에 넣는다.
라이브러리, XML , 국제화, 데이터베이스, 함수 등등의 라이브러리가 있다
코어
쓸꺼라는 지시자를 지정해줘야한다
<%@ taglib prefix = "c" % uri = "http://java.sun.com/jsp/jstl/core">
태그들이 존재
set, remove : 변수 지원 태그
4가지 스코프에다가 값을 저장할 수 있다.
<c: set var = "varName" scope = "session" value = "someValue"/>
쓸 때는
성 : ${valueName}
<c : remove var = "value1" scope = "request"/>
프로퍼티, 맵의 처리
<c: set target = "${some}" property = "propertyName" value = "anyValue"/>
some 객체가 자바빈일 경우, some.setPropertyName(anyvalue)
some 객체가 map일 경우 some.put(preopertyName, anyValue);
if
<c:if test = "조건">
....
</c:if>
HTML
복사
choose
<c:choose>
<c:when test = "조건1">
...
</c:when>
<c:when test = "조건2">
...
</c:when>
<c:otherwise>
...
</c:otherwise>
</c:choose>
HTML
복사
forEach
<c:forEach var = "변수" items = "아이템" [begin = "시작번호"] [end = "끝번호"]>
...
<!--아이템에는 collection 객체는 전부 가능 -->
${변수}
</c:forEach>
HTML
복사
import
특정한 url페이지의 결과를 변수에 저장해서 사용할 수 있다.
url → 읽어들여오고 싶은 url
변수 → 저장하려는 변수들
param → 쿼리 문자열까지 포함시켜서 url을 실행시키고 싶으면 사용하자
<c:import url = "URL" charEncoding = "캐릭터인코딩" var = "변수명" scope = "범위">
<c:param name = "파라미터이름" value = "파라미터 값"/>
<c:import>
HTML
복사
redirect
<c:redirect url = "리다이렉트 URL">
<c:param name = "파라미터이름" value = "파라미터값"/>
</c:redirect>
HTML
복사
out
JspWriter에 데이터를 출력
<c:out value = "value" escapeXml = "{true|false}" default = "defaultValue"/?
HTML
복사
value - JspWriter에 출력할 값을 나타냄. String 과 같은 문자열.
escapeXml - true일 경우, 아래 표와 같이 문자를 변경
AOP
Aspect Oriented Project
class A{
method a(){
AAAA
BBBB
}
method b(){
AAAA
BBBB
}
}
공통적인 일들은 모아서 별도의 클래스의 메소드로 빼놓자
구현하는 방법 :
1.
2.
바이트코드 조작, A.class →(AOP) → 메모리 (AspectJ)
3.
프록시 패턴 (스프링 AOP)
디자인 패턴을 사용해서 AOP와 같은 효과를 내는 방식