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("손님 안녕하세요!");
}
}
}
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버튼: 데이터를 전송하기 위한 버튼
스마트인재개발원에서 진행된 수업내용입니다.