no image
[JSP] 쿠키(Cookie)
쿠키 쿠키는 사이트에 접속할 때 생성되는 정보를 담은 4KB 이하 크기의 임시 파일을 의미 네트워크 환경에서 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하기 위해 사용 세션과 다른 점은 로그인 상태 정보를 사용자 컴퓨터인 클라이언트에 저장된다는 부분(세션은 웹 서버에 저장) 쿠키는 불순한 의도로 복사되거나 해킹 등에 의해 개인 정보가 탈취될 수 있다는 보안상 취약한 단점 존재 쿠키에 의한 웹 브라우저 구분 쿠키는 클라이언트의 정보를 웹 브라우저에 저장하기 때문에 이후 웹 서버로 서비스를 요청할 경우 쿠키를 읽어 새로운 웹 브라우저인지 아니면 이전에 요청했던 웹 브라우저인지를 구별함 쿠키가 생성되면 웹 브라우저는 쿠키가 삭제되기 전까지 쿠키의 요청이 있을 때마다 웹 서버에게 쿠키를 제공 쿠키와 세션 ..
2023.11.24
no image
[JSP] 내장 객체
내장 객체란 JSP 페이지에서 사용할 수 있도록 JSP 컨테이너에 미리 정의된 객체 JSP 페이지가 서블릿 프로그램으로 번역될 때 JSP 컨테이너가 자동으로 내장 객체를 멤버 변수, 메소드 매개변수 등의 각종 참조 변수(객체)로 포함 JSP 페이지에 별도의 import문 없이 자유롭게 사용 가능 스크립틀릿 태그나 표현문 태그에 선언을 하거나 객체를 생성하지 않고도 직접 호출하여 사용 가능 내장 객체의 종류 내장 객체의 속성관리 JSP는 HTTP 프로토콜의 사용하는 웹 환경에서 구동되는 프로그램 HTTP는 비연결형으로 사용자가 서버에 특정 페이지를 요청하고 요청결과를 응답받으면 서버와의 연결이 끊기는 형태 예를 들어 게시판에 글을 작성하는 페이지에서 작성한 내용은 다른 jsp에서 처리해야 하고 서버는 방금..
2023.11.24
no image
[JSP] 스크립트 태그(Script Tag)
스크립트 태그 종류 스크립트 태그는 JSP 웹 페이지를 어떻게 처리할 것인지에 대한 페이지의 정보를 설정하여 웹 컨테이너인 아파치 톰캣에게 보낼 때 선언한다. 스크립트 태그의 종류는 아래와 같다. 디렉티브(지시문) 태그의 종류 디렉티브란 JSP 웹페이지에 대한 파일의 속성을 기술하는 지시문으로 JSP 컨테이너에 해당 웹페이지를 어떻게 처리해야 할 것인지를 전달하는 명령문을 의미한다. 디렉티브의 선언 위치는 일반적으로 JSP 웹페이지의 가장 상단에 선언한다. include 디렉티브 태그의 사용법 디렉티브 태그의 속성 종류
2023.11.24
no image
[JSP] JSP를 배우기전 알아야 할 개념 (MVC, 빈, 서블릿, 기본 처리 과정)
용어 정리 View, Model, Controller 용어 내용 View 사용자에게 보여줄 UI 또는 사용자가 보게될 화면 Model 백그라운드에서 동작하는 로직 처리(알고리즘, DB와 상호작용, 데이터 처리 등) Controller 사용자의 입력처리와 흐름 제어(사용자 요청화면 처리, 화면 로직처리 부분) 위 세 가지의 용어를 줄어서 MVC라고 한다. 프레젠테이션 로직, 비즈니스 로직 프레젠테이션 로직 : 사용자 인터페이스와 관련된 작업을 처리하는 부분을 의미 프레젠테이션 로직은 사용자가 애플리케이션과 상호 작용할 때 발생하는 이벤트를 처리하고, 화면에 데이터를 표시하고, 사용자 입력을 유효성 검사하며, 사용자에게 응답을 제공하는 역할을 한다. 비즈니스 로직 : 실제로 수행되는 작업이나 연산을 정의하는..
2023.10.15

