jhs0129 2021. 8. 21. 14:51
320x100
반응형
@WebServlet("/hello")
public class Nana extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		PrintWriter out = resp.getWriter();
		out.println("hello");
	}
}

 * java8버전은 tomcat9버전 사용 10버전 호환이 안되는지 사용 에러

  • Annotation을 이용해서 URL 매핑 - web.xml에서 추가적인 servlet을 설정을 할 필요가 없음
  •                                              단 web.xml에서 metadata-complete = "false"로 설정해 줄 것 

@WebServlet("/web url")

 

여러명이서 만들 때 프로그램을 분리된 상태에서 다루도록 하기 위해서 web.xml이 아니라 Annotation을 사용해서 지정


  • 출력형식을 지정을 할때 각 브라우저마다 출력형식을 알려주지 않으면 자의적으로 해석을 함

한글이 깨지는 이유 - ISO-8859-1 인코딩 방식을 톰캣이 기본적으로 사용

                            해당 인코딩 방식을 UTF-8방식으로 변경해야 함

@WebServlet("/hi")
public class Nana extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
        resp.setCharacterEncoding("UTF-8"); // 인코딩 방식 지정
	resp.setContentType("text/html; charset=UTF-8"); //콘텐츠타입 지정
        
        PrintWriter out = resp.getWriter();
		for(int i=0; i<10; ++i)
			out.println("안녕 <br>");
	}
}

인코딩 방식 지정 안했을 경우
인코딩 방식 지정했을 경우


  • 사용자의 요청 처리 - GET,  POST
  • GET요청 - 무엇을 달라고 하는 요청에 옵션이 있을 수 있음

localhost/hello?cnt=3 

hello?cnt=3 : 요청, cnt=3 : 쿼리스트링(문자열로 입력)

 

hello?cnt=3 => "3"

hello?cnt=  => ""

hello?        => null

hello         => null

@WebServlet("/hi")
public class Nana extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
		resp.setCharacterEncoding("UTF-8"); // 인코딩 방식 지정
		resp.setContentType("text/html; charset=UTF-8"); //콘텐츠타입 지정
		
		PrintWriter out = resp.getWriter();
		
		String cnt_ = req.getParameter("cnt");
		int cnt = 10;
		
		if(cnt_ != null && !cnt_.equals(""))//null 혹은 빈문자열이 아닌경우
			cnt = Integer.parseInt(cnt_); // 문자열로 입력
		
		for(int i=0; i<cnt; ++i)
			out.println("안녕 <br>");
	}
}

 


 - 사용자에게 입력을 받아서 처리하기

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="hi">
		<div>
			"안녕"을 몇번 듣고 싶으세요?
		</div>
		<div>
			<input type = "text" name = "cnt">
			<input type = "submit" value = "출력">
		</div>
	</form>
</body>
</html>

 

 * form action : /hi web 열기 - WebServlet annotation과 동일ㅅ

 * input name = 값을 전달 할때의 변수 이름, value = 화면에 보여줄 이름

 

  • post요청

get요청이 url의 파라미터로 보냈다면 post요청은 http body 부분에 담아서 서버로 보냄

데이터 전송의 길이 제한이 없고 용량이 큰 데이터를 보낼 때 사용, 외부적으로 드러나지 않아서 보안에 유리

html form을 통해서 서버로 전달

<body>
	<form action="notice-reg" method="post"> --post방식으로 지정
		<div>
			제목 : <input name = "title" type = "text">
		</div>
		<div>
			내용 : <br>
			<textarea name = "content"></textarea>
		</div>
		<div>
			<input type = "submit" value = "등록">
		</div>
	</form>
</body>

입력을 받을때도 request.setCharacterEncoding을 UTF-8로 설정을 해서 받아야 한글 깨지는 현상을 고칠 수 있음


  • 서블릿 필터

모든 서블릿이 가지는 request, response의 동일한 설정을 한번에 먼저 처리를 하도록 도움

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

	@Override
	public void doFilter(ServletRequest req
			, ServletResponse resp
			, FilterChain chain)
			throws IOException, ServletException {
		//before filter
		req.setCharacterEncoding("UTF-8");
		
		chain.doFilter(req, resp);//요청이 들어오면 다음 흐름 넘김
		
		//after filter
	}

}

filter 파일을 만들어서 처리

320x100
반응형