[구디아카데미] Servlet

최주영·2023년 5월 22일
0

Servlet

목록 보기
2/9

✅ web.xml 파일에서 서블릿을 등록

  • 주석 : ctrl + shift + 슬러시
package com.servlet.controller;

import java.io.IOException;

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

//일반 클래스를 서블릿 역할로 만들기
// HttpServlet에 정의되어 있는 메소드를 재정의
// 1) doGet() : get방식으로 요청한 내용을 처리하는 메소드
// 2) doPost() : post방식으로 요청한 내용을 처리하는 메소드
// 3. 서버에서 요청을 받을 수 있게 등록해야함 -> web.xml파일 이용, @어노테이션 이용
  // 1.) 생성한 서블릿 클래스는 서버에 등록 
  // 2.) 서블릿을 실행한 주소를 매핑(연결시켜줌)
public class BasicServletController extends HttpServlet{

	private static final long serialVersionUID = 5412475190290065154L;
	
	public BasicServletController() {}
	
	
	// doGet selvet 완성
	@Override
	public void doGet(HttpServletRequest request, // 요청클래스
			HttpServletResponse reponse)  // 받는 클래스
					throws ServletException, IOException{
		 			// 예외처리 해줘야함
		System.out.println("서블릿의 do get메소드가 실행됨");
	}
	
	// doPost selvet 완성
	@Override
	public void doPost(HttpServletRequest request, // 요청클래스
			HttpServletResponse reponse)  // 받는 클래스
					throws ServletException, IOException{
		 			// 예외처리 해줘야함
		System.out.println("서블릿의 do post메소드가 실행됨");
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>02_servletdat</display-name>

<!-- 
	생성한 서블릿 등록하기
	<servlet>태그를 이용해서 생성한 서블릿클래스를 등록함
	<servlet>태그의 자식으로
		<servlet-name> : 서버내에서의 서블릿클래스의 이름 등록
		<servlet-class> : 클래스를 등록 * 패키지명까지 모두 작성 
 -->
 
 	<servlet>
 	<!-- servlet-name은 중복되면 안됨 -->
 		<servlet-name>basicservlet</servlet-name>
	<!-- servlet-class는 자바클래스의 패키지명부터 클래스명까지 다 작성해야함 -->	
 		<servlet-class>com.servlet.controller.BasicServletController</servlet-class>
 	</servlet>


<!-- 
	등록된 서블릿을 실행할 URL 주소를 매핑
	<servlet-mapping> 태그를 이용
		자식태그로
		<servlet-name> : 연결한 서블릿 이름 (위 서블릿 등록할때 작성한 이름과 동일한것) 
		<url-pattern> : 매핑주소  * 주소 작성시에 반드시 /로 시작
 -->

	<servlet-mapping>
		<servlet-name>basicservlet</servlet-name>
		<url-pattern>/basicrequest.do</url-pattern>
	</servlet-mapping>
</web-app>

HTTP Servlet Request vs HTTP Servlet Response

Tomcat 서버는 url등 여러정보들을 받아서 분리
-> HTTP Servlet RequestHTTP Servlet Response 이렇게 두가지로 나뉨

  • HTTP Servlet Request : 요청시 전달된 데이터보관, 요청에 처리할 수 있는 내용
  • HTTP Servlet Response : 응답 처리하는 기능

즉 HTTP Servlet Request와 HTTP Servlet Response 객체에 있는 메소드들을 알아보자


✅ Data 를 보내는 2가지 방법

  • form 태그
  • querySelector 태그

HttpServletRequest 객체 관련 메소드들

✅ 클라이언트에서 보낸 데이터 불러오는 메소드

  • getParameter(String) -> String은 key값을 의미 (단일값을 가져옴)
  • getParameterNames() -> 클라이언트에서 보낸 모든 키값들을 가져올때
  • getParameterValues(String) -> client가 보내준 값이 여러 개일 경우 (복수의 값을 가져옴)-> 반환형 : 배열)
  • getParameterMap() -> client가 보내준 값이 전체를 Map방식으로 불러오는메소드

✅ 서버에서 생성한 데이터를 저장, 수정, 삭제하는 메소드
  • setAttribute(String, object) : key:value형식(value는 무엇이 들어올 지 몰라서 최상위 object로 설정되어 있음)
  • getAttribute(String) : 저장된 값을 가져옴 (키를통해서)
  • removeAttribute(String) : 저장된 값을 지울 때 사용

✅ 요청이 온 데이터에 대해 문자열이 깨지지 않게 인코딩 방식 정해주는 메소드

