문준영
새벽 코딩
문준영
전체 방문자
오늘
어제
  • 분류 전체보기
    • 웹 개발
    • JAVA
      • 기본 문법 내용 정리
      • 함수 내용 정리
      • 쉽게 배우는 자바 프로그래밍 문제 풀이
    • HTML
      • HTML
      • CSS
      • 문제풀이
    • JavaScript
    • MYSQL
    • C
      • 기본 문법 내용 정리
      • 백준 알고리즘 (c언어)
      • 자료구조
    • Python
      • 참고 알고리즘
      • 기본 문법 내용 정리
      • 자료구조 내용 정리
      • 백준 알고리즘 (파이썬)
    • 깃허브
    • 멀티잇 풀스택

티스토리

hELLO · Designed By 정상우.
문준영

새벽 코딩

멀티잇 풀스택

8 week_1 Servlet

2023. 2. 6. 14:05
Servlet

서블릿은 웹 페이지를 만들 때 사용되는 response와 request을 간단하게 다룰 수 있게 해주는 자바 기반 웹 기술

 

  JSP Servlet
공통점 웹 페이지를 동적으로 생성하기 위한 서버 프로그램
정의  자바 언어를 기반으로 하는 Server Side 스크립트 언어 자바 언어를 기반으로 HTML을 작성하여 웹페이지를 만드는 프로그램
특징 1 화면 로직 처리에 적합 DB 통신, Business logic, 데이터를 읽고 처리하는 작업에 유용
특징 2 HTML(Java) Java(HTML)

 

 

서블릿의 동작 과정

클라이언트가 웹 서버에 request(요청)를 하면 웹 서버는 WAS에 요청을 넘겨주고 WAS에서 각 요청에 해당하는

서블릿을 실행한다. 실행 이후 결과 값을 클라이언트에 response(응답)한다. 

 

1. 클라이언트의 URL 요청

<form action="PatternName" method="get">
	<input type="submit" value="get으로 이동">
</form>
<a href="PatternName">get으로 이동</a>
<button onclick="move()">이동</button>

<script type="text/javascript">
function move() {
	location.href="PatternName";
 }</script>

등 다양한 방식으로 URL을 요청할 수 있다. 기본적으로 method는 get을 가리키며 post 방법을 하기 위해서는

method를 post로 지정해야 한다.

  특징 장점 단점
get 서버에서 데이터를 가져와 보여줄 때 사용하며 페이지 연결이 주목적 속도가 빠름  서버로 보내는 데이터를 사용자가 확인할 수 있어 보안에 취약하다.
post 서버상의 데이터 값이나 상태를 변경할 때 사용하며 데이터 전달이 주목적 서버로 보내는 데이터를 사용자가 확인할 수 없어 보안에 강하다. 한글 처리를 해줘야 함

 

2. 웹 서버는 웹 클라이언트한테 받은 HTTP요청 해석 후, 서블릿 요청인지를 확인한 후, 서블릿 컨테이너로 요청 전달

 

3. HTTP 요청 처리를 위한 HttpServletRequset 객체 및 HttpServletResponse 객체 생성

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet{
	//.....구현..
}
HttpServletRequest HTTP 요청 정보를 제공하는 인터페이스로 서블릿에게 request 정보를 전달하기 위한 목적으로 사용
HttpServletResponse HTTP 응답 정보를 제공하는 인터페이스로 HttpServletResponse객체에 정보를 담아 전송하기 위해 사용

 

4. web.xml 분석을 통해 요청된 서블릿 클래스을 탐색

<servlet>
	<servlet-name>servletName</servlet-name>
	<servlet-class>ProjectName.ClassName</servlet-class> 
</servlet>

<servlet-mapping>
	<servlet-name>servletName</servlet-name>
	<url-pattern>/PatternName</url-pattern>
</servlet-mapping>

servlet 과 servlet-mapping 모두 name을 같게 적어야 하며 해당 PatternName 호출 시 해당 Class로 이동한다.

 

 

5. 해당 서블릿에서 서비스를 수행하도록 service() 메서드 호출

  • 처음 실행 시 : 인스턴스 생성 -> init() -> 초기화 -> 스레드 생성
  • 이미 실행 시 : 기존 인스턴스에 스레드 생성
init() 서블릿 요청 시 맨 처음 한번 호출되며 주로 초기화 작업에 수행
destroy() 서블릿 수행 후 메모리에서 소멸될 때 호출되며 주로 마무리 작업에 수행

 

