본문 바로가기
멀티캠퍼스/Spring

20230830 (수)

by 세크레투스 2023. 8. 30.
반응형
SMALL

<복습>

서버프로그래밍

JSP - HTML

Servlet - Java

 

- HTTP 특징

* 절차

* 메세지 규격

Client --- 접속요청 (IP, Port 번호), http request 메세지 ---> Server(접속대기)

==> 접속요청 시 요청라인에 GET    /bbs/index.html.   http/1.1   이런식으로 들어감.

====> localhost:8080/xxx/bbs/index 이런식으로..

 

 

요청라인(JS - Ajax를 통해서 서버와 비동기 통신) -  GET(정보추출, Read), POST(생성, Create), PUT(수정, Update), DELETE(삭제, Delete)

form - GET or POST

 

요청라인에 메서드 정보가 들어감

헤더 - key:value \n ... \n (헤더끝)

GET, DELETE -> Body X

POST, PUT -> Body O

 

request 요청이 해석되면 HttpServletRequest 라는 객체로 만들어줌. 이 객체 안에 요청이 담겨있음.

이 서블릿리퀘스트에서 request를 통해서 정보를 추출해서 VO로 만들어야 함.

이것을 html 내용으로 만들고 HttpServletResponse 객체로 만들어서 응답으로 내보냄.

이 응답에는 응답상태라인(Http 버전 - HTTP/1.1, 상태코드 - 200, OK \n), 헤더(ContentType - text/html, image/jpeg, audio/mp3, video/mp4...), Body(HTML - image, mp3, mp4...) 등이 들어있다.

html로 내보낼 때 중요한 것이 문자 세팅인데, UTF-8이 가장 보편적으로 많이 쓰인다.

 

HTTP Protocol 절차

1. 접속

2. Request 보냄

3. Response 받음

4. 연결 끊음

 

여러 사용자가 한꺼번에 요청을 할 때 서버에서는 이 요청을 각각 다른 요청으로 인식함.

 

응답코드 : 200 - 성공, 3xx - Redirect, 4xx - 보안 또는 요청URL 에러(Client 잘못), 5xx - 예외발생(Server 잘못)

400에러 : 400, 401, 402, 403, 404...

- 400, 401, 402, 403 : 보안관련

- 404 : 요청 URL이 잘못됨

 

<<본수업>>

<서블릿 맵핑>

1. web.xml

<@WebServlet>

==> 여기서 중괄호 {} 는 배열 초기화 표현식이다.

 

<서블릿 아키텍처 및 핵심 API>

1. 서블릿을 사용하는 경우 웹 아키텍처

- static 파일 : html, image, js, css (물리적으로 실제 경로를 가짐)

- httpd : apache web server

- Tomcat이 관리하는 url map : urlPatterns={"/xxx", "/yyy"}

- 요청 하나를 작업스레드가 담당함

 

2. 웹브라우저의 URL요청 -> 해당 서블릿 호출

 

3. HttpServletRequest API

- getHeader(String name):String -> name 은 key를 말하는 것임.

- getHeaderNames():Enumeration

- getCookies():Cookie[]

- getRequestURI():String

- getServletPath():String

- setCharacterEncoding(String encoding)

 

4. HttpServletResponse

- addCookie(Cookie c)

- addHeader(String name, String value) : name은 key이름, value는 값을 의미함.

- getWriter():PrintWriter -> html을 내보냄

- getOutputStream():ServletOutputStream -> 파일을 내보냄

- setContentType(String type) -> Content-Type : text/html 이 가장 중요함. 이것을 변경하고자 할때 사용하는 메서드임.

 

5. HttpServletAPI

- Servlet interface : life cycle 규정

- GernericServlet : init, service, destroy 메서드 중요함.

 

6. 서블릿의 인스턴스를 init, service, destroy 메서드로 관리

- init 메서드

* 최초의 요청이 들어올 때

* 인스턴스가 처음 실행될 때, 단 한번 호출

* 서블릿에서 필요한 초기화 작업 시 사용

- service 메서드

* 클라이언트가 요청할 때마다 호출

* doGet 또는 doPost에서 주로 작업 <- 요청이 들어올 때 마다

- destroy메서드