  • setCaracterEncoding(UTF8) : 영문자, 숫자는 상관없음(정확하게는 아스키 코드로 표현 가능한 문자는 상관없음)

✅ 내부에서 요청을 다른 곳으로 전달시킬 때

  • getRequestDispatcher(String) : request, response객체를 만들어 전송하여 forward() 메소드를 사용하여 요청

HttpServletResponse 객체 관련 메소드들

  • setContentType(String) : 내용타입(html파일)을 알려줌(MIME type)
  • setCharacterEncoding(String) : 인코딩 값을 정해줌

데이터 통신(입출력)

  • getWriter(): 문자열을 전송할 Stream 가져옴

  • getOutputStream() : byte 단위로 전송할 Stream 가져옴

  • sendRedirect(String) : 이전 데이터가 필요 없이 화면 전환 될 때 사용

redirect는 아예 url주소 변경(응답 → 새요청)

이전 요청 사용 불가능(request 사용 불가능)

대부분 화면 전환할 때는 request 사용 → 새로고침할 때마다 요청(회원 등록 페이지면 계속 등록되는 문제 발생
-> 그 문제를 보완하기 위해서 sendRedirect 메소드 사용!

이전 데이터가 필요 없이 화면 전환 될 때 sendRedirect 메소드 사용
ex ) 로그인 후, 등록(게시글, 상품 등) 화면 후, 로그아웃, 회원탈퇴 등


✅ 처음 톰캣 세팅


1. 더블클릭 시 오른쪽 화면
2. 포트 번호 수정 가능, 8080은 다른 곳에서 충돌 일어날 수 있어서 9090으로 수정

1. 45초 이내로 끝나지 않으면 타임아웃에러, 에러 뜰 경우 시간 늘리기

1. 체크해주기! 톰캣에 올렸지만 내가 쓰고있는 폴더와 맵핑되어 그 폴더에 생김
2. 저장(세팅 완료!)


✅ 서버에 전송할 데이터 가져오기

  • webapp안에 처음화면 생성 → index.html 파일 생성
  • html 태그 name값 부여 필수!(name값으로 가져오기 때문에)
  • radio나 checkbox는 value값 부여 필수!
  • 데이터값이 안넘어오면은 공란으로 들어온다
  • 체크박스나 라디오값이 안넘어오면 null값이 들어옴
  • key값 자체가 없어도 null값이 들어온다

✅ index.html (초기화면) views의 html 파일과 연결하기

  • views → html파일 생성
  • a태그 경로설정(views의 html파일과 연결)
  • 정적 페이지

    ✅ views의 html파일에서 경로 지정해주기(form태그 안에)

✅ 매핑하는 두가지 방법
1. web.xml 파일 이용하기

  • 외부파일인 경우 web.xml 파일에서 등록
  • html 파일에서 맵핑타입에 맞춰서 데이터 전송 링크 만듬
  • url-pattern과 동일한 서블릿이름의 클래스를 호출
    밑 그림은 com.servlet.controller 패키지 안의 BasicServletController 클래스를 호출함
// web.xml 파일임

<!-- 
	생성한 서블릿 등록하기
	<servlet>태그를 이용해서 생성한 서블릿 클래스를 등록함
	<servlet>태그를 이용해서 생성한 자식 클래스를 등록함
		<servlet-name> : 서버 내에서의 서블릿클래스의 이름 등록
		<servlet-class> : 클래스를 등록 * 패키지명까지 모두 작성
 -->
 	<servlet>
 		<servlet-name>basicservlet</servlet-name>
 		<servlet-class>com.servlet.controller.BasicServletController</servlet-class>
 	</servlet>
 	
 
 <!--  	등록된 서블릿을 실행할 URL 주소를 매핑
 		<servlet-mapping>태그를이용
 		자식태그로
 		<servlet-name> : 연결할 서블릿이름 
 		<url-pattern> : 매핑주소 *주소 작성시에는 반드시 /로 시작</url-pattern> -->	


