korean IT student

JSP- 요약하기 본문

front-end/JSP

JSP- 요약하기

현창이 2017. 10. 13. 14:21

JSP


JSP특징

-동적 웹어플리케이션 컴포넌트

-jsp확장자

-클라이언트의 요청에 동적으로 작동하고, 응답은 html을 이용

-jsp는 서블릿으로 변환되어 실행

-MVC패턴에서 view로 이용됨

MODEL Controller(servlet) view(JSP)


Servlet 특징

-동적 웹어플리케이션 컴포넌트

-java 확장자

-클라이언트의 요청에 동적으로 작동하고, 응답은 html을 이용

-java thread이용하여 동작

-MVC패턴에서 Controller


Servlet 살펴보기

요청처리객체 및 응답처리객체를 톰캣에서 받음 

(HttpServleRequest request,HttpServletResponse response)


 doGet() 

-데이터 정보를 웹 주소 URL에 포함하여 호출하는 방식

-html내 form태그의 method속성이 get일 경우 호출 됩니다.

-웹브라우저의 주소창을 이용하여 servlet을 요청한 경우에도 호출 됩니다.

-정보 크기가 제한된다는 단점, 보안에 지장을 주지 않는 소규모 데이터 전송을 위해 많이 사용


 doPost()

-header를 이용해 정보가 전송되어 보안에 강함

-html내 form태그의 method속성이 post일 경우 호출 됩니다.

-전송할 데이터를 HTTP 요청 메시지에 첨부하는 형태로 전송하는 방식


 Context Path

-WAS(web application server)에서 웹어플리케이션을 구분하기 위한 path입니다.

-이클립스에서 프로젝트를 생성하면 자동으로 server.xml에 추가 됩니다.


 Servlet 작동 순서

 웹브라우저 -> 웹서버 -> 웹어플리케이션 서버 -> servlet 컨테이너 (스레드 생성,servlet 객체 생성)

 

 Servlet 라이프사이클(생명주기)

-Servlet의 사용도가 높은 이유는 빠른 응답 속도 때문 입니다.

-Servlet은 최초 요청 시 객체가 만들어져 메모리에 로딩되고, 이후 요청 시에는 기존의 객체를 재활

  용된다. 따라서 동작 속도가 빠르다.

-Servlet 객체생성(최초 한번) -> Init() 호출(최초 한번) -> service(), doGet(), doPost() 호출(요청시마다) 

   -> destory() 호출(마지막 한번 -servlet 수정, 서버 재가동 등등 자원 해제할때..)


 Servlet 선처리, 후처리

-init()호출 앞에 @PostConstruct:선처리 destroy() 호출 뒤에 @PreDestroy : 후처리 


 HTML form태그

-html의 form태그는 서버쪽으로 정보를 전달할 때 사용하는 태그 입니다.

- <input type="text" name="name" size="10"> 일반적인 데이터를 입력하기 위해 사용

- <input type="password" name="name" size="10"> 로그인,회원가입 페이지 등에서 비밀번호 입력하기 위해

- <input type="submit" value="전송"> 데이터를 전송

- <input type="reset" value="초기화"> 데이터를 초기화 할때

- <input type="checkbox" name="hobby" (동일) value="read" (다르게)> 여러 개 전송해야 할 때

- type =radio  checkbox와 달리 여러 개의 데이터 값 중 한 개의 값만을 전송할 때 사용 checked="checked"

- <select name ="protocal"> <option value="값"> </option></select> 리스트형태의 데이터를 사용

-form 태그 <form action ="formex" (요청하는 컴포넌트 이름-join.jsp,info.html) method="post,get"(요청을 처리하는 방식)>


 Servlet Parameter

- Form태그의 submit 버튼을 클릭하여 데이터를 서버로 전송하면, 해당파일(servlet)에서는 HttpServletRequest객체를 이용하여 Parameter값을 얻을 수 있다.