* 인스턴스가 웹 컨테이너에서 제거될 때 호출

* 톰캣이 정상적으로 종료될 때 실행

 

7. 서블릿 응답 처리

- 클라이언트에서 서블릿으로 요청

- 서블릿은 처리한 결과를 html 형식으로 응답 처리

- 문자셋 설정

* response.setContentType("text/html;charset=UTF-8");

** 응답데이터의 MIME 타입

** Content-Type : 헤더

** MIME-TYPE : 대분류/세분류

- 응답데이터의 전송

* 문자 데이터 응답

** response.getWriter() 로 PrintWriter 클래스 사용

* 바이너리 데이터 응답

** response.getOutputStream() (-> 첨부파일 다운로드 기능) 으로 ServletOutputStream 클래스 사용

 

<어노테이션을 이용한 서블릿의 선처리 및 후처리 작업>

1. init() 메서드로 초기화 되기 전에 필요한 작업 수행을 위한 선처리

@PostConstruct

public void postConstruct() { ... }

2. destroy() 메서드로 제거된 후에 필요한 작업을 하는 후처리

@PreDestroy

Public void cleanup() { ... }

 

<HTML5 Form 태그와 서블릿>

1. JSP 템플릿 작성

- jsp 파일 템플릿에 HTML5 템플릿이 없음

- 기본 HTML5 템플릿 추가

- JQuery, CSS, JS가 추가된 템플릿 추가

 

<HTML5의 Form>

1. form 태그

- action 속성

* submit 버튼 선택시, 웹 서버에서 처리할 컴포넌트 지정

* JSP나 Servlet 경로 지정

- method 속성 -> GET or POST (method = "GET" 또는 method="POST")

* 웹 브라우저에서 웹 서버로 요청하는 방법 명시

- GET 방식 (주소창에 적는것, <a href="..." /> <img src="..."/> )

* 요청 파라미터 값이 웹 브라우저의 URL에 명시되어 웹 서버로 전송

http://서버IP번호:포트번호/컨텍스트명/경로명/login?name=홍길동&age=20

==> name="name" value="홍길동", name="age" value="20"

==> get은 ? 뒤에 정보가 붙는다.

* 서블릿에서 doGet 메서드가 처리

* 파라미터 길이에 제한

* 보안에 취약

* 일반 <a href="..."> 태그의 링크 및 명시적 URL 요청

- POST 방식

* 요청 파라미터 값이 HTTP Request의 요청 몸체(body)에 포함되어 전송 (URL에서 확인 불가)

http://서버IP번호:포트번호/컨텍스트명/경로명/login

* 서블릿에서 doPost() 메서드에서 처리

* 새로 고침하는 경우 사용자에게 재요청 의사 묻는 정보창을 실행

<form action="login.html> //method 를 지정하지 않으면 기본 방식인 get 방식으로 처리

<form action="login.jsp" method="get"> //get 방식으로 처리

<form action="login" method="post"> //post 방식으로 처리

2. 파라미터 값 추출 : request 객체 메서드 이용

3. getParameter(name) 메서드

- 하나의 파라미터 값을 추출

- name에 해당하는 파라미터가 없다면 null 리턴 (오타주의)

 

<서블릿에서 파라미터 처리>

1. 서블릿에서의 한글 처리

2. 서블릿에서 파라미터 처리

- getParameterValues(name) 메서드

* check, select, email 처럼 하나 이상의 값을 가지는 파라미터 추출시

- Get 방식에서 ? 뒤에 오는 것들을 query string이라고 부름.

- sports가 여러개 있는 상황에서 getParameterValue("sports")를 하면 첫번째 값만 리턴됨.

- 만약에 text값이 아무것도 입력이 안되면 그냥 빈값으로 전달됨. => "" 이런식으로

- 하지만 checkbox가 선택이 안되면 값이 전달 안됨.

 

- 404 에러 : URL 명 문제

- 405 에러 : 메서드(method) 문제.

반응형
LIST

'멀티캠퍼스 > Spring' 카테고리의 다른 글

230901 (금)  (0) 2023.09.01
230831(목)  (0) 2023.09.01
20230829 (화)  (0) 2023.08.29
230828 (월)  (0) 2023.08.29
20230817 (목)  (0) 2023.08.17