<복습>
서버프로그래밍
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) 문제.
'멀티캠퍼스 > 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 |