-관련 메소드 getParameter(name),getParameterValues(name) 값이 여러개일때 ex) checkbox ,getParameterNames() 이름들이 배열로나온다.


 한글처리

-Get방식 요청  서버에 있는<server.xml 수정> Connector URIEncoding="EUR-KR" port="8181" 삽입 후 publish server 누른다

-Post방식 요청 request.setCharacterEncoding("EUC-KR");

 

 서블릿 초기화 파라미터: ServletConfig

-특정 Servlet이 생성될 때 조기에 필요한 데이터가 있다. (특정 경로 및 아이디 정보 등) 이러한 데이터들을 초기화 파라미터라고 하며,web.xml에 기술하고 Servlet파일에서는 ServletConfig 클래스를 이용하여 접근합니다.

-web.xml파일에 초기화 파라미터 기술

1.servlet 클래스 제작

2.web.xml파일

<servlet>

<servlet-name>param</servlet-name>

<serlvet-class>위치(com.javac.hello)<servlet-class>

<init-param>

<param-name>id</param-name>

<param-value>abc</param-value>

</init-param>

</servlet>

 3.servletConfig메소드 이용해서 데이터 불러오기

-string id =getlnitParameter("id");

-string pw =getlnitParameter("pw");


-Servlet 파일에 초기화 파라미터 기술

 1.servlet 클래스 제작 

 2.@weblnitParam에 초기화 파라미터 기술

-@WebServlet(urlPatterns={"/hi"},initParams={@WebServlet(name="id,value="abcde),@WebServlet(name="pw",value="99")})

 3.servletConfig메소드 이용해서 데이터 불러오기

-string id =getlnitParameter("id");

-string pw =getlnitParameter("pw");


데이터 공유:ServletContext -여러 Servlet에서 특정 데이터를 공유해야 할 경우 context parameter를 이용해서 web.xml에 데이터를 기술하고,Servlet에서 공유하면서 사용 할 수 있다. 

1.servlet 클래스 제작

2.

<context-param>

<param-name>id</param-name>

<param-value>abc</param-value>

</context-param>

3.servletConfig메소드 이용해서 데이터 불러오기

-string id =getServletContext().getlnitParameter("id");


웹어플리케이션 감시 :ServletContextListener -웹어플리케이션의 생명주기를 감시하는 리스너. 리스너의 해당 메소드가 웹어플리케이션의 시작과 종료 시 호출 됩니다.(contextInitialized(),contextDestoryed());

1.리스너 클래스 제작