쿠키

  • 쿠키는 사이트에 접속할 때 생성되는 정보를 담은 4KB 이하 크기의 임시 파일을 의미
  • 네트워크 환경에서 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하기 위해 사용
  • 세션과 다른 점은 로그인 상태 정보를 사용자 컴퓨터인 클라이언트에 저장된다는 부분(세션은 웹 서버에 저장)
  • 쿠키는 불순한 의도로 복사되거나 해킹 등에 의해 개인 정보가 탈취될 수 있다는 보안상 취약한 단점 존재

 

쿠키에 의한 웹 브라우저 구분

  • 쿠키는 클라이언트의 정보를 웹 브라우저에 저장하기 때문에 이후 웹 서버로 서비스를 요청할 경우
  • 쿠키를 읽어 새로운 웹 브라우저인지 아니면 이전에 요청했던 웹 브라우저인지를 구별함
  • 쿠키가 생성되면 웹 브라우저는 쿠키가 삭제되기 전까지 쿠키의 요청이 있을 때마다 웹 서버에게 쿠키를 제공

 

쿠키와 세션

  • 웹 브라우저에서 서버로 접속할 때 쿠키 대신 세션을 사용하는 이유는 쿠키에 비해 세션이 보안에 강하기 때문임
  • 쿠키와 세션의 가장 큰 차이점은 웹 브라우저를 통해 서비스를 요청할 때 사용자의 정보가 저장되는 위치
  • 쿠키는 서버의 자원을 전혀 사용하지 않지만 세션은 서버의 자원을 사용함
  • 웹 서비스에 대한 요청 속도는 세션보다 쿠키가 더 빠르므로 쿠키와 세션의 선택은 주어진 개발 환경에 맞춰 사용하면 됨

 

 

Cookie 클래스

  • 쿠키는 연결 상태가 없는 HTTP 프로토콜을 위해 접속된 상태를 그대로 유지할 때 필요
  • 쿠키는 웹 브라우저에 상태 정보를 저장하기 때문에 이후 웹 서버로 전송되는
    서비스 요청에는 쿠키가 가지고 있는 정보도 함께 포함되어 전송
  • Cookie 클래스는 쿠키 생성 및 관련 정보 등을 설정하기 위해 다양한 쿠키 관련 메소드를 제공

 

쿠키 생성 메소드

  • 쿠키를 생성하려면 Cookie 클래스의 Cookie( ) 메소드를 사용, 쿠키 생성 후
    쿠키를 설정할 때 반드시 response 내장 객체의 addCookie( ) 메소드를 사용
  • Cookie( ) 메소드 : 쿠키 생성(“쿠키이름”, “쿠키값”)
  • addCookie( ) 메소드 : 쿠키 설정(변수명)

 

 

쿠키 정보 메소드

  • getCookie( ) 메소드 : 쿠키 객체 가져오기
  • Cookie[ ] 변수명 : 여러 개의 쿠키 객체 가져오기

  • getName( ) 메소드 : 쿠키 이름 가져오기
  • getValue( ) 메소드 : 쿠키값 가져오기

 

 

쿠키 삭제

  • Cookie 클래스에서는 쿠키를 삭제하기 위한 별도의 기능을 제공하지 않기 때문에 쿠키를 삭제하려면 setMaxAge( ) 메소드를 사용하여 괄호 안에 정수의 값 0을 매개변수로 입력하여 유효시간이 만료됨에 따라 쿠키는 자동으로 삭제되도록 선언해야 함
  • 쿠키의 유효시간은 ‘초’ 단위이며 1시간을 설정하려면 setMaxAge(60 * 60)으로 선언
  • 쿠키의 이름이 userID이고 쿠키의 값이 u_id인 경우 setMaxAge( ) 메소드를
    사용하여 쿠키를 삭제하려면 다음과 같이 선언

 

예제

CookieLoginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
<%
	Cookie[] cookies = request.getCookies(); //쿠키들을 저장할 배열, 쿠키 가져오기
	String id = ""; //쿠키 값이 있다면 저장할 아이디 변수
	if(cookies != null) //쿠키가 없지 않다면
	{
		for(int i = 0; i < cookies.length; ++i)
		{
			if(cookies[i].getName().equals("id")) //쿠키의 이름이 id와 같다면
			{
				id = cookies[i].getValue(); //아이디 변수에 해당 쿠키의 키와 대응하는 값을 저장
				break;
			}
		}	
	}
