유튜브 JSP 강의 정리
1~3강
웹서버: 클라이언트의 요청에 의해 제공해는 서버, 별도의 구현이 필요한 로직이 있을 경우 웹어플리케이션 서버에 요청
웹브라우저: 웹서버에 정보를 요청하고, 웹서버로부터 정보를 받는 매개체, 이때 http프로트콜을 사용
JSP
동적 웹어플리케이션/클라이언트의 요청에 동적으로 작동, 응답은html을 이용/ jsp는 서블릿으로 변환되어 실행/mvc패턴에선 view로 이용
m 모델(데이터구조)
v 뷰(jsp)
c 컨트롤러(모델과 뷰를 연결, 서블릿)
3. MVC패턴(Model-View-Controller pattern)
: MVC(Model-View-Controller) 구조는 전통적인 GUI(Graphic User interface) 기반의 어플리케이션을 구현하기 위한 디자인 패턴이다. MVC 구조는 사용자의 입력을 받아서, 그 입력 혹은 이벤트에 대한 처리를 하고, 그 결과를 다시 사용자에게 표시하기 위한 최적화된 설계를 제시한다.
1) 뷰(View)는 화면에 내용을 표출하는 역할을 담당하는 것으로 데이터가 어떻게 생성되고, 어디서 왔는지에 전혀 관여하지 않는다. 단지 정보를 보여주는 역할만을 담당한다. JSP기반의 웹 어플리케이션에서는 JSP페이지가 뷰(View)에 해당한다.
2) 모델(Model)은 로직을 가지는 부분으로 DB와의 연동을 통해서 데이터를 가져와 어떤 작업을 처리하거나, 처리한 작업의 결과를 데이터로서 DB에 저장하는 일을 처리한다. 모델(Model)은 어플리케이션의 수행에 필요한 데이터를 모델링하고 비즈니스 로직을 처리한다. 즉, 데이터를 생성하고 저장하고 처리하는 역할만을 담당한다. JSP기반의 웹 어플리케이션에서는 자바빈(JavaBean)이 모델(Model)에 해당한다.
3) 컨트롤러(Controller)는 어플리케이션의 흐름을 제어하는 것으로 뷰(View)와 모델(Model)사이에서 이들의 흐름을 제어한다. 컨트롤러(Controller)는 사용자의 요청을 받아서 모델(Model)에 넘겨주고, 모델(Model)이 처리한 작업의 결과를 뷰(View)에 보내주는 역할을 한다. JSP기반의 웹 어플리케이션에서는 보통 서블릿(Servlet)을 컨트롤러(Controller)로 사용한다.
출처: http://dawnisthm.tistory.com/entry/MVC-패턴-구현이론 [패션과 IT]
jsp아키텍처
.jsp >> .java(톰캣에서해줌?) >> .class(컴파일/jvm을 위한)
4강
서블릿은 자바 파일
>>매핑과정
자바스레드이용하여 동작>>으로 인해 요청이 몰려도 서버의 부하가 적게걸림
컨트롤러로 이용됨
매핑은 간단히 말해서 닉네임 (닉네임을 정해서 주소에 매핑에 맞는값을 받으면 헬로월드서블릿에 접근)
매핑을 하는 이유는 맵핑안하면 길고, 보안에 노출되어있기 때문
서블릿태그 서블릿>>클래스를 서블릿네임으로 정해서 접근
서블릿매핑 >> 방금 정한 이름을 /hw 으로 접근하겠다 명시
어노테이션으로도 매핑을 할수 있음 @~~
5강
서블릿클래스는 http서블릿 클래스를 상속 받음
서블릿(인터페이스) - genericservlet(abstract) - htppservlet
클라이언트 << 요청(클라이언트한테오는 정보[아이디 등 정보 보냄])/응답(디비에서 확인을해서 맞는지아는지 정보 보냄) >> was(웹어플리케이션서버)
get방식 post방식 (클라이언트에서 aws 요청을 하는데 html태그안에 메소드 방식에 따라 달라짐) : get방식으로 오면 doget방식 메소드 호출
post방식이면 dopost메소드 실행
get: url값에 정보를 실어서 전송되어 보안에 약함
post: 헤더를 이용해 정보가 전송되기 때문에 보안에 강함(사용자가 url에 표시된 정보를 볼수 없음)
6강
클라이언트에서 서블릿요청이 들어오면 서버에서는 서블릿컨테이너를 만들고 요청이 있을때마다 스레드가 생성됨
웹브라우저> 웹서버 > 웹어플리케이션서버(aws) > 서블릿 컨테이너(스레드 생성, 서블릿 객체 생성)
서블릿 장점 -
리퀘스트(요청)를 처리할 객체가 생성 (다른건 요청이올때마다 객체를 생성함 요청이많이 들어오면 부하가 걸림)
서블릿은 jvm에 스레드가 하나 생성(여기서 요청처리) >>다른 cgi? 언어에 비해서 서버 부하가 적게 발생
[ CGI란 공통 게이트웨이 인터페이스(common gateway interface)의 약어로, 웹서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약들을 말한다.]
생명주기(라이플 사이클)
서블릿의 사용도가 높은 이유는 빠른 응답속도 //서블릿은 최초 요청시 객체가 만들어져 메모리에 로딩되고, 이후 요청시에는 기존 객체 재활용 >> 따라서 속도가 빠름
서블릿 객체생성 > init() > service(서비스를 통해 연결?? 검색해 볼것!),[doget,dopost] > destroy()
선처리, 후처리
init호출하기전에 선처리(@PostConstruct) destroy 후에 후처리(@PreDestroy) 그냥 실행되는 시점 설명하는듯
7강
html form태그 : 서버쪽으로 정보를 전달할때 사용하는 태그
input태그 (ex text, password, submit, checkbox, radio, reset 등)
form태그: input태그들의 값을 서버로 전송하기 위한 정보를 담고있음
여기서 get이면 http://~~~:8080/hello/join?id="aa"&name="홍" //post는 ~~~join/
서블릿 파라미터
서블릿에서 httpservletrequest 객체를 이용해 파라미터값을 얻을 수 있음 ex) string id = request.getParameter("id");
한글처리
get방식( server.xml 수정 <Connector URIEncoding="EUC-KR" port="8181"~~
post방식 dopost에 request.setCharacterEncoding("EUC-KR);
8강
서블릿 초기화 파라미터:특정 서블릿이 생성될때 초기에 필요한 데이터 ( 경로, 아이디 정보 등) >초기화 파라미터> web.xml에 기술 > 서블릿파일에서는 servletconfig 클래스를 이용해 접근 or 서블릿파일에 직접 기술
web.xml ex)<init-param><param-name>~~</~></~>
>>서블릿에서 getinitparameter로 가져올수잇음
서블릿파일에 직접기술: @WebInitParam(name="id", value="abc"),@WebInitParam(name="pw", value="abc"),,,이런식으로
servletcontext 데이터 공유
여러서블릿에서 특정 데이터를 공유할 경우 context parameter를 이용해 web.xml에 기술을 하고 서블릿에서 공유하면서 사용 가능
<context-param><param-name><param-value></~></~></~>
>>서블릿에서 getServletContext().getInitParameter("id")
servletcontextlistener 웹어플리케이션 감시
웹어플리케이션(컴포넌트들을 묶어논 프로그램?)의 생명주기 감시하는 리스너
web.xml에 리스너등록 <listener><listener-class>com.jva~~.ad~</~></~>
리스너 클래스 따로 제작(아까한것보다더 더 먼저 실행, 나중에 실행 강의에선 순서설명함)
web.xml에 리스너등록안하고 클래기스 @WebListener 해도 되는듯
9강
jsp는 서블릿과 반대로 html코드에 자바 언어를 삽입하여 동적문서를 만듬
jsp태그종류
지시자<%@ %> : 페이지 속성
주석 <%-- --%>
선언 <%! %> : 변수, 메소드 선언
표현식 <%= %> :결과값 출력 (;이 붙지않음)
스크립트릿 <% %> java코드
액션 태그 <jsp:action> </jsp:action> : 자바빈 연결
jsp주석은 안보임..?
jsp동작원리
클라이언트가 웹브라우저로 dawd.jsp를 요청하게되면 jsp컨테이너가 jsp파일을 servlet파일(.java)로 뱐환됨
servlet파일(.java)은 컴파일 된 후 클래스 파일(.class)로 변환되고, 요청한 클라이언트한테 html파일 형태로 응답
jsp내부객체: (객체를생성하지않고 바로 사용할수있는 객체)
내부객체는 jsp컨테이너에 의해 servlet으로 변환될때 자동으로 객체가 생성
ex) request, response, out, page, config, session, exception 등
10강
스크립트릿, 선언, 표현식 >>스크립(scripe)
jsp문서안에 java문서언어를 넣기 위한 방식들 > 많이 쓰임
스크립트림(scriptlet) <% java코드 기술 %>: jsp페이지내에서 java언어를 사용하기 위한 요소 중 가장 많이 사용
선언(<%! java코드 기술 %>: jsp페이지 내에서 사용되는 변수 또는 메소드(전역의 의미)
표현식<%= java코드 기술 %>: jsp페이지 내에서 사용되는 변수의 값 또는 메소드 호출 결과값을 출력하기 위해 사용, string타입이며, ;를 사용불가
지시자<%@ %>: jsp페이지의 전체적인 속성을 지정할때 사용
(page 해당 페이지의 전체적인 속성 [import/language 등등],
include 별도의 페이지를 현재 페이지에 삽입 [include file="dad.jsp"],
taglib 태그라이브러리의 태그 사용 [사용자가 만든 tag를 사용하기위해 사용, uri(라이브러리위치값) 및 prefix속성(태그를 가리키는 이름)이있음 )
주석
html<!-- -->
jsp<%-- --%>
11강
request객체의 이해: 웹브라우저를 통해 서버에 어떤 정보를 요청하는것
request객체관련 메소드 getContextPath() / getMethod() / getSession / getProtocol 등등
getParameter가 많이 쓰임
getParameter(String name): name에 해당하는 파라미터 값 구함
getParameterNames: 모든 파라미터 이름을 구함
getParameterValues(String name): name에 해당하는 파라미터값들을 구함
response객체의 이해: 웹브라우저의 요청에 응답하는것
response관련 메소드 getCharcterEncoding() / sendRedirect(URL) 등
12강
액션태그 : jsp페이지 내에서 어떤 동작을 하도록 지시하는 태그 (페이지 이동, 페이지 include 등)
forward 현재 페이지에서 다른 특정페이지로 전환 <jsp:forward page="sss.jsp"/>
include 현재페이지에 다른 페이지 삽입 <jsp:include page="inda.jsp" flush="true" />
param forward 및 include 태그에 데이터 전달을 목적 <jsp:forward page="sss.jsp"><jsp:param name="id" value="aa"/></jsp:forward>
13강
쿠키 : http프로토콜은 응답후 관계를 끊음, 연결이 끊겼을때 어떤 정보를 지속적으로 유지하기위한 수단 (클라이언트 측에 저장, 서버에 요청할때마다 쿠키의 속성값을 참조 또는 변경가능, 4kb용량, 300개까지 데이터 정보를 가질수 있음)
쿠키 문법: 쿠키 생성(쿠키 클래스) > 속성 설정(setter) > response객체에 쿠키 탑재
setMaxAge(), setpath() 등등...
14강
세션 : 쿠키와 마찬가지로 서버와의 관계를 유지하기 위한 수단 , 쿠키와 달리 클라이언트에 특정 위치에 저장되는 것이 아니라, 서버상에 객체로 존재 > 서버에서만 접근이 가능하여 보안이 좋고, 저장할 수 있는 데이터에 한계가 없음
세션 문법: 클라이언트 요청이 발생하면 자동생성: 클라이언트 요청 > 세션 자동 생성 > 세션 속성 설정
setAttribute(), getId() 등등
15강
예외페이지 : 예외발생시 예외페이지로 이동
페이지 지시자를 이용한 예외 페이지<%@ page errorPage ="errorPage.jsp"%> >> errorPage.jsp: <%@ page isErrorPage="true"%>(예외페이지인 경우 true로 명시해줄것) <% response.setStatus(200);%><%= exception.getMeessage()%>
web.xml 파일로 예외처리 : <error-page><error-code>404</error-code><location>/error404.jsp</location></error-page> 추가
16강
자바 빈 : 반본적인 작업을 효율적으로 하기위해 사용, java언와의 데이터(속성)와 기능(메소드)로 이루어진 클래스. ex(도메인 부분 board, user 등)
빈 관련 액션 태그(useBean: 특정 빈을 사용한다고 명시 할때 <jsp:useBean id="student" class="com.javalec.ex.~~" scope="page" />
, setProperty: 데이터 값을 설장할때 <jsp:setProperty name="student" property="name" value="홍길동" />
, getProperty:데이터 값을 가져올때 <jsp:getProperty name:student property="name"/>
)
17강 ~19강
데이터 베이스
dbms(database managerment system) 데이터베이스 관리 시스템 응용프로그램(웹어플리케이션jsp,java등등) >> dbms >> DataBase
jdbc java프로그램에서 sql문을 실행하여 데이터를 관리하기 위한 java api
다양한 데이터베이스에 대해서 별도의 프로그램을 만들 필요 없이, 해당 데이터베이스의 jdbc를 이용하면 하나의 프로그램으로 데이터 베이스를관리
데이터베이스 연결 순서: jdbc 드라이버 로드 > 데이터베이스 연결 > sql문 실행 > 데이터베이스 연결 해제
statement > excuteQuery() [select]/ excuteUpdate() [insert, delete, update 등]
resultset : excuteqeury 실행후 반환되는 레코드 셋
회원관리 실습
20강
커넥션 풀
DAO: Data Access Object : 데이터베이스에 접속해 데이터 추가, 삭제, 수정 등의 작업을 하는 클래스
DTO: Data Transfer Object: 데이터를 관리하기위해 데이터의 클래스를 만들어 사용
DBCP(커넥션 풀) : 클라이언트에 다수의 요청이 발생할 겨우 데이터베이스에 부하가 발생하게 됩니다. 이러한 문제를 해결하기 위해 이용
preparedStatement객체를 이용해 쿼리 중복코드 줄임
21강 ~22강
회원인증 프로그램 실습 ,파일 업로드
23강
EL
Expression Language : 표현식 또는 액션 태그를 대신해서 값을 표현하는 언어 &{}
<jsp:getProperty name="memeber" property="name"/> >>> &{member.name}
내장객체
pageScope: 페이지 객체를 참조하는 객체
requestScope :request 객체를 참조하는 객체
sessionScope: ~
applicationScope : ~
param:요청파라미터를 참조하는 객체
paramValues: 요청 파라미터(배열)을 참조하는 객체
initParam: 초기화 파라미터를 참조하는 객체
cookie: cookie객체를 참조하는 객체
24강
JSTL(JSP Standard tag library)
JSTL에서는 다섯가지의 라이브러리를 제공합니다(core, XML Procession .등등...)
Core라이브러리: 기본적인 라이브러리로 출력, 제어문, 반복문 같은 기능 포함
<%@ taglib uri=http://java.sun.com/jsp/jstl/core prefix="c" %>
출력 <c:out>
변수 설정 <c:set>
변수 제거<c:remove>
예외처리<c:catch var="변수명">
if<c:if>
for <c:forEach>
페이지 이동 <c:redirect>
파라미터 전달 <c:param>
25강
FrontController패턴 Command 패턴
디렉토리 패턴 > ~~~/hello
확장자 패턴 > ~~~.do
FrontController 패턴 : 다양한 요청을 한곳으로 집중시켜, 개발 . 유지보수에 효율성 극대화
Command : 요청을 서블릿이 직접하지않고 해당 클래스가 처리하도록 함
26강
포워딩
RequestDispatcher 클래스: 서블릿 또는 jsp에서 요청을 받은 후 다른 컴포넌트로 요청을 위임
RequestDispatcher클래스(요청받은 요청객체를 위임하는 컴포넌트에 동일하게 전달),
HttpServletResponse클래스 (동일하게 요청을 위임하는 클래스 그러나 새로운 요청객체를 생성하는것이 차이점)
>>요청받은 값을 다른 곳에서 처리하도록 보내주는것???
다시 정리;;
27~30
mvc게시판