6. doGet() 또는 doPost() 호출

@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//... 구현 ..
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
			//... 구현 ..
	}

HttpServletRequest 객체와 HttpServletResponse 객체를 전달받아 HttpServletResponse 객체를 전달

 

 

7.HttpServletResponse 객체를 서블릿 컨테이너에서 HTTP 형태로 변환 후 웹서버로 전송

 

8. HttpServletRequest객체와 HttpServletResponse 객체의 메모리 소멸 및 스레드 종료

 

 

 

서블릿 출력 형식 지정

서블릿에서 클라이언트의 요청에 대한 응답은 텍스트 형태가 될 수 있다. 그러므로 데이터를 컨트롤하기 위해서는

텍스트 형태로 응답을 보내도록 설정해야 한다. 

 

즉 서블릿에서 들어온 요청을 HTML형태로 응답을 보내기 위해서는 내보낼 출력 스트림을 얻어야 한다.

PrintWriter pw = resp.getWriter();
PrintWriter 바이트를 문자 형태로 가지는 객체로 변경해주는 클래스
getWriter() 출력 스트림 인스턴스를 제공하는 메서드

 

페이지 이동 방식

전달하는 데이터의 양이 적을 경우에는 sendRedirect("서블릿이름?data=value"))으로 전달하면 되지만

데이터의 양이 큰 경우 RequestDispatcher의 바인딩 기능을 사용한다.

 

바인딩 : 웹 프로그램 실행 시 데이터를 서블릿 관련 객체에 저장하는 방법으로 주로 HttpServletRequest, httpSession에서 사용된다. 저장된 데이터는 서블릿 또는 JSP에서 공유하여 사용한다.

- 바인딩 관련 메서드

메소드  설명 
 setAttribute(String name, Object value)   이름이 name인 속성의 값을 value로 지정한다. 
 getAttribute(String name)   이름이 name인 속성의 값을 구한다. 존재하지 않을 경우 null을 반환한다. 
이 메소드는 리턴타입이 Object 타입이므로 사용시 실제 할당된 객체 타입으로 형변환(casting)을 해야한다
 removeAttribute(String name)  이름이 name인 속성을 삭제한다. 

 

redirect
  • URL이 변경된다.
  • 요청 객체와 응답 객체가 유지되지 않는다.
  • 속도가 느리다.

- 송신

resp.sendRedirect("world?name="+ename+"&age="+age+"&address"+eaddress);
//특정 사이트로 파라미터를 넘기는 경우

- 수신

String name=req.getParameter("name");
String address=req.getParameter("address");
int age=Integer.parseInt(req.getParameter("age"));

ex) 넘겨받은 파라미터 변수 할당

pw.println("<p>"+name+"</p>"); 
pw.println("<p>"+age+"</p>");
pw.println("<p>"+address+"</p>");
forward
  • URL이 변경되지 않는다.
  • 요청 객체와 응답 객체가 유지된다.
  • 속도가 빠르다.
  • 받는 쪽에서 키와 값을 받을 수 있다.
  • 서블릿에서 다른 서블릿에 요청하는 방법

-  송신

  • setting
String name= req.getParameter("name");
int age=Integer.parseInt(req.getParameter("age"));
String address=req.getParameter("address");

human h1= new human(name,age,address);
req.setAttribute("Human1",h); //짐싸기
  • sendding
req.getRequestDispatcher("world").forward(req, resp); //이동하기

 

- 수신

Human human =(Human)req.getAttribute("Human1");

 ex) Human 객체 전달 시 값 접근 방법 

pw.println("<p> 이름은"+h.getName()+"입니다. </p>"); 
pw.println("<p> 나이는"+h.getAge()+"입니다. </p>");
pw.println("<p> 주소는"+h.getAddress()+"입니다. </p>");

 

'멀티잇 풀스택' 카테고리의 다른 글

8 week_3 Java_HashMap  (0) 2023.02.08
8 week_2 JSP  (0) 2023.02.07
7 week_3 JQuery  (0) 2023.02.02
7 week_2 XML, JSON  (0) 2023.02.01
7 week_1 JavaScript  (0) 2023.01.30
    '멀티잇 풀스택' 카테고리의 다른 글
    • 8 week_3 Java_HashMap
    • 8 week_2 JSP
    • 7 week_3 JQuery
    • 7 week_2 XML, JSON
    문준영
    문준영
    공부한 내용 정리!

    티스토리툴바