๐Ÿ“Œ JSP ๋‚ด์žฅ ๊ฐ์ฒด ์™„์ „ ์ •๋ณต + ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ์‹ค์Šต (๋‹จ์ผ/ZIP, Scope ์ด์ •๋ฆฌ)

My Pale Blue Dotยท2025๋…„ 4์›” 3์ผ
0

JSP/SERVLET

๋ชฉ๋ก ๋ณด๊ธฐ
6/25
post-thumbnail

๐Ÿ“… ๋‚ ์งœ

2025๋…„ 4์›” 3์ผ


๐Ÿ“ ํ•™์Šต ๋‚ด์šฉ


โœ… 1. JSP ๋‚ด์žฅ ๊ฐ์ฒด์˜ Scope ๊ตฌ์กฐ

JSP์—๋Š” ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” 9๊ฐœ์˜ ๋‚ด์žฅ ๊ฐ์ฒด๊ฐ€ ์žˆ๋‹ค.

๊ทธ์ค‘์—์„œ scope(์œ ํšจ ๋ฒ”์œ„) ๋ฅผ ๊ฐ€์ง€๋Š” ๋Œ€ํ‘œ ๊ฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

๊ฐ์ฒด๋ช…์„ค๋ช…์ƒ๋ช…์ฃผ๊ธฐ
pageContextํ˜„์žฌ ํŽ˜์ด์ง€์—์„œ๋งŒ ์œ ํšจํŽ˜์ด์ง€ ๋‹จ์œ„
requestํ•˜๋‚˜์˜ ์š”์ฒญ(request) ๋™์•ˆ์š”์ฒญ ๋‹จ์œ„
session๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜ ๋™์•ˆ์‚ฌ์šฉ์ž ๋‹จ์œ„
application์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์„œ๋ฒ„ ์ „์—ญ

๐Ÿ”ฝ Scope๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง:

application > session > request > pageContext

์ƒ์œ„ Scope๋Š” ํ•˜์œ„ Scope์— ์ €์žฅ๋œ ๊ฐ’์„ ์ฐธ์กฐ ๊ฐ€๋Šฅ


โœ… 2. pageContext ๋‚ด์žฅ ๊ฐ์ฒด ํ™œ์šฉ ์˜ˆ์ œ

<%
	System.out.println("pageContext : " + pageContext);
	System.out.println("Request : " + pageContext.getRequest());
	System.out.println("Session : " + pageContext.getSession());
	System.out.println("Application : " + pageContext.getServletContext());
%>

ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ: <%= pageContext.getServletContext().getContextPath() %><br/>
EL ํ‘œํ˜„์‹ ์‚ฌ์šฉ: ${ pageContext.request.contextPath }

pageContext๋Š” ๋‹จ์ˆœํžˆ scope ์ ‘๊ทผ ์™ธ์—๋„

include(), forward(), pushBody() ๋“ฑ JSP์˜ ํ๋ฆ„์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.


โœ… 3. request ๊ฐ์ฒด ํ™œ์šฉ - ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ •๋ณด ์ถ”์ถœ

<%
	String protocol = request.getProtocol();
	String serverName = request.getServerName();
	String remoteAddr = request.getRemoteAddr();
	String method = request.getMethod();
	String userAgent = request.getHeader("User-Agent");
%>

ํ”„๋กœํ† ์ฝœ: <%= protocol %><br/>
์„œ๋ฒ„๋ช…: <%= serverName %><br/>
์š”์ฒญ ๋ฐฉ์‹: <%= method %><br/>
์ ‘์† IP: <%= remoteAddr %><br/>
๋ธŒ๋ผ์šฐ์ € ์ •๋ณด: <%= userAgent %>

request๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ๊ฐ์ฒด๋‹ค.


โœ… 4. response ๊ฐ์ฒด ํ™œ์šฉ - ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ, ์—๋Ÿฌ, ์‘๋‹ต ์ถœ๋ ฅ

<%
	// ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
	// response.sendRedirect("some.jsp");

	// ์—๋Ÿฌ ์‘๋‹ต
	// response.sendError(HttpServletResponse.SC_NOT_FOUND, "ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค");

	// ์ƒˆ๋กœ๊ณ ์นจ
	// response.setIntHeader("Refresh", 3);

	// HTML ์ง์ ‘ ์ถœ๋ ฅ
	PrintWriter out = response.getWriter();
	out.write("<h1>Hello, World!</h1>");
%>

response๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ ์‘๋‹ต์„ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ


โœ… 5. ๋‹จ์ผ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ๊ตฌํ˜„

<%
	String dirPath = pageContext.getServletContext().getRealPath("/") + "C05\\files\\";
	FileInputStream in = new FileInputStream(dirPath + "TEST.txt");

	ServletOutputStream bout = response.getOutputStream();
	response.setHeader("Content-Type", "application/octet-stream;charset=utf-8");
	response.setHeader("Content-Disposition", "attachment; filename=router.zip");

	byte[] buffer = new byte[4096];
	int data;
	while ((data = in.read(buffer)) != -1) {
		bout.write(buffer, 0, data);
	}
	bout.flush(); bout.close(); in.close();
