공부 리뷰_11주차

전재우·2021년 4월 4일
1

Back-End

질문 1.서블릿 url 맵핑 하는 방법

-> http.://localhost:7777/BackEndProject/Hello
=>htp.://server:port/context-root/url-pattern(mapping)
서블릿의 url -mapping 값
@WebServlet("/Hello")

질문 2.서블릿 라이프 사이클

  1. Servlet 객체 생성 -최초 한번
  2. init() 호출 - 최초 한번
  3. service(), doGet(), doPost() - 요청 시 매번
  4. destroy() - 마지막 한번(자원 해제 : servlet 수정,서버 재가동)

질문 3.글작성자 옆에 ip 출력방법

-> request.getRemoteAddr();

질문 4.스크립트 요소

1. <%@ directive{지시어 속성} %>

  • page 지시어 import를 제외하고 다른 속성들은 한번만 나와야한다
    <%@ page contentType="text/html;charset=utf-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ include file="loginCheck.jsp" %>

2. 선언문(<%! %>)
jsp 멤버필드나 메소드
멤버변수 선언이나 메소드를 선언하는 영역
<%! java code %>

3. 스크립트릿(<% %>)
client 요청 시 매번 호출 영역(service)
최소한으로 사용
<% java code %>

4. 표현식(<%= %>)
데이터를 브라우저에 출력할 때때 사용
<% = 문자열 %>

5. 주석
코드 상에서 부가 설명을 작성

html의 주석과 jsp주석의 차이점은
→ jsp주석은 서블릿으로 변환될때 포함시키지 말아라는 의미
→ 소스를 봐도 보이지 않는다.
<%— 주석 할 코드 —%>

질문 5.Include 지시자 사용방법

  • Include 지시어(복붙 효과)
    외부 데이터(html 문서 , jsp 페이지)를 jsp 페이지에 포함 시키기 위해 사용하는 지시어
    <%@ include file = "in,jsp"%>

질문 6.jsp 내장객체

  • requset
    html폼 요소의 선택 값 등 사용자 입력 정보를 읽어올 때 사용

  • response
    사용자 요청에 대한 응답을 처리하기 위해 사용

  • session
    클라이언트에 대한 세션 정보를 처리하기 위해 사용

Request, session 아주 중요 !!

Request1회성 이번에 쓰고 버려질것을 저장하는것이 용이

Session 은 공통적으로 쓸 수 있다. (session이 false 인곳을 제외하고)

Application은 어디에서든 사용 할 수 있다.

질문 7.페이지 이동하는 2가지 방법

  • Redirect
    ->클라이언트가 새로 페이지를 요청한 것과 같은 방식으로 페이지가 이동됨.request.response가 유지X(새로 만들어짐)
    -> 이동한 url이 화면에 보인다.
    ->response.sendRedirect(request.getContextPath() + "/guestbook/writesuccess.jsp");

  • Forward
    -> 이전에 있던 페이지의 request,response가 유지(바로 다음 페이지에서만 유지된다)
    -> 이동한 url이 화면에 안보인다(사용자는 이동했는지 모름)
    ->pageContext.forward("이동할 페이지");
    -> <jsp:forwar page ="이동할 페이지"/>;
    ->response.sendRedirect("/guestbook/writesuccess.jsp");

질문 8.MVC패턴

  • Model

    → Business logic / Data (java) → ex) register(id,pwe,name) ⇒ DTO

  • Controller

    → View-Model 사이의 상호동작 관리 (java)

  • View

    → GUI / design / Presentation (jsp)

질문 9. cookie와 ssesion

http는 한번 접속을 하고 나면 끊기 때문에 정보를 저장 할 수 없다 → 이용하는것이 cookie, session

Cookie / session → server쪽에 Client 정보를 식별할 수 있는 저장하는게 목적!

  • 쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일입니다.
  • 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있습니다.
  • 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조합니다.

