쌍용교육센터 - 47일

개발자가 되고 싶어요 ㅣ 2024. 4. 24. 18:15

2024.04.24

jsp:forward

forwardA.jsp

<jsp:forward page="forwardB.jsp">
	<jsp:param value="오렌지" name="color"/>
</jsp:forward>

forwardA.jsp를 실행하면 forwardB.jsp가 뷰에 보여지고 jsp:param을 통해 파라미터와 값을 보낼 수 도 있다.

 

forward 와 redirect 의 특징 비교

메서드 특징
forward
<jsp:forward/>
같은 웹서버, 같은 웹 애플리케이션 디렉토리에 속하는 웹 자원만 호출 가능
request 내장 객체를 통해 데이터를 전달
redirect
response.sendRedirect()
다른 웹 서버에 있는 웹 자원도 호출할 수 있음
호출할 JSP페이지의 URL 뒤에 데이터를 붙여서 전달

 

에러 페이지 지정

web.xml

<!-- 응답 상태 코드별 에러 페이지 지정 -->
  <error-page>
    <error-code>404</error-code>
    <location>/ch06_errorPage/error/error404.jsp</location>
  </error-page>
  <error-page>
  	<error-code>500</error-code>
  	<location>/ch06_errorPage/error/error500.jsp</location>
  </error-page>

error-code와 location으로 각 오류 별 응답페이지를 지정해줄 수 있다.

 

에러 페이지 생성

<%-- isErrorPage = "true" 는 현재 페이지가 에러가 발생했을 때 동작하는 페이지라고 설정 --%>
<%@ page isErrorPage="true" %>

 

에러 타입별 에러 페이지 지정

<!-- 에러 타입별 에러 페이지 지정-->
  <error-page>
  	<exception-type>java.lang.NullPointerException</exception-type>
  	<location>/ch06_errorPage/error/errorNullPointer.jsp</location>
  </error-page>

 

에러 페이지 우선 순위

  1. page 디렉티브의 errorPage 속성에서 지정한 에러 페이지를 보여준다.
  2. JSP 페이지에서 발생한 예외 타입이 web.xml 파일의 <exception-type>에서 지정한 예외 타입과 동일한 경우 지정한 에러 페이지를 보여준다.
  3. JSP 페이지에서 발생한 에러 코드가 web.xml 파일의 <error-code>에서 지정한 에러 코드와 동일한 경우 지정한 에러 페이지를 보여준다.
  4. 아무것도 해당되지 않을 경우 웹 컨테이너가 제공하는 기본 에러 페이지를 보여준다.

 

 

쿠키

’쿠키(cookie)’는 웹 브라우저가 보관하고 있는 데이터로서 웹 서버에 요청을 보낼 때 함께 전송

 

구성 요소

  • 이름 - 각각의 쿠키를 구별하는 데 사용되는 이름
  • 값 - 쿠키의 이름과 관련된 값
  • 유효시간 - 쿠키의 유지 시간
  • 도메인 - 쿠키를 전송할 도메인
  • 경로 - 쿠키를 전송할 요청 경로

 

쿠키 생성 및 유효시간 지정

<%@ page import="java.net.URLEncoder" %>
<%
	Cookie cookie = new Cookie("name", URLEncoder.encode("홍길동","utf-8"));
	
	//쿠키 유효시간 지정(단위:초)
	//쿠키 유효시간을 지정하면 클라이언트 영역의 저장소에 쿠키 정보를 보관
	//쿠키 유효시간을 미지정시 메모리에 쿠키 정보를 보관
	//cookie.setMaxAge(30*60); //30*60초 -> 30분
	//cookie.setMaxAge(-1); //메모리에 쿠키 정보를 보관
	
	//생성한 쿠키를 클라이언트에 전송
	response.addCookie(cookie);
%>

 

쿠키 목록 확인

<body>
<h1>쿠키 목록</h1>
<%
	//클라이언트로부터 전송된 쿠키 정보 반환
	Cookie[] cookies = request.getCookies();
	if(cookies!=null && cookies.length>0){
		for(int i=0; i<cookies.length;i++){
%>
	<%= cookies[i].getName() %> =
	<%= URLDecoder.decode(cookies[i].getValue(),"UTF-8") %>
	<br>
	
<%
		}
	} else{
%>
쿠키가 존재하지 않습니다.
<%
	}
%>
</body>

 

 

쿠키 변경

<body>
<%
	//클라이언트로부터 전송된 키 정보를 반환
	Cookie[] cookies = request.getCookies();
	if(cookies!=null && cookies.length>0){
		for(int i=0; i<cookies.length; i++){
			if(cookies[i].getName().equals("name")){
				//검색하는 쿠키의 쿠키명과 동일한 이름의 쿠키 생성
				Cookie cookie = new Cookie("name",URLEncoder.encode("JSP프로그래밍","UTF-8"));
				
				//생성된 쿠키를 클라이언트에 전송
				response.addCookie(cookie);
				
				out.println("name 쿠키의 값을 변경합니다.");
			}
		}
	} else {
		out.println("쿠키가 존재하지 않습니다.");
	}
