본문 바로가기
빅데이터 부트캠프/Java

빅데이터 부트캠프 74일차 (Java Web)

by Mecodata 2022. 10. 24.

개발 플랫폼

- Java SE (Standard Edition) = 데스크탑, 서버, 임베디드 시스템 개발을 위한 플랫폼

- Java EE (Enterprise Edition) = WAS의 지원으로 실행되는 시스템 개발을 위한 플랫폼

※ WAS(Web Application Server) = 인터넷 상에서 HTTP프로토콜을 통해 사용자 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어 -> ex) apache tomcat

- Java ME (Micro Edition) = 모바일 장치나 내장형 장치에서 실행되는 애플리케이션 지원 플랫폼

 

Eclipse - Apache Tomcat 연동

- 아파치 톰캣 사이트(https://tomcat.apache.org/)에서 아파치 톰캣 다운로드

- 이클립스에서 File - New - others - server 선택 - 아파치 톰캣 버전 선택 - Tomcat Installation Directory에 아파치 톰캣이 설치된 폴더 경로 설정 

 

HTTP(Hyper Text Transfer Protocol)

- 웹 브라우저와 웹 서버 간에 통신하는 프로토콜
- 무연결(Connectionless) = 통신시 연결을 유지하지 않고 데이터를 주고받음
- 무상태(Stateless) = 요청마다 독립적인 트랜잭션으로 취급하여 이전 연결에서 했던 작업을 그대로 사용할 수 없음
- 요청 정보(Request) = 서비스를 요청한 클라이언트에 관한 정보
- 응답 정보(Response) = 서비스 응답을 처리하는 정보

 

서블릿(Servlet)

- 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술

- 자바에서 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 클래스의 일종

- 서버는 서블릿을 통해 client의 요청을 전달받고 요청에 대한 결과값을 다시 client에 전송

※ 동적 웹 페이지 = 사용자의 요청에 따라 다른 결과들이 반환되는 웹 페이지

- 기존의 정적 웹 프로그램의 문제점을 보완하여 동적인 여러 가지 기능을 제공
- JAVA의 스레드를 이용하여 동작
- MVC패턴에서 컨트롤러로 이용

HttpServlet

- client와 server간의 연결을 위한 필수 클래스

- HttpServletRequest, HttpServletResponse의 부모 클래스라 HttpServletRequest, HttpServletResponse 객체를 사용하는 클래스 생성시 import 및 extends 필수!

- @WebServlet(url) = 서블릿 URL 지정 (Servlet 클래스 정의시 바로 위에 입력)

 

HttpServletRequest

- client가 전송하는 데이터를 보유하고 서버에 제공하는 인터페이스

- client가 전송하는 데이터를 HttpServletRequest 객체에 담아 이에 대한 서버의 응답을 받을  HttpServletResponse 객체와 함께 서블릿으로 전달 

- HTTP 프로토콜의 request 정보를 서블릿에 전달하기 위해 사용
- getParameter('키워드') = client가 입력하여 전송한 string 데이터들중 지정한 키워드에 대한 값을 반환하는 메소드

getParameter로 반환되는 값의 타입은 데이터의 원래 타입과 상관없이 String이니 숫자로 사용해야 할 경우에는 Integer.parseInt(getParameter)와 같은 방법으로 데이터 타입을 변환해야 함

Integer.parseInt() = 데이터 타입 String -> int 변환 (따로 import 해줄 필요 X)

ex) HttpServletRequest.getParameter("id") = client가 입력한 id 반환


HttpServletResponse

- client의 요청에 대한 서버의 응답을 client에게 전달하는 인터페이스

- 서블릿은 HttpServletRequest 객체를 통해 전달받은 요청에 대한 결과값 HttpServletResponse 객체에 저장하여 client로 전송


- setContentType("응답 포맷(MIME type)") = 브라우저에 서비스하는 데이터 포맷과 인코딩

ex) setContentType("text/html;charset=UTF-8") = UTF-8 인코딩


- getWriter() = HttpServletResponse가 서버로부터 전달받은 결과값을 PrintWriter 객체로 반환 

ex) PrintWriter out = HttpServletResponse.getWriter()

- PrintWriter 객체 안에 있는 데이터는 println()를 통해 출력 가능

 

- protected void doGet(HttpServletRequest, HttpServletResponse) = Get 방식으로 데이터를 전달했을 경우 작업 수행
- protected void doPost(HttpServletRequest, HttpServletResponse) = POST 방식으로 데이터를 전달했을 경우 작업 수행

- POST 방식의 데이터 전달도 doGet메소드 밑에서 다룰 수 있음 (doGet < doPost)

 

@WebServlet("/check")
public class IdCheck extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public IdCheck() {
        
    }
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// step01 : 요청
		System.out.println(request.getParameter("id"));
		System.out.println(request.getParameter("pw"));
		
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		
		System.out.println(id + " - " + pw);
		
		// step02 : 응답
		response.setContentType("text/html;charset=UTF-8"); // 한글 깨짐 해결
		PrintWriter out = response.getWriter();
		out.println("환영합니다 : " + id + "님");
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

 

자바 웹 구현시 HttpServlet, HttpServletRequest, HttpServletResponse, PrintWriter import 필수!

 

자바 웹 구현시 자주 사용되는 HTML 태그

<form> ~ </form> 

- client와 서버 간의 작업을 수행하기 위한 양식을 만들 때 사용하는 HTML 태그

- action = 데이터를 전송할 URL 설정 

※ bob.html이라는 파일이 A라는 폴더에 있는 경우 action = "bob"을 입력시

-> 실행 URL이 bob.html의 절대경로인 A/bob.html로 설정

하지만 action="../bob"으로 설정하면 실행 URL이 A는 포함시키지 않은 채 /bob.html로 설정 

- method = 데이터를 전송하는 방식(get/post) 설정

- GET = URL에 변수를 포함시켜 요청

- POST = URL에 변수를 포함시키지 않고  Mapping 정보만 표시 -> GET보다 POST가 보안상 더 안전

 

<input> ~ </input>

- client의 데이터 입력 방식 설정을 위해 사용하는 HTML 태그

- type = input 양식 컨트롤의 유형 설정 (text, password, checkbox, file, button 등)

- name = input 양식 컨트롤의 이름 설정

- placeholder = 양식 컨트롤이 비어있는 때 양식 컨트롤에 나타나는 내용

- value = 서버에 전송할 문자열 데이터 설정

- hidden = 사용자에게 숨겨져 있는 입력 필드 설정 (서버로 이동시 정의한 name:value도 보이지는 않지만 같이 이동함)

※ value가 한글이고 form 태그의 method가 post방식이면 한글 깨짐 방지를 위해 request.setCharacterEncoding("utf-8")으로 인코딩 수동 적용 필수

※ value가 한글이고 form 태그의 method가 get방식의 경우에는 수업때 사용한 apache tomcat 9 버전에서는 자동 인코딩 되어 코드 입력 필요 X

 

HTML 태그 관련 참고 사이트 

https://developer.mozilla.org/ko/docs/Web/HTML/Element/Input

 

<input>: 입력 요소 - HTML: Hypertext Markup Language | MDN

HTML <input> 요소는 웹 기반 양식에서 사용자의 데이터를 받을 수 있는 대화형 컨트롤을 생성합니다. 사용자 에이전트에 따라서 다양한 종류의 입력 데이터 유형과 컨트롤 위젯이 존재합니다. 입

developer.mozilla.org

댓글