세션 ( Session )

  • 세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리합니다.

  • 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지합니다.

  • 물론 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정이 가능 합니다.

  • 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 됩니다.

  • 즉 동접자 수가 많은 웹 사이트인 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 됩니다.

질문 10. 에러페이지 응답코드 처리

에러 페이지(try)

<%@= errorPage="" %>
-예외 발생시 어떤 페이지를 보여줄 것인지 지정할 수 있다.

에러처리 페이지(catch)

<%@ page isErrorPage = "true" %>
-isErroPage = true : 에러페이지로 허락한다.


복습

2021-04-04

servlet은 웹에서 돌아가는 자바라고 생각!

스크립트 언어와 컴파일러 언어의 장단점 차이점

컴파일과 인터프리트

CPU는 어셈블리나 바이너리코드라고 불리는 특정 명령만을 실행시킬 수 있습니다.즉, CPU가 실행하는 프로그램들은 이러한 언어로 변환되어 실행되어야 한다는 의미기도 합니다.

  • 컴파일형 언어 : C++Forttarn과 같은 언어는 한 번에 모든 코드를 읽고 해석
  • 인터프리터 언어 : PHPPerlpython과 같은 언어는 한 번에 한 줄의 코드만 읽고 해석

Java는 흔히들 컴파일 언어라고 잘못 알고 있는 경우가 많은데 실은 인터프리터 언어입니다.그렇기에 한 번에 한 줄씩 수행하여 느리다는 인터프리터의 단점을 그대로 가지고 있습니다.

Java는 여기서 절충안을 찾으려고 시도합니다.바이트 코드를 JIT Complier 한 줄씩 읽으면서 바이너리 코드로 변환을 하는 방식을 채택했습니다.여기까지는Java Interpreter 와 크게 다를게 없지만 JVM의 CodeCache에 Caching해놓습니다.그렇기에, 같은 코드가 나오더라도 매번 바이너리 코드로 해석하는 작업을 하는 Java Interpreter와 달리,같은 코드가 나온다면 다시 번역할 필요 없이 Code Cache에서 해당 바이너리 코드를 가져와 사용합니다.

  • 참고 - 자바가 인터프리터를 채택한 이유?: 컴파일형 언어는 프로그램이 커질수록 컴파일 언어는 컴파일 시간이 길어진다는 문제가 있습니다.더불어 코드를 수정을 하게 되면, 다시 재 컴파일을 해야하기 때문에 컴파일 시간이 길면 안좋다는 문제가 있습니다.반면에, 인터프리터를 사용하면 해당 부분만 수정을 하면 된다는 이점이 있습니다.

kwj1270/TIL_JAVA

Servlet

자바 서브릿은 자바를 사용하여 웹페이즈를 동적으로 생성하는 서버측 프로그램

서블릿과 JSP와 비슷한점이 있지만 JSPHTML문서 안에 java를 포함하고 있는 반면 서블릿java안에 HTML을 포함하고 있다.

  • 장점

    플랫폼 독립성

    서버 독립성

    확장성

    개발 용이개발 용이

  • 서블릿 관련 패키지

    javax.servlet - 일반 서비스를 위한 서블릿 패키지

    javax.servlet.http - http서비스를 위한 패키지javax.servlet.http - http서비스를 위한 패키지

    • Code

      package com.hello;
      
      import java.io.IOException;
      import java.io.PrintWriter;
      
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      
      //http://localhost:7777/BackEndProject/Hello
      //http://server:port/context-root/url-pattern
      
      //annotation: 웹프로그램 실행시 필요한 설정 정보, 환경 정보 등을 표시
      ///HelloServlet: 이 서블릿의 url-mapping 값
      @WebServlet("/Hello")
      public class HelloServlet extends HttpServlet {
      	
      	//service method: 클라이언트로부터 요청이 들어 왔을 때 응답을 만들어 내는 메소드
      	//request: 클라이언트로부터 서버로 들어오는 요청에 관한 정보가 담겨 있음
      	//response: 클라이언트로 보내는 응답에 관한 정보가 담겨 있음
      	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      		//서버에서 클라이언트로 보내는 컨텐트 타입 지정
      		response.setContentType("text/html;charset=utf-8");//mime
      		
      		//클라이언트로 보낼 컨텐트 출력을 위한 스트림 준비
      		PrintWriter out = response.getWriter();
      		
      		out.print("<html><body>");
      		out.print("<h1>My First Servlet2</h1>");
      		out.print("</body></html>");
      		
      	}
      
      	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      		
      	}
      
      }