클래스명 implements ServletContextListener{

오버라이딩 

public void contextDestoryed(ServerletContextEvent arg0){

syso("");

}

public void contextInitialized(ServerletContextEvent arg0){

syso("");

}


2.web.xml파일에 리스너 클래스 기술

<listener>

<listener-class>위치</listener-class>

</listener>


JSP 태그의 개념 이해

-servlet은 java언어를 이용하여 문서를 작성하고, 출력객체를 이용하여 HTML코드를 삽입하였다.

-jsp는 servlet과 반대로 HTML코드에 java언어를 삽입하여 동적 문서를 만든다.

 HTML코드안에 java코드를 삽입하기 위해서는 태그를 이용

지시자:<%@     %> :페이지 속성

주석:<%--   --%>

선언: <%!     %> :변수, 메소드 선언

표현식: <%=    %> :결과값 출력

스크립트릿: <%    %> :java 코드

액션태그 : <jsp:action>  </jsp:action>:자바빈 연결


JSP 동작 원리 

-JSP가 요청되어 응답하기까지의 과정

-클라이언트가 웹브라우저로 hello.jsp를 요청하게 되면 JSP컨테이너가 JSP파일을 Servlet파일(.java)로 변환한다. 그리고 Servlet파일(.java)은 컴파일 된 후 클래스 파일(.class)로 변환되고, 요청한 클라이언트한테 html파일 형태로 응답


JSP 내부 객체

-개발자가 객체를 생성하지 않고 바로 사용할 수 있는 객체가 내부객체

-JSP에서 제공되는 내부객체는 JSP컨테이너에 의해Servlet으로 변화될 때 자동으로 객체가 생성

-입출력 객체: request, response, out 서블릿 객체:page, config 세션 객체: session 예외 객체: exception


지시자

-JSP페이지의 전체적인 속성을 지정할 때 사용, 웹 컨테이너에 전달하여 페이지의 속성이 수행되도록 기능을 지정해주는 역할

-page 해당 페이지의 전체적인 속성 지정

 주로 사용되는 언어 지정 및 import문을 많이 사용

-include: 별도의 페이지를 현재 페이지에 삽입 <%@ include file ="" %>

-taglib:사용자가 만든  태그라이브러리의 태그 사용


request 객체의 이해

-웹브라우저를 통해 서버에 어떤 정보를 요청하는 것을 request라고 한다.

-getContextPath():웹어플리케이션의 컨텍스트 패스를 얻는다.

-getMethod(): get방식과 post방식을 구분할 수 있다.

-getSession():세션 객체를 얻는다.

-getProtocol():해당 프로토콜을 얻는다.

-getRequestURL():요청 url를 얻는다

-getRequestURI():요청 URI를 얻는다.

-getQueryString(): 쿼리스트링을 얻는다.

-JSP페이지를 제작하는 목적이 데이터 값을 전송하기 위해서 이므로, parameter 관련 메소드 중요!!

-getParameter(String name):name에 해당하는 파라미터 값을 구함.

-getParameterNames(): 모든 파라미터 이름을 구함

-getParameterValues(String name): name에 해당하는 파라미터값들을 구함


response 객체의 이해

-웹브라우저의 요청에 응답하는 것을 response라고 하며, 이러한 응답의 정보를 가지고 있는 객체를 response객체 라고 한다.

response.sendRedirect(URL):지정한 url로 이동 


액션태그

-JSP페이지 내에서 어떤 동작을 하도록 지시하는 태그

-forward(현재의 페이지에서 다른 특정페이지로 전환할때 사용

 <jsp:forward page="sub.jsp"/>

-include(현재 페이지에 다른 페이지를 삽입할 때 사용

 <jsp:include page ="include02.jsp" flush="true"/>

-param(forward 및 include 태그에 데이터 전달을 목적으로 사용되는 태그)

 <jsp:forward page="sub.jsp"/>

   <jsp:param name ="id" value="abcdef"/>

 </jsp:forward>


쿠키

-웹브라우저에서 서버로 어떤 데이터를 요청하면, 서버측에서는 알맞은 로직을 수행한 후 데이터를 웹브라우저에 응답 합니다. 그리고 서버는 웹브라우저와의 관계를 종료합니다. 연결이 끊겼을 때 어떤 정보를 지속적으로 유지하기 위한 수단으로 쿠키라는 방식을 사용한다. 쿠기는 서버에서 생성하며, 서버가 아닌 클라이언트측에 특징 정보를 저장 합니다. 그리고 서버에 요청 할 때마다 쿠기의 속성값을 참조 또는 변경 할 수 있다.

- 쿠키생성->속성 설정 ->response객체에 쿠키 탑재

-setMaxAge(): 쿠키 유효기간을 설정

-setPath():쿠키사용의 유효 디렉토리를 설정 합니다.

-setValue():쿠키의 값을 설정 합니다.

-getMaxAge(): 쿠키 유효기간 정보를 얻습니다.

-getName(): 쿠키 이름을 얻습니다.

-getPath(): 쿠키사용의 유효 디렉토리 정보를 얻습니다.

-getValue(): 쿠키의 값을 얻습니다.

-getVersion(): 쿠키 버전을 얻습니다.

ex) <%Cookie cookie = new Cookie("이름","value값 넣기");

      cookie.setMaxAge(60*60); 1시간동안 쿠키 유지

      response.addCookie(cookie); 쿠키를 탑재 시킨다 

       %>

     <a href="cookieget.jsp">cookie get</a> 


세션

-세션도 쿠키와 마찬가지로 서버와의 관계를 유지하기 위한 수단

-쿠키와 달리 클리이언트의 특정 위치에 저장되는 것이 아니라, 서버상에 객체로 존재 따라서 세션은 서버에서만 접근이 가능하여 보안이 좋고, 저장할 수 있는 데이터에 한계가 없다.

-세션은 클라이언트의 요청이 발생하면 자동생성 됩니다, session이라는 내부 객체를 지원하여 세션의 속성을 설정 할 수 있다.

-setAttribute(): 세션에 데이터를 저장한다ex) id,1234

-getAttribute(): 세션에 데이터를 얻습니다

-getAttributeNames(): 세션에 저장되어 있는 모든 데이터의 이름(유니크한 키값)을 얻습니다.

-getld(): 자동 생성된 세션의 유니크한 아이디를 얻습니다.

-isNow(): 세션이 최초 생성되었는지, 이전에 생성된 세션인지를 구분

-getMaxinactivelnterval():세션의 유효기간을 얻는다

-removeAttribute(): 세션에서 특정 데이터 제거

-invalidate(): 세션의 모든 데이터를 삭제


예외 페이지

-page지시자를 이용한 예외 처리

<%@ page errorPage ="errorPage.jsp"%> -> <%@ page isErrorPage ="true"%>

 <% response.setStatus(200);%>

  html - <%=exception.getMessage()%>


-web.xml파일을 이용한 예외 처리

<error-page>

 <error-code>404</error-code>  404에러가 나면 404 에러 페이지로 가라

<location>/error404.jsp</location>

</error-page>


자바 빈

-게시판의 글 정보나 회원정보와 같이 웹 서비스에서 여러 종류의 데이터가 하나의 정보를 구성할 때 각 데이터를 관리하기 위해 제작하는 클래스이다.

-다양한 데이터를 한 번에 관리 및 활용하기 위해 제작하는 클래스

-빈이란 반복적인 작업을 효율적으로 하기 위해 빈을 사용, JAVA언어의 데이터(속성)와 기능(메소드)으로 이루어진 클래스. jsp페이지를 만들고, 액션태그를 이용하여 빈을 사용 한다. 그리고 빈의 내부 데이터를 처리 합니다.

-데이터 객체에는 데이터가 있어 그에 해당하는 getter와 setter가 있다. 빈을 만든다는 것은 데이터 객체를 만들기 위한 클래스를 만드는 것 이다.

-빈 관련 액션 태그(useBean, setProperty, getProperty) 주로 데이터를 업데이트하고, 얻어오는 역할을 한다.

-useBean 특정 Bean을 사용한다고 명시 할 때 사용

<jsp:useBean id="student" class="com.javalec.ex.Student" scope="page/>

                    빈 이름          클래스 이름                            스코프 범위

-Scope

page:생성된 페이지 네에서만 사용 가능

request:요청된 페이지 내에서만 사용 가능

session:웹브라우저의 생명주기와 동일하게 사용 가능

application:웹 어플리케이션 생명주기와 동일하게 사용 가능

-setProperty 데이터 값을 설정 할 때 사용

 <jsp:setProperty name="student" property="name" value="홍길동"/>

                           빈 이름           속성 이름       속성(데이터) 값

-getProperty 데이터 값을 가져올 때 사용

  <jsp:getProperty name="student" property="name" />



DAO, DTO

-DAO (Data Access Object) 데이터 베이스에 접속해서 데이터 추가, 삭제, 수정 등의 작업을 하는 클래스, 일반적인 jsp 혹은 servlet 페이지내에 위의 로직을 함께 기술할 수 도 있지만, 유지보수 및 코드의 모듈화를 위해 별도의 DAO클래스를 만들어 사용한다.

-DTO (Data Transfer Object) -DAO클래스를 이용하여 데이터 베이스에서 데이터를 관리할 때 데이터를 일반적인 변수에 할당하여 작업 할수도 있지만, 해당 데이터의 클래스를 만들어 사용

순수한 데이터 객체이며 속성과 그 속성에 접근하기 우한 getter, setter 메소드만 가진 클래스를 말한다.


PreparedStatement

-setString() 메서드는 문자열 타입의 데이터를 SQL문 물음표에 넣어준다는 의미이며 메서드 내 첫번째 입력 파라미터 숫자는 SQL문의 물음표를 지칭

-이러한 위치 표시자를 사용하여 값을 추후에 따로 지정하는 형태로 SQL문을 사용하므로, 여러 개의 동적인 변수를 통한 값의 할당이 한결 쉬워진다는 장점!!


커넥션 풀(Connection Pool)

-JDBC를 통한 데이터베이스 연결의 성능을 향상시키기 위해 사용하는 일반적인 방식

1.웹 어플리케이션 내 데이터베이스 관련 작업이 수행되어야 할 경우 커넥션 풀에서 미리 생성되어 있는 커넥션을 빌려온다.

2.커넥션 풀로부터 받아온 커넥션을 통해 데이터베이스 관련 작업을 수행한다.

3. 데이터베이스 관련 작업 수행이 끝나면 커넥션을 반환한다.

-Connection 인스턴스 생성 및 종료에 관련된 처리 시간이 필요치 않아 웹 서비스의 성능 향상에 도움 -> 일반적으로 대부분 사용제작



EL(Expression Language)

- 표현식 또는 액션 태그를 대신해서 값을 표현하는 언어

- <%=value%> ->&{value}

- <jsp:getProperty name="member" property="name"/>

-> ${mamber.name}

-%{param.ParamName}


FrontController 패턴

-클라이언트의 다양한 요청을 한곳으로 집중시켜, 개발 및 유지보수에 효율성을 극대화 한다.


Command 패턴

-클라이언트로부터 받은 요청들에 대해서, 서블릿이 작업을 직접 처리 하지 않고, 해당 클래스가 처리하도록 합니다.


MVC패턴

-Model2 MVC에서 Model, View 그리고 Controller가 모두 모듈화 되어 있는 형태

-Model은 데이터베이스와의 관계를 담당, 클라이언트의 요청에서 필요한 자료를 데이터베이스로부터 추출하거나, 수정하여 Controller로 전달 합니다.

-View는 사용자한테 보여지는 UI 화면, 주로 .jsp파일로 작성 하며, Controller에서 어떤 View 컴포넌트를 보여줄지 결정 한다.

-Controller는 클라이언트의 요청을 받고, 적절한 Model에 지시를 내리며, Model에서 전달된 데이터를 적절한 View에 전달

-이렇게 작업을 분할하면, 추후 유지보수에 좋다.


1.설계

2. 데이터베이스 테이블 만들기

3.FrontController 만들기

4. Command 만들기

5.DTO(Data Transfer Object) 만들기 -데이터베이스의 데이터 DTO객체 만들기

6.DAO(Data Access Object) 만들기 -데이터 베이스에 연결하여 필요한 로직을 수행하는 DAO클래스 만들기

7.view 페이지 만들기



'front-end > JSP' 카테고리의 다른 글

JSP - <input type ="hidden">  (0) 2019.05.20
JSP - 내장객체(request 객체, response 객체)  (0) 2019.05.19
JSP -EL태그와 JSTL태그 정리  (0) 2017.12.24
JDBC 프로그래밍의 작성 순서 및 구현  (0) 2017.07.26
JDBC 연동하기  (0) 2017.07.23
Comments