%>
<center>
	<h2> 쿠키 로그인 </h2>
	<form action = "CookieLoginProc.jsp" method = "post">
		<table width = "400" border = "1">
			<tr height = "50">
				<td width="150" align="center"> 아이디 </td>
				<td width="250"> <input type = "text" name = "id" value="<%= id %>"></td>
			</tr>
			<tr height = "50">
				<td width="150" align="center"> 패스워드 </td>
				<td width="250"> <input type = "password" name = "pass"></td>
			</tr>
			<tr height = "50">
				<td align="center" colspan = "2"><input type="checkbox" name = "save" value="1"> 아이디 저장 </td>
			</tr>
			<tr height = "50">
				<td align="center" colspan = "2"><input type="submit" value = "로그인"></td>
			</tr>
		</table>
	</form>
</center>
</body>
</html>

 

CookieLoginProc.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
<%
	request.setCharacterEncoding("UTF-8");
	String save = request.getParameter("save"); //아이디 체크박스의 값을 불러옴
	String id = request.getParameter("id");
	
	if(save != null) // 아이디 체크 박스의 값이 null이 아니라면 쿠키 생성
	{
		Cookie cookie = new Cookie("id", id); //쿠키 생성, 생성자는 해시테이블과 같은 방식으로 key-value형식
		cookie.setMaxAge(60 * 10); //쿠키 유효시간 설정 -> 10분
		response.addCookie(cookie); //클라이언트 PC에 쿠키 값을 저장
		out.print("쿠키 생성 완료");
	}
%>
</body>
</html>

 

[JSP] 내장 객체

ReBugs
|2023. 11. 24. 03:08

내장 객체란

  • JSP 페이지에서 사용할 수 있도록 JSP 컨테이너에 미리 정의된 객체
  • JSP 페이지가 서블릿 프로그램으로 번역될 때 JSP 컨테이너가 자동으로 내장 객체를 멤버 변수, 메소드 매개변수 등의 각종 참조 변수(객체)로 포함
  • JSP 페이지에 별도의 import문 없이 자유롭게 사용 가능
  • 스크립틀릿 태그나 표현문 태그에 선언을 하거나 객체를 생성하지 않고도 직접 호출하여 사용 가능

 

내장 객체의 종류

 

내장 객체의 속성관리

  • JSP는 HTTP 프로토콜의 사용하는 웹 환경에서 구동되는 프로그램
  • HTTP는 비연결형으로 사용자가 서버에 특정 페이지를 요청하고 요청결과를 응답받으면 서버와의 연결이 끊기는 형태
    예를 들어 게시판에 글을 작성하는 페이지에서 작성한 내용은 다른 jsp에서 처리해야 하고 서버는 방금 글을 작성한 사람이 누구인지 모를 수 있음
  • JSP 에서  page, request, session, application 내장객체를 통해 서로 다른 페이지에서 처리된 값을 저장하고 공유하기 위한 방법을 제공
  • 이는 컨테이너 기반 프로그램의 특징 중 하나로 실제 프로그램 구현 시 매우 중요한 기법

https://javappo.tistory.com/215

  1. application은 모든 사용자가 공유하는 데이터를 저장할 수 있으며 톰캣이 종료될 때 까지 데이터를 유지할 수 있다(맨 위의 user1, user2 해당). 
  2. session의 경우 사용자마다 분리된 저장 영역이 있으며 Page1, Page2, Page3 모두에서 공유되는 정보를 관리할 수 있다. 물론 이 데이터는 각자 공유 영역에서 관리되며 사용자 간에는 공유되지 않는다. 
  3. 페이지 흐름이 Page1, Page2, Page3순으로 진행된다고 할 때, 한 페이지에서 다른 페이지로 데이터를 전달하려면 request 내장객체를 이용해야 한다.(맨 아래의 user1에 해당한다). page 마다 생성됨.

  • request, session, application 은 각각 생성 시점과 소멸시점이 다르며 이를 잘 이해하고 적절한 내장객체를 이용해야 한다.
  • 각각의 내장객체는 모두 getAttribute(), setAttribute() 메서드를 통해 속성을 저장하거나 가져올 수 있다.

