JAVA WEB 공부 1일차

머리터지기 일보직전·2022년 9월 7일
0

JAVA WEB

목록 보기
1/8

서블릿의 세 가지 기본 기능

  • 클라이언트로부터 요청을 얻음
  • 데이터베이스 연동과 같은 비즈니스 로직을 처리함
  • 처리된 결과를 클라이언트에 응답

서블릿 요청과 응답 수행 API 기능

  • 요청과 관련된 API : javax.servlet.http.HttpServletRequest 클래스
  • 응답과 관련된 API : javax.servlet.http.HttpServletResponse 클래스
<form> 태그를 이용해 서블릿에 요청 예

<form name="frmLogin" method="get" action="login" encType="UTF-8">
	아이디 : <input type="text" name="user_id"><br>
    비밀번호 : <input type="password" name="user_pw"> <br>
    <input type="submit" value="로그인"> <input type="reset" value="다시입력">
</form>

--> 로그인 버튼 클릭 시 <form> 태그의 action 속성에 지정한 
    JSP나 서블릿으로 name/value 전송

form 태그와 관련된 여러가지 속성

  • name : form 태그의 이름을 지정 / 여러개의 form이 존재할 경우 구분하는 역할 / 자바스크립트에서 form 태그에 접근할 때 자주사용
  • method : form 태그 안에서 데이터를 전솔할 때 전송 방법을 지정 / GET 또는 POST로 지정 (기본 GET)
  • action : form 태그에서 데이터를 전송할 서블릿이나 JSP를 지정 / 서블릿으로 전송할 때는 매핑 이름을 사용
  • encType : form 태그에서 전송할 데이터의 encoding 타입을 지정 / 파일을 업로드 할 때는 multipart/form-data로 지정
doGet을 이용하여 <form>태그에서 전송한 값을 받는법

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String user_id = request.getParameter("user_id");
		String user_pw = request.getParameter("user_pw");
		System.out.println("아이디 : " +user_id);
		System.out.println("비밀번호 : "+user_pw);

여러개의 값을 전송할 때의 요청 처리

  • getParameterValues() 메서드를 이용
  • 전송되는 데이터가 많을 경우 name의 값을 기억할 필요없이 getParameterNames() 메서드를 이용해 name을 얻음
getParameterValues() 메서드 이용

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String user_id = request.getParameter("user_id");
		String user_pw = request.getParameter("user_pw");
		System.out.println("아이디 : "+user_id);
		System.out.println("비밀번호 :"+user_pw);
		
		String[] subject = request.getParameterValues("subject");
		for(String str : subject) {
			System.out.println("선택한 과목 : " + str);
		}
	}

getParameterNames() 메서드 이용

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		Enumeration enu = request.getParameterNames();
		
		while(enu.hasMoreElements()) {
			String name = (String)enu.nextElement();
			String[] values = request.getParameterValues(name);
			for(String value : values) {
				System.out.println("name = "+name+", value = " + value);
			}
		}
	}

서블릿 응답처리

응답 처리 방법

  • doGet()이나 doPost()메서드 안에서 처리
  • javax.servlet.http.HttpServletResponse 객체를 이용
  • setContentType()을 이용해 클라이언트에게 전송할 데이터 종류(MIME-TYPE)을 지정함
  • 클라이어트(웹 브라우저)와 서블릿의 통신은 자바 I/O의 스트림을 이용

MINE-TYPE : 톰캣 컨테이너에 미리 지정해 놓은 데이터 종류로 서블릿에서 브라우저로 전송 시 설정해서 사용

EX)

  • HTML로 전송시 : text/html
  • 일반 텍스트로 전송시 : text/plain
  • XML 데이터로 전송시 : application/xml

서블릿 응답 처리 순서
setContentType()를 이용해 MIME-TYPE 지정 -> 데이터를 출력할 PrintWriter 객체 생성 -> 출력 데이터를 HTML형식으로 만듬 -> PrintWriter의 print()나 println()을 이용해 데이터 출력

response의 setContentType()를 통해 MIME-TYPE을 지정하고 
PrintWriter을 통해 응답하는 방법

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		String id = request.getParameter("user_id");
		String pw = request.getParameter("user_pw");
		
		String data = "<html>";
		data += "<body>";
		data += "아이디: " + id;
		data += "<br>";
		data += "비밀번호: " + pw;
		data += "</body>";
		data += "</html>";
		
		out.print(data);

GET과 POST의 차이

  • GET은 주소창에 값이 보이고 POST는 보이지 않는다.

0개의 댓글