JSP day02

Lee·2023년 3월 15일
0

1. GET 방식 vs POST 방식

1-1. GET 방식

  • 서블릿에 데이터를 전송할 때 데이터가 URL뒤에
    name=value 형태로 전송
  • 보안에 취약
  • 전송 가능 데이터 최대 255자
  • 기본 전송 방식으로 사용이 쉬움
  • 웹 브라우저에서 직접 입력하여 전송 가능
  • 여러 개의 데이터를 전송할 때 '&'로 구분해서 전송
  • doGet()
    
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    		<!-- get 방식 : ...../url?parm1=value  -->
    		<form action="usercount">		    <------ 여기 주목 
    			<div>
    					<label>"안녕하세요" 를 몇번 듣고 싶으세요?</label>
    			</div>
    			<div>
    				<input type="text" name="cnt">
    				<input type="submit" value="출력">
    			</div>
    		</form>
    </body>
    </html>

1-2. POST 방식

  • 서블릿에 데이터를 전송할때 TCP/IP 프로토콜
    데이터의 HEAD영역에 숨겨진 채 전송
  • 보안에 유리
  • 전송 데이터 용량 무제한
  • 전송 시 서블릿에서 또 다시 가져오는 작업이
    필요하므로 GET방식보다 처리 속도가 느림
  • doPost()
 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
		<form action="add" method="post">    <----- 여기주목 
			<div>
					<label>x :</label>
					<input type="text" name="x">
			</div>
			<div>
					<label>y :</label>
					<input type="text" name="y">
			</div>
			
			<div>
				<input type="submit" name="operator" value="덧셈">
				<input type="submit" name="operator" value="뺄셈">
			</div>
		</form>
</body>
</html>

2. Servlet Filter


package com.condingbox.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
//        모든곳에 적용
@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {

	@Override
	public void doFilter(ServletRequest arg0, 
						ServletResponse arg1, FilterChain arg2)
			throws IOException, ServletException {
	
//		System.out.println("before filter");
		// filgerChain으로 다음 작업 진행 여부를 정한다.
		
		arg0.setCharacterEncoding("UTF-8");
		
		arg1.setCharacterEncoding("UTF-8");
		arg1.setContentType("text/html; charset=UTF-8");
		
		arg2.doFilter(arg0, arg1);
//	   System.out.println("after filter");
	}

}

3. 서버 상태 코드

  • HTTP 상태 코드

  • 1xx(정보) : 요청을 받았으며 프로세스를 계속한다.

  • 2xx(성공) : 요청을 성공적으로 받았으며 인식했고
    정상적으로 수용했다.

  • 3xx(리다이렉션) :요청 완료를 위해 추가 작업 조치가
    필요하다.

  • 4xx(클라이언트 오류) : 요청의 문법이 잘못되었거나
    요청을 처리할 수 없다.

  • 5xx(서버 오류) : 서버가 명백히 유효한 요청에 대해
    충족을 실패했다.

HTTP 위키백과
https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C

4. 상태유지의 필요성

  • application, session, cookie

4-1. application

  • 하나의 프로젝트가 생성이되고, 소멸될 때까지 계속
    유지된다.

package com.codingbox.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
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("/calc3")
public class calc3 extends HttpServlet{

	@Override
	protected void service(HttpServletRequest arg0, 
			HttpServletResponse arg1) throws ServletException, IOException {
		
		// application 저장소 선언
		ServletContext application 
					= arg0.getServletContext();
		
		String value_ = arg0.getParameter("value");
		String op = arg0.getParameter("operator");
		
		PrintWriter out = arg1.getWriter();
		int value = 0;
		
		if(!value_.equals("")) {
			 value = Integer.parseInt(value_);
		}
		
		if( op.equals("=") ) {
			// 계산
			int x = (Integer)application.getAttribute("value");
			int y = value;
			String operator = (String)application.getAttribute("op");
			
			int result = 0;
			
			if(operator.equals("+")) {
				result = x + y;
			} else {
				result = x - y;
			}
			
			out.printf("결과값 : %d", result);
		} else {
			// application 값 저장
			application.setAttribute("value", value);
			application.setAttribute("op", op);
		}
		
		
		
	}
	
}


profile
wow

0개의 댓글