 	<servlet-mapping>
 		<servlet-name>basicservlet</servlet-name>
 		<url-pattern>/basicrequest.do</url-pattern>
 	</servlet-mapping>	
    
    
// index.html 파일임
 <!-- href나 form으로 다른 페이지에게 요청보낼 때 mapping 패턴과 동일하게 /basicrequest.do로 설정 -->
	<a href="/02_servletdata/basicrequest.do">서블릿으로 기본요청처리하기</a>
	<p>
		<form action="/02_servletdata/basicrequest.do" method="post">
			<input type="submit" value="전송">
		</form>
	</p>
// BasicServletController.java 파일
package com.servlet.controller;

import java.io.IOException;

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

// 일반클래스를 서블릿역할로 만들기... -> 클라이언트의 요청을 받는 클래스
// 1. javax.servlet.http.HttpServlet 클래스를 상속받음
// 2. HttpServlet에 정의되어있는 메소드를 정의
//    1) doGet() : 클라이언트가 get방식으로 요청한 내용을 처리하는 메소드
//    2) doPost() : 클라이언트가 post방식으로 요청한 내용을 처리하는 메소드
// 3. 서버에서 요청을 받을 수 있게 등록해야함
//    1) 생성한 서블릿클래스는 서버에 등록 -> web.xml파일이용, @어노테이션 이용
//    2) 서블릿을 실행한 주소를 매핑(연결)시켜줌

public class BasicServletController extends HttpServlet {

	private static final long serialVersionUID = 5412475190290065154L;

	public BasicServletController() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public void doGet(HttpServletRequest request, 
			HttpServletResponse response) // get방식으로 보내면 이곳에서 받음
					throws ServletException, IOException {
		System.out.println("서블릿의 doGet메소드가 실행됨");
	}

	@Override
	public void doPost(HttpServletRequest request, 
			HttpServletResponse response)  // post방식으로 보내면 이곳에서 받음
					throws ServletException, IOException {
		System.out.println("서블릿의 doPost메소드가 실행됨");
	}

}
  1. @어노테이션 사용
  • 내부 파일의 경우 어노테이션으로 가능
  • html 파일에서 맵핑타입에 맞춰서 데이터 전송 링크 만듬
  • 뒤에 해당 경로를 복사해서 새로운 Servlet 생성 후 맵핑 타입에 넣음
  1. html 파일에서 뒤 주소를 복사함!
  2. 원하는 부분 프로젝트 우클릭 후 -> 서블릿 생성한 후 -> 클래스이름은 알아볼수있도록 마음대로 정한다
  3. 해당 순서에 맞춰서 finish 누르면, 서블릿이 등록된 새로운 클래스가 만들어진다!

✅ TML 파일에서 서버 자동 실행하기

  • 서버를 자동으로 올리면서 페이지를 로딩시킨다.


HTML 파일에서 -> 컨트롤 + f11 → 서버선택 → Finish


✅ 서블릿 파일 생성하기 [자동으로 mapping과 오버라이딩 됨]

  1. 컨트롤러와 연결하기
  • 해당 html 파일안의 form태그안의 /input.do 주소를 기억한다
  1. controller 패키지 우클릭 후 -> Servlet 파일을 생성한다.
  2. 클래스 이름이 마음대로 정한 후, URL mapping 부분 더블클릭 후 복사한 주소로 바꿔준다
    ! 반드시 매핑주소 앞에 /가 있어야함
    -> 위 과정까지 다하면 controller 패키지 안에 새로운 자바파일이 생성된 것을 볼 수 있다
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글