JSP

자바 서버 페이지 는 HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹페이즈를 생성하여 웹 브라우저에 돌려주는 언어이다.

자바 서버 페이지는 자바서블릿으로 변환 된 후에 실행되므로 서블릿과 거의 유사하다.

  • 장점

    웹 페이지 작성이 쉬움

    웹 디자인 도구와 같이 사용할 수 있음

    비즈니스 로직(java)과 프레젠테이션(디자인 화면)의 분리가 가능

  • 단점

    디버깅이 어려움

  • JSP 페이지 처리 과정

  • JSP 디폴트 객체

JSP 페이지 구성요소

  1. Fixed template data - HTML tag
  2. Element(원소)
    • Directive(지시어 원소)
    • Scripting(스크립팅 원소)
      1. 선언(declaration)
      2. 식(expression)
      3. 스크립트렛(scriptlet)
      4. 식언어(EL : Expression Language)
    • action(액션 원소, jsp 태그)

지시어 원소(Directive Element)

  • 웹 컨테이너에 특정한 정보를 전달하는 역할
  • <%@ directive { 지시어 속성} %>
  • directive 종류 : Page,Include, taglib

Page 지시어 <%@ page { 지시어 속성} %>

웹 컨테이너 jsp를 서블릿으로 변환할 때 이 정보들을 참조함

import를 제외하고 다른 속성들은 한번만 나와야한다

  • Include 지시어(복붙 효과)

    외부 데이터(html 문서 , jsp 페이지)를 jsp 페이지에 포함 시키기 위해 사용하는 지시어

    <%@ include file = "in,jsp"%>

  • 코드

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        
    <%@ page import="java.util.ArrayList, java.util.Date" %>
    <%@ page import="java.awt.Button"%>
    <!-- jsp 파일 안에서 자바를 사용하려면 반드시 import 속성으로 지정해줘야 함 -->
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <h1>My First JSP</h1>
    THIS iS MY FIRST JSP PAGE
    <!-- include 지시어 : 복사해서 붙여 넣기 -->
    <%@ include file="in.jsp" %>
    <hr>
    <%@ include file="in.jsp" %>
    
    </body>
    </html>

JSP 디폴트 객체 (내장 객체)

JSP

JSP 스크립팅 요소

  • 선언(Declaration)

    jsp 멤버필드나 메소드

    멤버변수 선언이나 메소드를 선언하는 영역

    형식

    <%! 멤버변수와 method 작성 %>

  • 스크립트릿(scriptlet)

    client 요청 시 매번 호출 영역(service)

    최소한으로 사용

    형식

    <% java code %>

  • 표현식(expression)

    데이터를 브라우저에 출력할 떄 사용

    형식

    <% = 문자열 %>

  • 주석

    코드 상에서 부가 설명을 작성

    html의 주석과 jsp주석의 차이점은 → jsp주석은 서블릿으로 변환될때 포함시키지 말아라는 의미 → 소스를 봐도 보이지 않는다.

    형식

    <%— 주석 할 코드 —%>

JSP 지시자

  • Page Directive

    컨테이너에게 현재 jsp페이지를 어떻게 처리할 것인가에 대한 정보를 제공한다.

    형식

    <%@ page arrt1="val1" attr2="val2" %>

session 기본 값 → true 바로 사용 가능하다.

exception은 isErrorPage가 true일 때만 사용 가능

JSP 기본 객체

