[JSP/Servlet] JSP에서 배울 내용 알아보기

DANI·2023년 11월 8일

JSP/Servlet

목록 보기
3/9
post-thumbnail

📕 앞으로 배워가게 될 것

1. 디렉티브

2. 표현 언어

3. 기본 객체

4. 표준 액션 태그

5. 커스텀 태그와 표준 태그 라이브러리(JSTL)




📝 디렉티브(Directive)

JSP 페이지에 대한 설정 정보를 지정할 때 사용
<%@ 디렉티브이름 속성1="값1" 속성2="값2" ... %>

  • page : JSP 페이지에 대한 정보를 지정. JSP가 생성하는 문서의 타입, 출력 버퍼의 크기, 에러 페이지 등 JSP페이지에서 필요로 하는 정보를 설정
  • taglib : JSP 페이지에서 사용할 태그 라이브러리 지정
  • include : JSP 페이지의 특정 영역에 다른 문서를 포함

📑 page 디렉티브

page디렉티브는 JSP페이지에 대한 정보를 입력하기 위해서 사용된다. page 디렉티브를 사용하면 JSP 페이지가 어떤 문서를 생성하는지, 어떤 자바 클래스를 사용하는지, 세션(session)에 참여하는지, 출력버퍼의 존재 여부와 같이 JSP페이지를 실행하는데 필요한 정보를 입력할 수 있다.


🔴 page 디렉티브 예시1 - PageImport.jsp

<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PageImport</title>
</head>
<body>
<%
	Calendar cal = Calendar.getInstance();
%>
오늘은
<%=cal.get(Calendar.YEAR) %>년
<%=cal.get(Calendar.MONTH) + 1 %>월
<%=cal.get(Calendar.DATE) %>일
입니다.
</body>
</html>

<%@page import="java.util.Calendar"%> : Calendar 클래스를 import한다. (java.util.*을 사용하면 해당 패키지에 속해 있는 모든 타입을 import 할 수 있다.)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

  • contentType 속성 : JSP가 생성할 문서의 MIME타입과 캐릭터 인코딩 지정
  • pageEncoding 속성 : JSP 페이지 소스 코드의 캐릭터 인코딩 지정

💻 렌더링


위 렌더링 화면에서 f12를 눌러 개발자 환경으로 들어가서 소스코드를 확인해보자


소스코드 위쪽에 살짝 공백이 있는 것을 확인할 수 있다. 이 공백을 제거하기 위해 trimDirectiveWhitespaces 속성을 이용한다.



🔴 page 디렉티브 예시2 - trimDirectiveWhitespaces

<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PageImport</title>
</head>
<body>
<%
	Calendar cal = Calendar.getInstance();
%>
오늘은
<%=cal.get(Calendar.YEAR) %>년
<%=cal.get(Calendar.MONTH) + 1 %>월
<%=cal.get(Calendar.DATE) %>일
입니다.
</body>
</html>

<%@ page trimDirectiveWhitespaces="true" %> 추가


💻 렌더링

공백이 사라진 것을 확인할 수 있다!




📝 스크립트

JSP에서 문서의 내용을 동적으로 생성하기 위해 사용되는 것

  • 표현식(Expression) : 값을 출력한다
  • 스크립트릿(Scriptlet) : 자바 코드를 실행한다.
  • 선언부(Declaration) : 자바 메서드(함수)를 만든다.

📑 스크립트릿(Scriptlet)

<%
   자바코드1;
   자바코드2;
   ...
%>

📑 표현식(Expression)

<%= 값 %>

📑 선언부(Declaration)

<%!
   public 리턴타입 메서드이름(파라미터){
      자바코드1;
      자바코드2;
      ...
      return 값;
  }
%>

🔴 스크립트 예시

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex</title>
</head>
<body>
<%!
	public int add(int a, int b){
	 return a+b;
	 }
%>

<%
	int a = 1;
	int b = 2;
%>

<%= add(a,b) %>
<%= add(10, 20) %>
</body>
</html>

💻 렌더링



📝 기본 객체

📑 request 기본 객체

웹 브라우저의 요청과 관련이 있다. 웹 브라우저에 웹 사이트의 주소를 입력하면, 웹 브라우저는 해당 웹 서버에 연결한 후 요청 정보를 전송하는데, 이 요청 정보를 제공하는 것이 바로 request 기본 객체이다.

  • 클라이언트(웹 브라우저)와 관련된 정보 읽기 기능
  • 서버와 관련된 정보 읽기 기능
  • 클라이언트가 전송한 요청 파라미터 읽기 기능
  • 클라이언트가 전송한 요청 헤더 읽기 기능
  • 클라이언트가 전송한 쿠키 읽기 기능
  • 속성 처리 기능

🔴 request 기본 객체 메서드 1

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Request</title>
</head>
<body>
<ul>
<li>클라이언트 IP : <%=request.getRemoteAddr() %></li>
<li>요청정보 길이 : <%=request.getContentLength()%></li>
<li>요청정보 인코딩: <%=request.getCharacterEncoding() %></li>
<li>요청정보 컨텐츠타입 : <%=request.getContentType() %></li>
<li>요청정보 프로토콜 : <%= request.getProtocol() %></li>
<li>요청정보 전송방식 : <%= request.getMethod() %></li>
<li>요청 URI : <%=request.getRequestURI() %></li>
<li>컨텍스트경로 : <%=request.getContextPath() %></li>
<li>서버이름 : <%=request.getServerName() %></li>
<li>서버포트 : <%=request.getServerPort() %></li>
</ul>
</body>
</html>