reference : https://javappo.tistory.com/215

 

속성 처리 메소드의 종류

request, session, application

 

 

request

  • JSP 페이지에서 가장 많이 사용되는 기본 내장 객체
  • 웹 브라우저에서 서버의 JSP 페이지로 전달하는 정보를 저장
  • 폼 페이지로부터 입력된 데이터를 전달하는 요청 파라미터 값을 JSP 페이지로 가져 옴

 

예제

더보기

Requestjoin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<center>
		<h2>회원 가입</h2>
		<form action="RequestJoinProc.jsp">
			<table width="500" border="1">
				<tr height="50">
					<td width="150" align="center">아이디 </td>
					<td width="350" align="center">
						<input type="text" name="id" size="40" placeholder="id를 넣으세요">						
					</td>
				</tr>
		
				<tr height="50">
					<td width="150" align="center">패스워드</td>
					<td width="350" align="center">
						<input type="password" name="pass1" size="40"
						placeholder="비밀번호는 숫자와 영어만 넣어주세요">						
					</td>
				</tr>
				
				<tr height="50">
					<td width="150" align="center">패스워드 확인</td>
					<td width="350" align="center">
						<input type="password" name="pass2" size="40">						
					</td>
				</tr>
				
				<tr height="50">
					<td width="150" align="center">이메일</td>
					<td width="350" align="center">
						<input type="email" name="email" size="40">						
					</td>
				</tr>
				
				<tr height="50">
					<td width="150" align="center">전화 번호 </td>
					<td width="350" align="center">
						<input type="tel" name="tel" size="40">				
					</td>
				</tr>
				
				<tr height="50">
					<td width="150" align="center">당신의 관심 분야</td>
					<td width="350" align="center">
						<input type="checkbox" name="hobby" value="캠핑">캠핑&nbsp;
						<input type="checkbox" name="hobby" value="등산">등산&nbsp;
						<input type="checkbox" name="hobby" value="독서">독서&nbsp;
						<input type="checkbox" name="hobby" value="음악">음악&nbsp;				
					</td>
				</tr>
				
			   <tr height="50">
					<td width="150" align="center">당신의 직업은</td>
					<td width="350" align="center">
						<select name="job">
						<option value="교사">교사</option>
						<option value="의사">의사</option>
						<option value="변호사">변호사</option>
						<option value="기술사">기술사</option>
						</select>				
					</td>
				</tr>
				
				<tr height="50">
					<td width="150" align="center">당신의 연령은</td>
					<td width="350" align="center">
						<input type="radio" name="age" value="10">10대&nbsp;
						<input type="radio" name="age" value="20">20대&nbsp;
						<input type="radio" name="age" value="30">30대&nbsp;
						<input type="radio" name="age" value="40">40대&nbsp;			
					</td>
				</tr>
				
				<tr height="50">
					<td width="150" align="center">하고 싶은말</td>
					<td width="350" align="center">
							<textarea rows="5" cols="40" name="info"></textarea>	
					</td>
				</tr>
					
				<tr height="50">
					<td width="150" colspan="2">
						<input type="submit" value="회원 가입">	
						<input type="reset" value="취소">			
					</td>
				</tr>	
			</table>
		</form>	
	</center>
</body>
</html>

 

RequestjoinProc.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>	
<center>
<h2>회원 정보 보기</h2>

<% 
	//post방식으로 데이터가 넘어올때 한글이 깨질수 있기에 
    request.setCharacterEncoding("UTF-8");
	//각종 사용자로 부터 넘어온 데이터를 저장해줌
	String id    = request.getParameter("id");
	String pass1 = request.getParameter("pass1");
	String pass2 = request.getParameter("pass2");
	String email = request.getParameter("email");
	String  tel  = request.getParameter("tel");
	
	//[]열 타입으로 리턴 
	String [] hobby = request.getParameterValues("hobby");
	
	String job = request.getParameter("job");
	String age = request.getParameter("age");
	String info = request.getParameter("info");

	if(!pass1.equals(pass2)){
%>
	<script type="text/javascript">
		alert("비밀 번호가 틀립니다");
		history.go(-1);
	</script>	
<% 
	}
