혜야의 코딩스토리

[JSP/Servlet] JSP(Java Server Pages)와 서블릿 본문

꿈 : 멋진 개발자 🧸/Java

[JSP/Servlet] JSP(Java Server Pages)와 서블릿

hyeya_ 2022. 7. 17. 19:37

✏️서블릿(Servlet) : 서버에서 실행되는 자바코드

서블릿의 호출 방식

get방식   => doGet() 실행

post방식 => doPost() 실행


web.xml을 이용한 서블릿 매핑 방법

//web.xml : 배치기술서(deploy descriptor), jsp 프로젝트의 중요 정보들이 기록됨

<servlet>
<servlet-name>서블릿의 별칭</servlet-name>
<servlet-class>서블릿 클래스 이름</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>서블릿의 별칭</servlet-name>
<url-pattern>서블릿을 호출할 url</url-pattern>
</servlet-mapping>

✏️ JSP(Java Server Pages) : server에서 실행되는 자바 웹페이지

  • 자바 기반 스크립트 언어
  • 자바의 기능을 그대로 사용 가능
  • HTTP에 대한 클라이언트의 요청 처리/응답
  • 웹 애플리케이션에서 결과 화면을 생성할 때 주로 사용
  • jsp는 내부적으로 servlet으로 변환되어 실행된다.
  • jsp의 배포 디렉토리 : 이클립스에서 작업하는 폴더(개발용 폴더)와 다르다                                                          workspace디렉토리\.metadata\.plugins\org.eclipse.wst.server.core \tmp0\work\Catalina\localhost\프로젝트\org\apache\jsp

✏️웹 컨테이너

웹 컨테이너는 마치 내용을 담을 수 있는 그릇처럼 특정 요소들을 담을 수 있는 소프트웨어 모듈로서 동적인 데이터들을 처리해 정적인 페이지로 생성해주는 역할을 한다. 

주요 웹 컨테이너: Tomcat(톰캣), WebLogic, Zeus 
톰캣과 같은 웹컨테이너는 서블릿 컨테이너라고도 부르는데, 그 이유는 톰캣을 실행하면 톰캣은 서블릿의 생성, 초기화, 서비스 실행, 소멸에 관한 모든 라이프사이클(Life Cycle)권한을 가지고 서블릿을 관리하기 때문이다.
웹 컨테이너는 웹 어플리케이션을 실행할 수 있는 컨테이너이며
Java 서블릿과 상호작용하는 WAS(Web Application Server)의 구성요소이다.
서블릿의 생명주기(Life Cycle)를 관리하며 JSP와 서블릿을 실행해 준다.

✏️jsp의 기본 문법

<!-- scriptlet(스크립틀릿)-->
<% 자바코드 영역 %> 

<!-- expression(표현식) : 웹브라우저에 출력 -->
<%=식 or 값%>
<% out.println(식 or 값); %> 

<!-- 페이지 지시어(page directive) -->
<%@ page language="java" 타입등 %>

✏️jsp page에서의 import 

<!-- 1행에 1개씩 import -->
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.Calendar" %>

<!-- 1행에 여러 개 import -->
<%@ page import="java.text.SimpleDateFormat, java.util.Calendar" %>

✏️page 모듈화

<%@ include file="불러올 페이지 주소" %> : jsp 지시어 태그
 <!-- 1개의 클래스로 컴파일 됨(변수 공유 가능) -->
 
<jsp:include page="불러올 페이지 주소" /> : jsp 액션태그
<!-- 2개의 클래스로 컴파일 됨(변수 공유 불가능 , 정적인 페이지) -->

✏️http status code(http 상태 코드)

  • 200 - success
  • 403 - 권한문제
  • 404 - 잘못된 url
  • 500 - internal server error(서버의 논리적인 오류) - 톰캣의 console확인

✏️웹 페이지의 호출 방식

post 방식

  • body를 통해 정보 전송
  • 정보가 주소창에 노출되지 않음 대용량 자료 전송 가능

 

get 방식

  • 데이터를 header에 붙여서 전송 주소창에 표시) 기본적인 방식, 보안에 취약
  • 쿼리스트링을 통해 전송 (URL?변수=값&변수=값...)

✏️페이지 이동 방식

자바스크립트
location.href = "이동할 주소";

 

JSP

1) forward : 화면 전환(주소는 고정), 대용량 데이터 전송 가능
이동할 주소에 context path(프로젝트 이름 or 웹서비스 이름) 기본으로 포함되어 있음

http://localhost/jsp01/ch01/test.jsp
http://도메인/컨텍스트패스/디렉토리/페이지이름
String page="/memo/memo_view.jsp";
RequestDispatcher rd = request.getRequestDispatcher(page); 
rd.forward(request, response);

2) redirect : 화면 전환 + 주소 변경, 소용량 데이터 전송

이동할 주소에 context path포함해야 함

String page=request.getContextPath()+"/memo.do"; 
response.sendRedirect(page);

✏️charset (java의 인코딩 방식)

  • iso-8859-1 : Java의 기본인코딩(서유럽언어)
  • ms949 or euc-kr : 한국어(다국어 지원x)
  • utf-8 : 한국어(다국어 지원) - 권장

✏️Query String 변수 사용 방법

//String type만 넘길 수 있음

보낼 때 : url?변수=값&변수=값
http://localhost/jsp01/ch01/queryStringTest.jsp?no=10&name=kim
//보낼 때 url?변수=값&변수=값
//http://localhost/jsp01/ch01/queryStringTest.jsp?no=10&name=kim

//받을 때 request.getParameter("변수")
request.getParameter("no")   // 10
request.getParameter("name") // kim