%>
</body>

 

쿠키 삭제

<body>
<%
	//클라이언트로부터 전송된 쿠키 정보를 반환
	Cookie[] cookies = request.getCookies();
	if(cookies!=null && cookies.length>0){
		for(int i=0; i<cookies.length; i++){
			//name 이라는 쿠키명을 사용하는 쿠키가 존재하는지 검색
			if(cookies[i].getName().equals("name")){
				//name 쿠키명으로 쿠키 생성
				Cookie cookie = new Cookie("name","");
				cookie.setMaxAge(0);//0이면 쿠키가 바로 삭제 됨
				
				//생성된 쿠키를 클라이언트에 전송
				response.addCookie(cookie);
				
				out.println("name 쿠키를 삭제합니다.");
			}
		} 
	} else {
		out.println("쿠키가 존재하지 않습니다.");
	}
%>
</body>

 

세션

  • 웹 컨테이너에서 클라이언트의 정보를 보관할 때 사용한다.
  • 오직 서버에서만 생성된다.
  • 클라이언트마다 세션이 생성된다.

 

세션 정보

<body>
세션 ID : <%= session.getId() %> <br>
세션 생성 시간 : <%= session.getCreationTime() %> <br>
<%
	time.setTime(session.getCreationTime());
%>
최근 생성 시간 : <%= sf.format(time) %><br>
최근 접근 시간 : <%= session.getLastAccessedTime() %><br>
<%
	time.setTime(session.getLastAccessedTime());
%>
최근 접근 시간 : <%= sf.format(time) %><br>
세션 유지 시간 변경하기(기본 세션 유지 시간은 30분임)<br>
<%
	session.setMaxInactiveInterval(60*20);
	//web.xml에 50분으로 지정된 상태임(JSP에서 셋팅한 정보가)
	//현재 세션에 우선 반영됨
%>
세션 유지 시간 : <%= session.getMaxInactiveInterval() %>초<br>
</body>

 

다중 파일 업로드

fileMultiForm.jsp

<body>
<form action="/ch03_JSP/fileMultiUpload" method="post" enctype="multipart/form-data">
이름<input type="text" name="name"><br>
제목<input type="text" name="title"><br>
이미지1<input type="file" name="uploadFile" accept="image/gif,image/png,image/jpeg"><br>
이미지2<input type="file" name="uploadFile2" accept="image/gif,image/png,image/jpeg"><br>
<input type="submit" value="파일 올리기">
</form>
</body>

uploadServlet.java

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

@MultipartConfig(
		maxFileSize= 1024*1024*10,
		maxRequestSize = 1024*1024*50
)

@WebServlet("/fileMultiUpload")
public class UploadServlet2 extends HttpServlet{
	@Override
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException{
		//컨텍스트 경로상의 파일 업로드 절대 경로 구하기
		String realFolder = request.getServletContext().getRealPath("/upload");
		
		//문서 타입 및 캐릭터셋 지정
		response.setContentType("text/html;charset=utf-8");
		
		//POST 방식으로 전송된 데이터 인코딩 타입 지정
		request.setCharacterEncoding("utf-8");
		
		//HTML 출력을 위한 출력 스트림 생성
		PrintWriter out = response.getWriter();
		
		try {
			out.println("작성자 : " + request.getParameter("name") + "<br>");
			out.println("제목 : " + request.getParameter("title") + "<br>");
			out.println("----------------------------------------<br>");
			
			/* Part 객체로 단일 객체로 생성해서 이미지 표현
			 * Part part1 = request.getPart("uploadFile"); String fileName =
			 * part1.getSubmittedFileName(); if(!fileName.isEmpty()) {
			 * part1.write(realFolder+"/"+fileName);
			 * out.println("<img src=\\"/ch03_JSP/upload/" + fileName + "\\">"); }
			 * 
			 * Part part2 = request.getPart("uploadFile2"); String fileName2 =
			 * part2.getSubmittedFileName(); if(!fileName2.isEmpty()) {
			 * part2.write(realFolder+"/"+fileName2);
			 * out.println("<img src=\\"/ch03_JSP/upload/" + fileName2 + "\\">"); }
			 */
			
			/* Colleciton 객체로 받아서 반복문을 통해 이미지 표현*/
			Collection<Part> parts = request.getParts();
			for(Part p : parts) {
				String name = p.getName();
				String collecFileName = p.getSubmittedFileName();
				if(name!=null && collecFileName.isEmpty()) {
					p.write(realFolder+"/"+collecFileName);
					out.println("<img src=\\"/ch03_JSP/upload/" + collecFileName + "\\"><br>");
				}
			}
			
		} catch(IllegalStateException e){
			out.println("용량 초과 : " + e.toString());
		}
	}
}

'IT 국비 교육' 카테고리의 다른 글

쌍용교육센터 - 49일  (0) 2024.04.26
쌍용교육센터 - 48일  (0) 2024.04.25
쌍용교육센터 - 46일  (0) 2024.04.23
쌍용교육센터 - 45일  (0) 2024.04.22
쌍용교육센터 - 44일  (0) 2024.04.19