%>
	
<table width="400" border="1">
			<form action="RequestJoinProc.jsp">
			<table width="500" border="1">
				<tr height="50">
					<td width="150" align="center">아이디 </td>
					<td width="350" align="center"><%= id%>					
					</td>
				</tr>
				
				
				<tr height="50">
					<td width="150" align="center">이메일</td>
					<td width="350" align="center"><%= email%>						
					</td>
				</tr>
				
				<tr height="50">
					<td width="150" align="center">전화 번호 </td>
					<td width="350" align="center"><%= tel%>				
					</td>
				</tr>
				
				<tr height="50">
					<td width="150" align="center">당신의 관심분야</td>			
					<td width="350" align="center">
					<% 
					for(int i = 0;i<hobby.length;i++){
						out.write(hobby[i] +" ");
					}
					%>			
					</td>
				</tr>
				
				<tr height="50">
					<td width="150" align="center">직업은 </td>
					<td width="350" align="center"><%= job%>				
					</td>
				</tr>
				
				<tr height="50">
					<td width="150" align="center">전연령은</td>
					<td width="350" align="center"><%= age%>				
					</td>
				</tr>
				
				<tr height="50">
					<td width="150" align="center">하고 싶은말</td>
					<td width="350" align="center"><%= info%>				
					</td>
				</tr>

</table>
	
	
</center>
	
	
</body>
</html>

 

 

 

 

response

  • 페이지 이동 = 리다이렉션(redirection)
  • 사용자가 새로운 페이지를 요청할 때와 같이 페이지를 강제로 이동하는 것
  • 서버는 웹 브라우저에 다른 페이지로 강제 이동하도록 response 재장 객체의 리다이렉션 메소드를 제공
  • 페이지 이동 시에는 문자 인코딩을 알맞게 설정해야 함
response.sendRedirect("ResponseMain.jsp"); //해당 JSP 페이지로 이동
response.sendRedirect("ResponseMain.jsp?id="+id); //해당 JSP로 id라는 파라미터를 get방식으로 전송

 

응답 형식 지정 메소드

  • 컨텐츠 타입이나 문자셋에 대한 정보를 지정할 때 사용하는 메소드의 종류는 다음 표를 참조

 

응답 헤더 메소드

  • 헤더 정보나 쿠키 등에 대한 정보를 지정할 때 사용하는 메소드의 종류는 다음 표를 참조

 

페이지 이동 메소드

  • 웹 브라우저에서 지정한 특정 페이지로 이동할 때 사용하는 메소드의 종류는 다음 표를 참조

 

예제

더보기

ResponseSendredirect.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>

<center>
	<h2>로그인 페이지 </h2>
		<form action= "ResponseLoginProc.jsp" method="post">
		<table width="400" border="1">
			<tr height = "60">
				<td align="center" width ="150">아이디</td>
				<td align="left" width= "250">
					<input type="text" name="id">
				</td>
			</tr>
			
			<tr height ="60">
				<td align = "center" width="150">패스워드</td>
				<td align = "left" width="250">
					<input type ="password" name="pass">
				</td>
			</tr>
			
			<tr height ="60">
				<td colspan = "2" align = "center">
					<input type ="submit" value="전송">
				</td>
			</tr>
		</table>
		</form>
	</center>
</body>
</html>

 

ResponseLoginProc.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h2>로그인 처리 페이지</h2>

<% 
	 request.setCharacterEncoding("EUC-KR");
	
	//임의적으로 id 와 pass를 설정 
	String dbid = "aaaa";
	String dbpass= "1234";
	
	//사용자로부터 넘어온 데이터를 입력받아줌 
	String id = request.getParameter("id");
	String pass = request.getParameter("pass");
	
	if(dbid.equals(id) && dbpass.equals(pass)){
		//아이디와 패스워드가 일치하니깐 메인 페이지를 보여주어야 합니다.
		response.sendRedirect("ResponseMain.jsp?id="+id);
	}else{
%>
	<script>
		alert("아이디와 패스워드가 일치 하지 않습니다");
		history.go(-1);
	</script>		
<% 		
	}