%>

Content-Type: application/octet-stream์€

๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ "์ด๊ฑด ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์ด์•ผ, ์ง์ ‘ ์—ด์ง€ ๋ง๊ณ  ๋‹ค์šด๋กœ๋“œ ํ•ด์ค˜" ๋ผ๊ณ  ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.


โœ… 6. ZIP ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ (๋ชจ๋“  ํŒŒ์ผ ์••์ถ•)

<%
	String dirPath = pageContext.getServletContext().getRealPath("/") + "C05\\files\\";
	File[] fileList = new File(dirPath).listFiles();

	ServletOutputStream bout = response.getOutputStream();
	ZipOutputStream zout = new ZipOutputStream(bout);

	response.setHeader("Content-Type", "application/octet-stream;charset=utf-8");
	response.setHeader("Content-Disposition", "attachment; filename=ALLFILES.zip");

	for (File file : fileList) {
		FileInputStream in = new FileInputStream(file);
		ZipEntry entry = new ZipEntry(file.getName());
		zout.putNextEntry(entry);

		// ํŒŒ์ผ ๋‚ด์šฉ์„ zip์— ๊ธฐ๋ก
		int d;
		while ((d = in.read()) != -1) {
			zout.write(d);
		}

		zout.closeEntry(); in.close(); // ๊ฐ ํŒŒ์ผ entry ๋‹ซ๊ธฐ
	}
	zout.flush(); zout.close(); bout.close();
%>

๊ฐ ํŒŒ์ผ๋งˆ๋‹ค ZipEntry๋ฅผ ์ƒ์„ฑํ•œ ๋’ค,

๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•˜๊ณ  closeEntry()๋กœ ๋‹ซ๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ZIP ์••์ถ•์„ ์™„์„ฑํ•œ๋‹ค.


โœ… 7. ๋‹ค์šด๋กœ๋“œ ๋ฉ”๋‰ด ํŽ˜์ด์ง€ (๋งํฌ ์ œ๊ณต)

<a href="04Download_SingleFile.jsp">๋‹จ์ผํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ</a>
<hr/>
<a href="05Download_zip.jsp">ZIP ๋‹ค์šด๋กœ๋“œ</a>

์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์šด๋กœ๋“œ ์„ ํƒ UI ์ œ๊ณต


๐Ÿ–ฅ๏ธ ์ฝ˜์†” ์ถœ๋ ฅ ์˜ˆ์‹œ

pageContext : org.apache.jasper.runtime.PageContextImpl@2a3bc9
Request : org.apache.catalina.connector.RequestFacade@4a1dc
Session : org.apache.catalina.session.StandardSessionFacade@4a8fd
Application : org.apache.catalina.core.ApplicationContextFacade@7a3dc
dirPath : C:\workspace\project\C05\files\

๐Ÿ’ฌ ๋А๋‚€ ์ 

JSP ๋‚ด์žฅ ๊ฐ์ฒด๋“ค์€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ฒ”์œ„(Scope) ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ,

request/response ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ํ†ต์‹  ํ๋ฆ„์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠนํžˆ pageContext๋Š” ๋ชจ๋“  ๋ฒ”์œ„๋ฅผ ๊ด€ํ†ตํ•  ์ˆ˜ ์žˆ๋Š” ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ด๋ฉฐ,

JSP์˜ ํ๋ฆ„๊นŒ์ง€ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋งค์šฐ ์ธ์ƒ ๊นŠ์—ˆ๋‹ค.

๋˜ํ•œ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ๊ธฐ๋Šฅ์€ ๋‹จ์ผ๊ณผ ์••์ถ• ๋ชจ๋‘ ์‹ค์ œ ์„œ๋น„์Šค์—์„œ ๊ผญ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด๋ผ๋Š” ์ ์—์„œ ์‹ค์Šต์ด ๋งค์šฐ ์œ ์ตํ–ˆ๋‹ค.


๐Ÿ“Œ ์š”์•ฝ

  • JSP์˜ ๋‚ด์žฅ ๊ฐ์ฒด๋Š” scope๋ณ„๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ, pageContext๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๊ฐ์ฒด ์ ‘๊ทผ ๋ฐ ํ๋ฆ„ ์ œ์–ด ๊ฐ€๋Šฅ
  • request๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ •๋ณด๋ฅผ, response๋Š” ์‘๋‹ต์„ ์ œ์–ดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค
  • ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ๋Š” response์˜ OutputStream๊ณผ ์ ์ ˆํ•œ ํ—ค๋” ์„ค์ •์œผ๋กœ ๊ฐ€๋Šฅ
  • ์••์ถ• ๋‹ค์šด๋กœ๋“œ๋Š” ZipOutputStream์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ํ•œ ๋ฒˆ์— ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค

profile
Here, My Pale Blue.๐ŸŒ

0๊ฐœ์˜ ๋Œ“๊ธ€