JSP\Servlet

[JSP\Servlet] servlet 개념과 실습 1 [스마트인재개발원]

취준생코린이 2021. 6. 17. 17:58
728x90

Servlet과 JSP의 개념
기능의 차이는 없고 역할의 차이만 있다.

하는 일은 동일하다.


Servlet 개념

  • server상에서 작동하는 Java기반의 웹 어플리케이션 프로그래밍 기술
  • server + Applet의 합성어
  • Applet은 java 프로그램이 웹서버에서 자동으로 설치되어 동작하는 프로그램
  • 클라이언트의 요청에 동적으로 작동하고 응답은 HTML을 이용한다.
  • servlet은 HttpServlet 클래스를 상속받는다.
  • 웹 개발을 위해 만든 표준
  • .java 확장자를 가진다
  • java Muulti Thread(멀티 쓰레드)를 이용하여 동작함으로 속도와 메모리 면의 효율성이 좋다
  • 객체지향적 대규모 Web Application 개발에 적합하다

 

JSP 개념

  • Java 언어를 기반으로 하는 Server Side 스크립트 언어
  • HTML 코드 안에 Java 코드
  • Servlet를 보완하고 기술을 확장한 스크립트 방식 표준
  • Servlet의 모든 기능 + 추가적인 기능

 

 

Servlet 실습

Request의 주요 메소드

 

request.getLocalAddr() 요청받는 server의 IP주소 획득
request.getLocalName() 요청받는 server의 이름 획득
request.getLocalPort() 요청받는 server의 Listen상태로 있는 포트 획득
String local_addr = request.getLocalAddr();  # 요청받는 server의 IP주소 획득
String local_name = request.getLocalName(); # 요청받는 server의 이름 획득
int local_port = request.getLocalPort();  # 요청받는 server의 Listen상태로 있는 포트 획득

System.out.println(local_addr);
System.out.println(local_name);
System.out.println(local_port);

 

request.getRemoteAddr() 요청하는 client의 IP주소 획득
request.getRemoteHost() 요청하는 client의 이름 획득
request.getRemotePort() client가 Server와 총신하기 위해 열어둔 포트 획득
String client_addr = request.getRemoteAddr();  # 요청하는 client의 IP주소 획득
String client_host = request.getRemoteHost(); # 요청하는 client의 이름 획득
int client_port = request.getRemotePort();  # client가 Server와 총신하기 위해 열어둔 포트 획득

System.out.println(client_addr);
System.out.println(client_host);
System.out.println(client_port);

 

request.getLocale() 요청을 인식하기에 적절한 지역을 획득
request.getprotocol() 요청에 사용된 프로토콜을 획득
Locale locale = request.getLocale();  # 요청을 인식하기에 적절한 지역을 획득
String protocol = request.getprotocol(); # 요청에 사용된 프로토콜을 획득

System.out.println(locale);
System.out.println(protocol);

 

 

 

URL Mapping

 

 

URL Mapping(URL 맵핑)

  •  웹 브라우저에서 Servlet을 동작시키기 위해 실제 Java클래스의 이름대신, servlet을 요청하기 위한 문자열 Servlet클래스와 Mapping시키는것
  • 원래주소: http://localhost:8181/Servlet/com.javalec.ex.HelloWeb
  • 맵핑된 주소: http://localhost:8181/Servlet/HelloWeb

 

맵핑된 주소를 사용하는 이유

  • URL 경로가 길고 불편해서
  • URL 경로가 노출되어 보안상의 문제가 있어서
  • 실제 서블릿(Servlet) 클래스를 공개하지 않기 위해서

 

맵핑하는 방법

디폴트로는 클래스의 이름이 들어가있다. 값을 그대로 둬도 되고 맵핑할 문자열을 넣어서 바꿔줘도 된다.

 

 

Servlet 실습 문제 1

특정 IP를 가진 유저가 웹페이지에 들어오면  안녕!이라는 문자가 출력되고
모르는 IP가 들어오면 손님 안녕하세요! 가 출력되게끔 작성

 

아래에서 IP주소는 모두 개인정보 보호를 위해서 임의로 작성되었습니다.

IPv4: 192.168.0.1 같은 형식 (내 PC의 주소: 154.4.2.1 또는 localhost)
IPv6: 0:0:0:0:0:0:0:1 같은 형식으로 되어있다.
내 PC의 IP확인 방법: Window키 + R -> 실행창에서 cmd작성후 실행 -> 'ipconfig' 명령어 입력

앞으로 IP주소는 IPv4형식으로 사용할거다.


request객체

  • 클라이언트로부터 데이터가 넘어오면 데이터를 받아서 처리해야하는데 요청에 관련된 정보를 담고있는 객체
  • 사용자가 요청했을 때 사용자의 정보를 담고있는 객체(header정보, 사용자가 입력한 정보,...);

 