💻 렌더링


🔴 request 기본 객체 : 파라미터로 값 받아오기 (RequestParameterMain.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RequestParameterMain</title>
</head>

<body>
<%
	String name = "홍길동";
	int age = 20;
%>

<form action="RequestParameterResult.jsp" method="post">
이름 : <input type="text" name="name" value="<%=name %>"> <br />
나이 : <input type="number" name="age" value="<%=age %>" > <br />
취미 : 
<input type="checkbox" name="hobby" value="game"> 게임
<input type="checkbox" name="hobby" value="movie"> 영화
<input type="checkbox" name="hobby" value="travel"> 여행<br />
<button type="submit">전송</button>

</form>
</body>
</html>

🔴 request 기본 객체 2 : 파라미터로 값 받아오기 (RequestParameterResult.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RequestParameterResult</title>
</head>
<body>
<%
	
	String name = request.getParameter("name");
	int age = Integer.parseInt(request.getParameter("age"));
	String[] hobby = request.getParameterValues("hobby");
	%>
	<%=name %>님의 나이는 <%=age %>살이며 취미는 
	<% 
	for(String hobbys : hobby){
		out.print(hobbys + " "); 
	}
	%>
	입니다.
</body>
</html>

💻 렌더링


🚫 Error 발생 : 한글깨짐 오류가 발생했다!

🔑 해결 방안 : Post 방식의 표현에서 한글 깨짐

request.getParameter로 한글이 깨질 경우, 그 전에

request.setCharacterEncoding("utf-8"); 를 먼저 추가


💻 추가 후 렌더링


🔴 request 기본 객체 3 : 파라미터로 값 받아오기 (RequestParameterResult.jsp)

<%@page import="java.util.Map"%>
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RequestParameterResult</title>
</head>
<body>
<%
	
	String name = request.getParameter("name");
	int age = Integer.parseInt(request.getParameter("age"));
	String[] hobby = request.getParameterValues("hobby");
	%>
	<%=name %>님의 나이는 <%=age %>살이며 취미는 
	<% 
	for(String hobbys : hobby){
		out.print(hobbys + " "); 
	}
	%>
	입니다.
	
<hr>


<!-- 웹 브라우저가 전송한 파라미터의 이름 목록을 구한다 -->
<%
	Enumeration<String> paramEnum = request.getParameterNames();
	while(paramEnum.hasMoreElements()){
		String names =  (String) paramEnum.nextElement();%>
		<%= names %>
<%	}
%>

<hr>
<!-- 웹 브라우저가 전송한 파라미터의 맵(<파라미터 이름, 값>을 구한다 -->
<%
	Map<String, String[]> paraMap = request.getParameterMap();
	String[] paraValues = paraMap.get("hobby");
	if(paraValues!=null){
		for(int i=0; i<paraValues.length; i++){ %>
			<%=	paraValues[i]%>
<%}
}%>

</body>
</html>

💻 렌더링


📑 response 기본 객체

response 기본 객체는 request와 반대의 기능을 수행한다. request가 요청 정보를 담고 있다면 response 기본 객체는 웹브라우저에 보내는 응답 정보를 담는다.

  • 헤더 정보 입력
  • 리다이렉트하기

📝 표현 언어

<%
   int a = Integer.parseInt(request.getParameter("a"));
   int b = Integer.parseInt(request.getParameter("b"));
%>
a * b = <%= a * b %>

위 처럼 복잡한 자바 코드를 표현언어로 간단하게 나타낼 수 있다!


🔴 표현언어

a * b = ${param.a * param.b}

✅ 표현 언어는 ${}사이에 정해진 문법을 따르는 식을 입력한다.



📝 표준 액션 태그와 태그 라이브러리

액션 태그는 <jsp : 액션태그이름>의 형태를 띠며 액션 태그 종류에 따라서 서로 다른 속성과 값을 갖는다.

커스텀 태그는 JSP를 확장시켜주는 기능으로서, 액션 태그와 마찬가지로 태그 형태로 기능을 제공하며, 액션 태그와는 다르게 개발자가 직접 개발해주어야 한다.

일반적으로 중복되는 것을 모듈화하거나 스크립트 코드를 사용할 때 발생하는 소스 코드의 복잡함을 없애기 위해 커스텀 태그를 사용한다.

커스텀 태그 중에서 자주 사용하는 것들을 별도로 표준화한 태그 라이브러리가 있는데 이것이 바로 JSTL(JavaServer Pages Standard Tag Library)이다.

JSTL은 if-else 조건문, for구문과 같은 반복 처리를 커스텀 태그를 이용해서 구현할 수 있도록 해준다.







✨ 이번 챕터에서 배운 부분

✅ requst.getParameter로 받아올 때 한글깨짐 현상

📝 공부할 부분

✅ 앞으로 찬찬히 더 공부해보자!!

0개의 댓글