%>

</body>
</html>

 

ResponseMain.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<% 
		request.setCharacterEncoding("EUC-KR");
	%>
	
	<h2><%= request.getParameter("id")%> 님 반갑습니다</h2>
</body>
</html>

 

 

 

 

out

  • 웹 브라우저에 데이터를 전송하는 출력 스트림 객체
  • JSP 컨테이너는 JSP 페이지에 사용되는 모든 표현문 태그와 HTML, 일반텍스트 등을 out 내장 객체를 통해 웹 브라우저에 그대로 전달
  • 스크립틀릿 태그에 사용하여 단순히 값을 출려가는 표현문 태그(<%= ...%>)와 같은 결과를 얻을 수 있음

 

예제

스크립트 태그 종류

스크립트 태그는 JSP 웹 페이지를 어떻게 처리할 것인지에 대한 페이지의 정보를 설정하여 웹 컨테이너인 아파치 톰캣에게 보낼 때 선언한다.

 

스크립트 태그의 종류는 아래와 같다.

 

디렉티브(지시문) 태그의 종류

디렉티브란 JSP 웹페이지에 대한 파일의 속성을 기술하는 지시문으로 JSP 컨테이너에 해당 웹페이지를 어떻게 처리해야 할 것인지를 전달하는 명령문을 의미한다.

디렉티브의 선언 위치는 일반적으로 JSP 웹페이지의 가장 상단에 선언한다.

 

include 디렉티브 태그의 사용법

<%@ include file="포함될 파일의 url" %>

 

디렉티브 태그의 속성 종류

용어 정리

View, Model, Controller

용어 내용
View 사용자에게 보여줄 UI 또는 사용자가 보게될 화면
Model 백그라운드에서 동작하는 로직 처리(알고리즘, DB와 상호작용, 데이터 처리 등)
Controller 사용자의 입력처리와 흐름 제어(사용자 요청화면 처리, 화면 로직처리 부분)

위 세 가지의 용어를 줄어서 MVC라고 한다.

 

프레젠테이션 로직, 비즈니스 로직

  • 프레젠테이션 로직 : 사용자 인터페이스와 관련된 작업을 처리하는 부분을 의미
    프레젠테이션 로직은 사용자가 애플리케이션과 상호 작용할 때 발생하는 이벤트를 처리하고, 화면에 데이터를 표시하고, 사용자 입력을 유효성 검사하며, 사용자에게 응답을 제공하는 역할을 한다.
  • 비즈니스 로직 : 실제로 수행되는 작업이나 연산을 정의하는 부분을 의미
    이는 애플리케이션의 핵심 기능과 규칙을 결정하며, 데이터 처리, 데이터 검증, 계산, 규칙 적용 등을 포함한다. 비즈니스 로직은 주로 사용자 요구사항을 충족시키기 위해 애플리케이션이 수행하는 실질적인 작업들을 정의한다.

 

자바 빈 클래스와 서블릿 클래스

Bean

  • 데이터 구조를 정의한 클래스
  • 데이터들을 private으로 선언하고 getter와 setter 메소드를 생성해놓은 형태의 자바 표준 데이터 구조를 뜻한다.
public class Person {
	private String name;
	private String number;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getNumber() {
		return number;
	}
	public void setNumber(String number) {
		this.number = number;
	}
}

 

Servlet

  • 서블릿은 서블릿 클래스로부터 만들어진 객체를 의미
    모든 서블릿 객체를 서블릿이라고 하지 않음
    웹 서버가 서블릿 클래스를 가지고 서블릿 객체를 만들고 그 객체를 초기화해서 웹 서비스를 할 수 있는 상태로 만드는 작업을 거친 것을 서블릿이라고 한다.
  • 클라이언트의 요청을 받아 처리하고 그 결과 값을 출력하여 웹 페이지를 생성하기 위한 자바 코드
  • JSP와 동일한 기능을 수행한다.
  • JSP는 HTML 문서에 자바 코드를 삽입한 파일이라고 한다면, 서블릿은 자바의 HttpServlet 클래스를 상속받은 자바 코드를 삽입한 파일이다.
  • 자바 코드와 다른 점은 main() 메서드를 쓰는 대신 service(), doGet(), doPost() 메서드를 HttpServlet 객체에서 오버라이드한다는 것이다