⇒ 바구니

Request, session 아주 중요 !!

Request는 1회성 이번에 쓰고 버려질것을 저장하는것이 용이

Session 은 공통적으로 쓸 수 있다. (session이 false 인곳을 제외하고)

Application은 어디에서든 사용 할 수 있다.

redirect 인 경우는

response.sendRedirect(request.getContextPath() + "/guestbook/writesuccess.jsp");

Forward 인 경우는 (바로 다음페이지에만 유지가 됨)

→ request를 같은것을 쓴다.

response.sendRedirect("/guestbook/writesuccess.jsp");

EL (Expression Language)

  • JSP 2.0에서 추가된 기능
  • EL은 간단한 문법으로 JSP페이지 내의 객체에 접근가능
  • EL이 실행되기 위해서는 ${expr} 형태로 기술

예 )

  • jsp의 식

<%= request.getParameter("num")%>

  • jstl(tag)의 식

<c:out value = "${param.num}"/>

  • EL의 식

${param.num}

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>EL test</h1>
	${3+5 }<br>
	${2 eq 6 } <br>
	${param.num }
</body>
</html>

JSTL (JSP Standar Tag Library)

표준화된 태그 라이브러리

JSTL 구현

taglib 지시어

<%@ taglib prefix ="c" uri = "http://java.sun.com/jsp/jstl/core" %>

→ 선언을 하고 나면 원래 c에 uri가 들어와야하지만 그것이 너무 길기 떄문에 접두어가 나온다

core Library

Web Application Architecture

jsp를 이용해서 구성 할 수 있는 Web Application Architecture 는 크게 model1 , model1로 나뉜다.

jsp가 client 요청에 대한 logic 처리과 response page(view)에 대한 처리를 모두 하느냐, 아니면 response page에 대한 처리만 하는지가 가장 큰 차이점

Model 2

모든 처리를 jsp 페이지에서 하는것이 아니라, client 요청에 대한 처리는 servlet이, logic 처리는 java class, client에게 출력하는 response page를 jsp가 담당한다.

  • model 2 구조 MVC pattern을 웹 개발에 도입한 구조 이며 완전히 같은 형태를 보인다.

MVC 디자인 패턴

구현하려는 전체 어플리케이션을 모델 - 뷰 - 컨트롤러(Model -View - Controller)의 구조로 나누어 구성

→ 만들 때는 어렵더라도 사용하는 사람이 유지 보수를 편하게 가능하다

비즈니스 로직과 디자인 분리

비즈니스 로직의 재사용 : 디자인의 변경에 영향을 받지 않음

서블릿/jsp 에서 비즈니스 로직의 분리가 필요

  • 장점

    출력을 위한 view 코드와 로직 처리를 위한 java코드가 분리 되었기 떄문에 jsp는 model1에 비해 코드가 복잡하지 않다.

    화면 단과 logic단이 분리 되었기에 분업이 용이해 졌다.

    기능에 따라 code가 분리 되었기 때문에 유지보수가 쉬워졌다.

    확장성이 뛰어나다

  • 단점

    구조가 복잡하여 초기 집입이 어렵다.

    개발 시간의 증가로 개발비용 증가

  • Model

    → Business logic / Data (java) → ex) register(id,pwe,name) ⇒ DTO

  • Controller

    → View-Model 사이의 상호동작 관리 (java)

  • View

    → GUI / design / Presentation (jsp)

http는 한번 접속을 하고 나면 끊기 때문에 정보를 저장 할 수 없다 → 이용하는것이 cookie, session

Cookie / session → server쪽에 Client 정보를 식별할 수 있는 저장하는게 목적!

브라우저에 저장되는 텍스트 형식의 데이터 저장되는 텍스트 형식의 데이터

coockie → server

쿠키가 서버에 요청을 보내면 서버에서 cookie를 식별할 수 있는 정보를 덧 붙여서 전송 → 받은것을 저장

profile
코린이

0개의 댓글