Servlet & Filter & 서버상태 코드

전영덕·2023년 3월 26일
0

JSP

목록 보기
2/16

GET방식 VS POST방식

GET방식

  • 서블릿에 데이터를 전송할 때 데이터가 URL뒤에 name=value형태로 전송
  • 전송 가능 데이터 최대 255자
  • 기본 전송 방식으로 사용이 쉬움
  • 여러 개의 데이터를 전송할 때 '&'으로 구분해서 전송

POST방식

  • 서블릿에 데이터를 전송할 때 TCP/IP 프로토콜 데이터의 HEAD영역에 숨겨진 채 전송
  • 보안에 유리(get방식보다 유리 하다는 것이지, 개발자도구를 통해 볼수있다)
  • 전송 데이터 용량 무제한
  • 전송 시 서블릿에서 또 다시 가져오는 작업이 필요하므로 GET방식보다 처리속도가 느림
  • doPost()

HTML 파일에서 form 태그의 submit으로 인해 url을 바뀌었을 때, 바뀐 url을 자바에서 받는 방법

예시)

<!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">
		</div>
	</form>
</body>
</html>

http://localhost:8082/hello.html
에서 5 를 입력후에 버튼을 클릭하면
http://localhost:8082/usercount?cnt=5
여기로 이동하고 미리 만들어둔 서블릿클래스의 자바 파일 코드

1 : 안녕 servlet
2 : 안녕 servlet
3 : 안녕 servlet
4 : 안녕 servlet
5 : 안녕 servlet

이렇게 나오게 된다.

package com.codingbox.web.servlet;

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("/cnt")
public class MyServlet2 extends HttpServlet {

	@Override
	protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
//		문자열 인코딩
		arg1.setCharacterEncoding("UTF-8");
		arg1.setContentType("text/html; charset=UTF-8");

		int count = 100;
		String paramCnt = arg0.getParameter("cnt");

		// null 값과 빈 값에 대한 예외처리
		if (paramCnt != null && !paramCnt.equals("")) {
			count = Integer.parseInt(paramCnt);
		}

		PrintWriter out = arg1.getWriter();

		for (int i = 0; i < count; i++) {
			out.println((i + 1) + " : 안녕 servlet<br>");
		}
	}
}

Servlet Filter

  • 위에 UTF-8로 항상인코딩을 해주어야하는데 매번 이렇게 넣기 매우 귀찮은 작업임.
  • 클라이언트와 서버간에 요청과 응답으로 주고받고할 때 중간에 필터가 있어서 인코딩을 미리 해주면 좋을 것이다.
  • 혹은 이 필터를 통해 접근 권한에 대해 설정을 해주어서 누구는(조직의 상급자, 관리자)이 필터를 통과하고, 누구는(조직의 하급자, 사원, 외부인)이 필터를 통과하지 못하게 하는 역할도 한다.
  • 자바 리소스에 자바 파일끼리 모아둔 패키지말고
    필터끼리 모아놓을 필터 패키지를 만든다.
    패키지명 : com.codingbox.Filter
    클래스 명 : CharacterEncodingFilter
package com.codingbox.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");
//		// filterChain으로 다음 작업 진행 여부를 정한다.

		arg0.setCharacterEncoding("UTF-8");

		arg1.setCharacterEncoding("UTF-8");
		arg1.setContentType("text/html; charset=UTF-8");
        
		arg2.doFilter(arg0, arg1);
//	System.out.println("after filter");

	}
}
  • @WebFilter(/)의 은 모든 파일을 의미하며, 이 안에 값을 바꾸어서 특정할 수도 있다.
    실제로 쓸때는 주석 부분도 지워서 사용할 것.
package com.codingbox.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 {
		arg0.setCharacterEncoding("UTF-8");
		arg1.setCharacterEncoding("UTF-8");
		arg1.setContentType("text/html; charset=UTF-8");
		arg2.doFilter(arg0, arg1);
	}
}

서버 상태 코드

  • HTTP상태 코드
  • 1xx : 정보에 대한 코드. 요청을 받았으며 프로세스를 계속한다. 우리가 볼 일은 거의 없다.
  • 2xx : 성공에 대한 코드. 요청을 받았으며 인식했고 수용했다.
  • 3xx : 리다이렉션에 대한 코드. 요청완료를 위해 추가 작업 조치가 필요하다.
  • 4xx : 클라이언트에 대한 오류. 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.
  • 5xx : 서버에 대한 오류. 개발자잘못. 서버가 명백히 유효한 요청에 대해 충족을 실패했다.
    정리된 서버상태코드로 이동하기

0개의 댓글