일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- egov
- 마스킹
- 기출문제
- java
- JAXBContext
- NoSQL
- swipe 배너
- query
- 정보처리산업기사
- 부스트코스
- Tomcat
- 오라클
- JSON
- vue Carousel
- spring
- JQuery
- insertAll
- jsp
- vue.js
- mybatis
- Ajax
- vscode tutorial
- MariaDB
- jdbc
- checkbox
- INSERT
- github
- 구멍가게코딩단
- mysql
- bulkinsert
- Today
- Total
개발새발
5. [웹 프로그래밍 기초] Servelet - BE 본문
[자바 웹 어플리케이션 (Java Web Application)]
WAS에 설치(deploy)되어 동작하는 어플리케이션입니다.
자바 웹 어플리케이션에는 HTML, CSS, 이미지, 자바로 작성된 클래스(Servlet도 포함됨, package, 인터페이스 등), 각종 설정 파일 등이 포함됩니다.
*프로젝트생성해서 서블릿클래스는 이클립스 내부 런타임 톰캣에 의해 동작되고 이후 브라우저 이용해서 톰캣서버에 요청보내고 화면 띄움
1) Servlet이란?
자바 웹 어플리케이션의 구성요소 중 동적인 처리를 하는 프로그램의 역할입니다.
서블릿을 정의해보면 서블릿(servlet)은 WAS에 동작하는 JAVA 클래스입니다.
서블릿은 HttpServlet 클래스를 상속받아야 합니다.
서블릿과 JSP로부터 최상의 결과를 얻으려면, 웹 페이지를 개발할 때 이 두 가지(JSP, 서블릿)를 조화롭게 사용해야 합니다.
예를 들어, 웹 페이지를 구성하는 화면(HTML)은 JSP로 표현하고, 복잡한 프로그래밍은 서블릿으로 구현합니다.
* 응답결과 만들어낼때 out.print해서 일일이 넣을수 없음 그래서 만들어낸게 jsp
[생각해보기]
1. 동적인 페이지가 필요한 경우는 어떤 것일까요?
- 클라이언트가 정보를 요청하고 서버가 응답해줘야할 필요가 있을때
2) Servlet 작성 방법
현재는 프로젝트에서 웹을 개발할 때 서블릿을 직접 써서 개발하지 않고 편하게 사용할 수 있게 도와주는 다양한 프레임워크(spring?)를 사용해서 개발하는 경우가 많다. 하지만 그 프레임워크들도 서블릿 없이는 동작할 수 없기 때문에 서블릿의 기본적인 작성법이나, 라이프 사이클을 이해하고 있으면 웹의 동작을 이해하는데 많은 도움이 된다.
[버전에 따른 Servlet 작성 방법]
1. Servlet 3.0 spec 이상에서 사용하는 방법
- web.xml 파일을 사용하지 않습니다.
- 자바 어노테이션(annotation)을 사용합니다.
실습쓰
2. Servlet 3.0 spec 미만에서 사용하는 방법
servlet을 등록할 때 web.xml 파일에 등록합니다.
**3.0미만 버전에서는 서블릿 하나 생성하면 무조건 web.xml에 등록해줘야했음
[생각해보기]
1. HelloServlet 클래스 파일을 작성할 때 HttpServlet을 상속하지 않았다면 어떻게 동작할까요?
- 일단 에러남
was( 서블릿컨테이너 ) 는 servlet 호출규칙에 따라 서블릿(.class) 을 실행시킵니다.
servlet 규칙에 따라 만들어진 class가 HttpServlet입니다. 즉 HttpServlet 는 서블릿 규칙에 따라 만들어진것입니다. 많은 호출규칙들이 HttpServlet 클래스에 있을것입니다. doGet, doPost 등이 서블릿 호출 규칙입니다. 그런데 HttpServlet을 상속하지 않으면 Servlet 규칙에 어긋나기 때문에 에러가 발생합니다.
3) Servlet 라이프 싸이클
어떤 객체의 생성부터 소멸까지의 과정을 라이프 사이클 (Life Cycle)라고 한다.
(init, destroy, pause이런거? 안드로이드 할때 배움ㅎ)
알아볼 내용 : 서블릿이 언제 생성되고 언제 호출이되는가!
[Servlet 생명주기]
- WAS는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 확인합니다.
- if (메모리에 없음) {
- 해당 서블릿 클래스를 메모리에 올림
- init() 메소드를 실행
}
- service()메소드를 실행 - was가 종료되거나, 웹 어플리케이션이 새롭게 갱신될 경우 destroy() 메소드가 실행됩니다.
[참고링크] 템플릿 메소드 패턴
4) Request, Response 객체 이해하기
자바에서의 객체 = 관련된 정보를 모아서 가지고 있음
[요청과 응답]
WAS는 웹 브라우저로부터 Servlet요청을 받으면,
- 요청할 때 가지고 있는 정보를 HttpServletRequest객체를 생성하여 저장합니다.
- 웹 브라우저에게 응답을 보낼 때 사용하기 위하여 HttpServletResponse객체를 생성합니다.
- 생성된 HttpServletRequest, HttpServletResponse 객체를 서블릿에게 전달합니다. //path로 매핑된
[HttpServletRequest]
- http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용합니다.
- 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메소드를 가지고 있습니다.
- Body의 Stream을 읽어 들이는 메소드를 가지고 있습니다.
[HttpServletResponse]
- WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServleResponse객체를 생성하여 서블릿에게 전달합니다.
- 서블릿은 해당 객체를 이용하여 content type, 응답코드, 응답 메시지등을 전송합니다.
[헤더 정보 읽어들이기]
실습코드
클라이언트가 요청했을 때 가지고 들어온 헤더의 정보를 알아내는 방법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
package HeaderServlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
@WebServlet("/header")
public class header extends HttpServlet {
private static final long serialVersionUID = 1L;
public header() {
super();
}
//doGet메서드에 파라미터로 가지고옴
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>form</title></head>");
out.println("<body>");
//request에 물어보면 나옴
Enumeration<String> headerNames = request.getHeaderNames(); //모든 헤더 정보를 문자열 Enumeration반환
while(headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String headerValue = request.getHeader(headerName);
out.println(headerName + " : " + headerValue + " <br> ");
}
out.println("</body>");
out.println("</html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
|
[파라미터 읽어 들이기]
실습코드
[그외의 요청정보 출력]
"get하고 보면 request 객체 = 클라이언트가 요청할때 보내준 정보들을 모두 추상화해서 가지고 있는 객체고
필요하다면 객체로부터 원하는 값을 받아서 사용할수 있겠구나!"
[참고링크] HTTP headers
'[부스트코스] 웹프로그래밍 > 웹 프로그래밍 기초' 카테고리의 다른 글
[웹 프로그래밍 기초] 프로젝트 만들기 (0) | 2019.11.20 |
---|---|
[웹 프로그래밍 기초] 내용정리 (0) | 2019.11.20 |
4. [웹 프로그래밍 기초] 개발환경 설정 - BE (0) | 2019.11.20 |
2. [웹 프로그래밍 기초] HTML -FE (0) | 2019.11.20 |
1. [웹 프로그래밍 기초] Web개발의 이해 - FE/BE (0) | 2019.11.20 |