Servlet JSP
자바 코드 안에 HTML 포함 HTML 문서 안에 Java코드 포함
package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class exercise1_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports {

  //중간 생략......
  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
    //중간 생략...

      out.write("\r\n"); //html 코드
      out.write("<!DOCTYPE html>\r\n"); //html 코드
      out.write("<html>\r\n"); //html 코드
      out.write("<body>\r\n"); //html 코드

for(int i = 2; i < 10; ++i)
{
	for(int j = 1; j < 10; ++j)
	{
		
      out.write("\r\n");
      out.write("		");
      out.print(i );
      out.write(' ');
      out.write('*');
      out.write(' ');
      out.print(j );
      out.write(' ');
      out.write('=');
      out.write(' ');
      out.print( i * j );
      out.write("<br>\r\n");
      out.write("		");

	}
}

      out.write("\r\n");
      out.write("</body>\r\n");
      out.write("</html>");

 

MVC 패턴

  • MVC 패턴은 Model1 방식과 Model2 방식이 있다.

Model 1

  • JSP(Controller + View)와 Java Bean(Model)로 구성하여 개발하는 형태
  • Model 1 구조는 사용자의 요청과 응답(Controller + View)을 JSP가 모두 처리한다.
  • DB 접근은 자바 빈 클래스로만 하도록 한 형태이다. 
  • 장점 : 쉽고, 개발 속도가 빠르다.
  • 단점 : 유지보수가 어렵고 가독성이 좋지 않다., 프레젠테이션 로직과 비즈니스 로직이 혼합되어 혼잡하다.
  • 간단한 개발이나 유지보수가 필요없는 개발에 좋다.

 

Model 2

  • Model, View, Controller의 세 가지 요소로 모듈화하여 개발하는 형태
  • Controller(servlet)을 통해 View(JSP)와 비즈니스 로직이 분리된 형태이다.
  • 즉, Controller(servlet)는 서블릿 클래스를 이용하여 비즈니스 로직을 처리하고,
    View(JSP)는 프레젠테이션 로직을 처리하고, DB접근 등은 Java Bean클래스를 이용하여 처리한다.
  • 더욱 간단히 말하면, JSP에서는 UI를 처리(HTML, CSS등)하고, 서블릿에서는 자바 코드로만 비즈니스 로직을 처리한다. DB에 접근할 때는 Bean을 이용.
  • 장점 : 유지보수 및 확장이 좋고, 개발자와 디자이너 분업을 하기에 좋다.
  • 단점 : 개발자들이 구조에 대한 이해가 필요함에 따라 구조 설계를 위해 개발 기간이 증가한다.

 

JSP 처리 과정

출처 :&nbsp;https://medium.com/@jw02048/jsp%EA%B0%80-%EC%B2%98%EB%A6%AC%EB%90%98%EB%8A%94-%EA%B3%BC%EC%A0%95-d97703f73487

  1. 사용자의 웹 브라우저에서 test.jsp으로 해당 페이지를 요청을 한다.
  2. 사용자의 요청을 받은 웹 서버는 해당 페이지를 처리하기 위해서 JSP 컨테이너(JSP 또는 서블릿)에 처리를 넘긴다.
  3. 해당 JSP파일이 처음 요청이 된 것이라면 해당 jsp파일을 servlet으로 변환
  4. servlet(java)파일을 클래스 파일로 컴파일이 되는 과정
  5. servlet파일을 컴파일을 한다.
  6. 웹 서버는 웹 브라우저가 인식할 수 있는 HTML형태로 응답을 한다.

'Java Category > JSP' 카테고리의 다른 글

[JSP] 액션 태그(Action tag)  (1) 2023.11.27
[JSP] 세션(Session)  (1) 2023.11.25
[JSP] 쿠키(Cookie)  (2) 2023.11.24
[JSP] 내장 객체  (2) 2023.11.24
[JSP] 스크립트 태그(Script Tag)  (1) 2023.11.24