Servlet

원종서·2021년 9월 22일

Servlet

  1. Servlet을 이용해 웹을 구동시키려면 HttpServlet 을 상속 받는다.
  2. WebServlet Annotation 으로 URL을 지정한다.
@WebServlet("/hello")
public class Nana extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		PrintWriter out = resp.getWriter();
		
		for(int i =0; i<100;i++) {
			out.println((i+1) +"안녕! <br/>");
		}
	} 
}

위처럼 코드를 작성하고 서버를 돌리면

1 ?? <br//> 가 뜬다.

이것은 decoding 방법을 전해주지 않아서 그런데

resp.setCharacterEncoding("UTF-8");
// utf-8로 인코딩 해서 보내라
resp.setContentType("text/html; charset=UTF-8");
// 받는 쪽은 utf-8로 받아라

를 보내주면 정상적으로 응답 받을 수 있다.

Req Query 받기

  • query는 string 값으로 오기 때문에 int로 바꿔줘야한다.

후 시작을 누르면

500상태값을 받는 것을 볼 수 있다.

이유는 url에 쿼리 값이 없기 때문이다.

Query Default 값 설정하기


		String cnt_ = req.getParameter("cnt");
		
		int cnt = 100;
		
		if(cnt_!=null && !cnt_.equals("")) {
			cnt = Integer.parseInt(cnt_);
		}

POST

Post body로 한글 받기

req.setCharacterEncoding("UTF-8");

같은 name 배열로 받기

String[] num_ = req.getParameterValues("x");

Survlet Filter


@WebFilter("/*")
public class CharacterEncoidingFilter implements Filter {

	@Override
	public void doFilter(ServletRequest req,
			ServletResponse res,
			FilterChain chain)
			throws IOException, ServletException {
		req.setCharacterEncoding("UTF-8");
		
		System.out.println("before filter");
		chain.doFilter(req, res);
		System.out.println("after filter");
	}

}
  • express의 middleware

Application Storage

Servlet Context

ServletContext application =  req.getServletContext();
application.setAttribute("value", v);
int x = (Integer)application.getAttribute("value");
  • 범위: 전역범위
  • 생명주기: WAS가 시작해서 종료할 때 까지
  • 저장위치 WAS 서버 메모리

Session

HttpSession session = req.getSession();
session.setAttribute("value", v);
int x = (Integer)session.getAttribute("value");
            
  • 범위: 세션범위(사용자 별도로)

  • 생명주기: 세션이 시작해서 종료할 때 까지

  • 저장위치 WAS 서버 메모리

  • 서버 내의 캐비넷 저장소


	// 서버에서 클라이언트
	Cookie valueCookie = new Cookie("value",  String.valueOf(v));	
    	// 특정 url로만 쿠키가 전달 받을 수 있게 설정 
    	valueCookie.setPath("/calc2");
        // 소멸 시간 설정(24시간)
        valueCookie.setMaxAge(60 * 60 *24);
    	res.addCookie(valueCookie);
		
    //클라이언트에서 서버
    // 쿠키는 배열로 온다.
    Cookie[] cookies = req.getCookies();
	for(Cookie c : cookies) {	
		if(c.getName().equals("value")) {
			x = Integer.parseInt(c.getValue());
				break;
			}
	}
  • 서버에서 쿠키로 보낼때는 무조건 string으로 보내야함
  • 범위: web Browser별 지정한 url 범주 공간
  • 생명주기: Browser에 전달한 시간부터 만료시간 까지
  • 저장위치 web Browser

Post Get 처리하기

@WebServlet("/something")
public class Somehhing extends HttpServlet {

	// service method 
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	
    
    	// do post or do get처리 전 공통으로 처리해야 할 부분 로직처리
		super.service(req, resp);
		
	}
    
    // doPost, doGet Overriding시 service method 에 super 불러줘야함.
    
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("do POST method is called ");
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("do get method is called ");
	
	}
	
	
	
}

0개의 댓글