# HTTP 패킷 : 클라이언트가 서버로 요청 했을 때 보내는 데이터
- 헤더 : 메소드 방식 종류, 클라이언트 정보, 브라우저 정보, 접속할 URL 등의 클라이언트 정보
- 바디 : 일반적으로는 비어있으나 특정 데이터를 담아 서버에 요청 보낼 수 있음
# Get vs Post : 서버 요청 메소드
- Get : URL 뒤에 클라이언트의 데이터를 붙여 보내는 방식
ex)
coderbear.tistory.com?id=coderbear&password=12341234
- Post : URL 뒤에 붙이지 않고 바디에 데이터를 넣어 보내는 방식
바디의 데이터를 설명하는 Content-Type이라는 헤더 필드가 들어가고 어떤 데이터 타입인지 명시한다.
// 대표적인 컨텐츠 타입
① application / x - www-form-urlencoded : 기본 설정값
② text / plain : 바디에 단순 txt를 넣는 방법
③ multipart / form-data : 파일전송 시 많이 쓰이는 방법
바디의 데이터를 바이너리 데이터로 넣는다는 것을 알려준다.
// GET방식이 더 빠른 이유는 GET 방식의 요청이 캐싱(다시 요청 시 빠른 접근을 위해 데이터를 저장하는 것) 때문이다.
# JSP pageEncoding속성, charset
JSP 페이지를 분석하는 과정에서 현재 페이지가 어떤 인코딩을 이용해서 작성되었는지 검사하여
그 결과로 선택된 캐릭터셋을 이용해서 JSP페이지의 문자를 읽어오게 된다.
- 웹 컨테이너가 JSP 페이지를 읽어올 때 사용할 charset 결정하는 기본 과정
① 기본 인코딩을 파일을 읽은 후, pageEncoding을 찾는다.
② pageEncoding을 찾으면 해당 속성을 사용하고, 없으면 contentType을 검색한다.
③ contentType을 찾으면 해당 속성의 charset을 사용한다.
④ 모두 해당되지 않은 경우 ISO-8859-1을 사용한다.
// 단, ①, ③의 경우 대상을 찾기 전에 ASCII 문자 외의 글자가 없을 때만 적용된다.
// JSP페이지 구현 시 "EUC-KR", 응답결과는 "UTF=8" 하고 싶은 경우
<%@ page contentType="text/html; charset=utf-8" %>
<%@ pate pageEncoding="euc-kr" %>
// charset vs pageEncoding 차이점
<%@ page contentType="text/html"; charset="utf-8" pageEncoding="utf-8" %>
- charset : HTTP Client(웹브라우저)가 받아볼 페이지의 인코딩 방식 (HTTP 헤더에 기록되어 있음)
- pageEncoding : JSP파일(페이지)에 기록된 소스코드 자체의 인코딩 방식
ex)
<%@ page contentType="text/html"; charset="euc-kr" pageEncoding="utf-8" %>
- JSP 파일은 UTF-8 인코딩
웹브라우저가 받을 때는 EUC-KR로 인코딩하여 전송된다.
# MIME(Multipurpose Internet Mail Extensions) : 전자우편을 위한 인터넷 표준 포맷
# 프락시서버(Proxy server) : 클라이언트와 서버 사이에서 데이터를 중계하는 역할을 하는 서버
Q.
문제
ErrorTest.htm 파일을 만든다.
그 안에 input text를 두 개를 만들고 각각 숫자 두 개를 입력 받도록 하자.
그리고 나누기라는 버튼을 누르면 ErrorServlet 으로 이동을 해서 결과 값을 출력하도록 하자.
그런데 숫자 대신 글자가 입력이 되었을 때 에러코드를 510, “정수를 입력하지 않은 오류!”라고 출력하도록 하고,
제수가 0일때 에러코드 511, “부적합 연산 관련 오류!”라고 출력하도록 하자.
A.
- ErrorTest.html
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="GET" action="ErrorServlet">
★ 나눗셈을 위해 두개의 수를 입력하세요! ★<br/>
수1 : <input type="text" name="num1"/><br/>
수2 : <input type="text" name="num2"/><br/>
<input type="submit" value="나누기"/>
</form>
</body>
</html>
- ErrorServlet.java
package com.superman.ex;
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;
@WebServlet("/ErrorServlet")
public class ErrorServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ErrorServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String strNum1 = request.getParameter("num1");
String strNum2 = request.getParameter("num2");
int num1 = 0, num2 = 0;
try {
num1 = Integer.parseInt(strNum1);
num2 = Integer.parseInt(strNum2);
}catch(NumberFormatException e) {
response.sendError(510, "정수를 입력하지 않은 오류!");
return;
}
//나눗셈을 위해 정수 형태로 변환한다.
int result = 0;//결과를 저장할 공간
response.setContentType("text/html;charset=utf-8");
//응답을 위한 MIME과 문자 셋 설정
PrintWriter out = response.getWriter();
try {
result = num1 / num2;
}catch(ArithmeticException e) {
response.sendError(511, "부적합 연산 관련 오류!");
return;
}
out.println("<html><body><center>");
out.println(num1 + " / " + num2 + " = " + result);
out.println("</center></body></html>");
out.close();
}
}
+ https://namu.wiki/w/HTTP/%EC%9D%91%EB%8B%B5%20%EC%BD%94%EB%93%9C
① 100~199 : 요청에 대하여 작업을 하고 있을 때 응답 코드
② 200~299 : 요청에 대하여 성공적으로 응답할 때 응답 코드
③ 300~399 : URI에 대하여 데이터가 없을 때 응답 코드 위치 이동이 대표적
④ 400~499 : 클라이언트의 요청이 형식에 맞지 않거나 인증되지 않을 때 응답 코드
⑤ 500~599 : 서버 에러로 인해 응답에 실패할 때 응답 코드
'Web > JSP' 카테고리의 다른 글
[필기정리] Day84-2 - EL 문제, JSTL 등 (0) | 2020.10.26 |
---|---|
[필기정리] Day84-1 - EL(Expression Language), ContextParam 등 (0) | 2020.10.26 |
[실습문제] Day81 - MVC Model2 문제 및 해답 (0) | 2020.10.22 |
[필기정리]Day79-2 - MVC(Model, View, Controller) (0) | 2020.10.22 |
[필기정리]Day79-1 - Connection Pool, JNDI, Data Source 등 (0) | 2020.10.20 |