아래 코드를 실행하면 웹페이지가 생기고 그 웹페이지에 다른사람들이 방문하면 출력창에 if문으로 설정한게 출력된다.

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//	URL Mapping 클래스 이름과 동일할 필요가 없다.
//	URL Mapping : 실제 Servlet클래스를 문자열경로와 연결하는 기술
//				외부에서는 지정한 문자열경로로만 요청할수있다.
@WebServlet("/Servlet")
public class ex01Servlet extends HttpServlet {

//	service -> Java의 main메소드와 같은 역할
//	사용자의 요청이 들어왔을때 request, response객체에 정보들이 저장된다.
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//		코드를 수정후 저장하면 Tomcat서버 자동 재실행
		System.out.println("서버실행");		
		
//		접속한 사용자의 IP정보 가져온 후 변수에 저장
		String ip = request.getRemoteAddr();
		System.out.println(ip);
		
//		짝궁의 IP인 경우 안녕! 출력, 짝궁이외의 IP인 경우 손님 안녕하세요! 출력
		if(ip.equals("173.35.1.37")) {
			System.out.println("안녕!");
		}else if(ip.equals("145.34.1.35")){
			System.out.println("안녕!");
		}else if(ip.equals("165.37.1.15")){
			System.out.println("안녕!");
		}else {
			System.out.println("손님 안녕하세요!");
		}
	}

}

IP주소는 개인정보 보호를위해 삭제

 

 

 

Response

 

Response

  • 클라이언트로 부터 들어온 요청에 대한 결과를 server가 클라이언트에게 응답할 수 있게 해주는 객체

 

Servlet 실습 문제 2

PrintWriter out = response.getWriter(); -> 텍스트 출력 스트림 획득

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

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//		response객체: 사용자에게 정보를 응답해줄때 사용하는 객체
//		ex) HTML문서, Text, 페이지 이동, 이미지,...
		
//		사용자에게 어떤 형식의 데이터를 응답할건지 지정
//		문자인코딩 방식: euc-kr, utf-8
//		euc-kr: 모든 언어,문자를 해석해주지 않는다. ex) 햬
//		utf-8: 전세계 모든 언어를 변환, 햬같은거도 변환해줌
//		html위치에 plain를 쓰면 모두 text로 출력
		response.setContentType("text/html; charset=euc-kr");
		
//		사용자에게 데이터를 전달할 수 있는 통로역할!
		PrintWriter out = response.getWriter();
		
//		out객체: Text, HTML, Tag를 혼합해서 사용자에게 전송 
		out.print("<h1>Hello servlet!</h1>");
		out.print("<ul>");
		out.print("<li>HTML</li>");
		out.print("<li>CSS</li>");
		out.print("<li>JS</li>");
		out.print("</ul>");
	}

}

데이터 전송을 위한 3가지 조건

 

 

Servlet 실습 문제 3

위에서는 java확장자로만 만들었는데 이제 html파일로 형식을 잡고 Servlet에서 기능을 작성할거다.

Servlet의 확장자는 .java다.

실행은 html파일에서 실행해야 웹페이지가 뜬다.

 

아래는 ex03Request.java 파일

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Ex03Request
 */
@WebServlet("/ex03Request")
public class ex03Request extends HttpServlet {

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
//		사용자가 입력한 데이터를 가져온 후 변수에 저장
//		request.getRarameter(input태그의 name속성값): 아래같이 문자("")로 써야함
		String data = request.getParameter("data");
		System.out.println(data);
	}

}

 

아래는 ex03Request.html 파일이다.

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<h1>서버에 데이터 전송하기!</h1>
	<!-- 
		*데이터를 보내기 위한 3가지 조건
		action속성: 데이터를 전송할 목적지
			- (Servlet 파일의 URL Mapping된 문자열 경로 작성)
		name속성 : 데이터를 구분하기 위한 버튼
		submit버튼: 데이터를 전송하기 위한 버튼	
	 -->
	<form action="ex03Request">
		
		Data: <input type="text" name="data">
		<input type="submit" value="전송">	
	</form>
</body>
</html>

 

웹페이지
콘솔창

 

html파일을 실행하면 위의 웹페이지가 뜨는데 텍스트 박스에 글자를 쓴후 전송을 누르면 아래와 같이 내가쓴 글이 콘솔창에 출력된다.

 

이런 방식으로 데이터가 이동한다

 

 

리뷰(Review)

 

Servlet 개념

  • server상에서 작동하는 Java기반의 웹 어플리케이션 프로그래밍 기술

request객체

  • 클라이언트로부터 데이터가 넘어오면 데이터를 받아서 처리해야하는데 요청에 관련된 정보를 담고있는 객체
  • 사용자가 요청했을 때 사용자의 정보를 담고있는 객체(header정보, 사용자가 입력한 정보,...);

Response

  • 클라이언트로 부터 들어온 요청에 대한 결과를 server가 클라이언트에게 응답할 수 있게 해주는 객체

URL Mapping(URL 맵핑)

  •  웹 브라우저에서 Servlet을 동작시키기 위해 실제 Java클래스의 이름대신, servlet을 요청하기 위한 문자열 Servlet클래스와 Mapping시키는것

 

데이터를 보내기 위한 3가지 조건

  • action속성: 데이터를 전송할 목적지
    - (Servlet 파일의 URL Mapping된 문자열 경로 작성)
  • name속성 : 데이터를 구분하기 위한 버튼
  • submit버튼: 데이터를 전송하기 위한 버튼

 

스마트인재개발원에서 진행된 수업내용입니다.

https://www.smhrd.or.kr/

728x90