Dev log - 60, Java #14, Servlet #4, JSP #1

박강산·2022년 6월 30일
0
post-thumbnail

Java Servlet

파일 업로드 form 실습

  • 파입 업로드 시 인코딩 타입을 지정해야함 (enctype="multipart/form-data")

HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>File Upload Example</h3>
<form action="file_upload.do" method="post" enctype="multipart/form-data">
	첨부파일 : <input type="file" name="attachedFile"/>
	<input type="submit" value="전송"/>
</form>
</body>
</html>

Servlet

@WebServlet("/mod004/file_upload.do")
@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB, 2MB보다 커지면 저장소를 쓴다는 의미
		maxFileSize = 1024 * 1024 * 10, // 10MB, 업로드 최대 크기
		maxRequestSize = 1024 * 1024 * 50) // 50MB, 다른 정보들과 파일을 포함한 총합 크기, - 주면 무제한

public class FileUploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	public static final String SAVE_DIR = "C:/temp"; // 경로를 상수로 지정

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		File saveDir = new File(SAVE_DIR);
		if (!saveDir.exists()) { // 경로에 폴더가 존재하지 않는다면 폴더를 만듬
			saveDir.mkdir();
		}
		for (Part part : request.getParts()) { //request로 정보를 받아오고, part에 나눠서 정보를 저장한다는 의미
			// c:\temp\파일
			part.write(saveDir.getPath() + File.separator + extractFileName(part));
		}
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println("<html><body>");
		out.println("<h3> Upload has been done successfully.</h3>");
		out.println("</body></html>");
		out.close();
	}

	//파일 넘버를 구분
	private String extractFileName(Part part) {
		String contentDisp = part.getHeader("Content-Disposition");
		System.out.println("Content-Disposition: " + contentDisp);
		for (String s : contentDisp.split(";")) {
			if (s.contains(File.separator)) {
				return s.substring(s.lastIndexOf(File.separator) + 1).replace("\"", "");
			} else {
				return s;
			}
		}
		return "";
	}
}

  • 자바에서는 '\' 와 '/' 를 구분해줘야 함

JSP (Java Server Page)

  • 사용자를 위한 동적 뷰를 제공
  • 프레젠테이션 코드를 서블릿이 아닌 JSP를 통해 작성함으로써 코드 작성을 간소화
  • 서블릿과 JSP를 상호보완적으로 사용함으로써 Model2 아키텍쳐 기반의 애플리케이션을 작성
  • 웹 디자이너와 프로그래머의 역할 구분을 증진

JSP 특징

  1. 기본적으로 JSP는 서블릿 인스턴스로 변환됨
  2. JSP페이지를 작성한 후 저장하면 컨테이너에 의해 (자바)소스 변환, 컴파일, 실행이 자동으로 이뤄짐
    ex) hello.jsp --(translation)-> hello.java --(compile)-> hello.class --(runtime)-> 실행(서블릿)
  3. JSP는 서블릿보다 작성 과정이 간단하지만, 디버깅은 상대적으로 어려움


출처 : https://mangkyu.tistory.com/14

JSP 라이프사이클

  • 기본적으로 서블릿과 동일
  • jspInit() 메소드 : 초기화, 오버라이딩
  • jspDestroy() 메소드 : 소멸, 해제, 오버라이딩
  • _jspService() 메소드 : jsp페이지 자신, 오버라이딩 불가능


출처 : https://www.code-sample.com/2019/03/jsp-interview-questions-and-answers.html

JSP 파일 저장 위치

  • JSP는 html과 동일 위치에 저장 가능
  • WEB-INF의 하위 폴더에서도 저장 가능

JSP 주요 태그

  • 주석 : <%-- --%>
  • 지시자(directive) : <%@ %>, <%@ include %>, <%@ taglib %> 첫 줄
  • 스크립팅 엘리먼트 : <%! 멤버 선언 %>, <% 자바 코드 %>, <%= 출력 %>
  • 표헌식 : ${표헌식}
  • 커스텀태그 : JSTL

Page 지시자

  • import="java.utill.*"
  • contentType="text/html. charset=UTF-8" : MIME타입과 문자 인코딩 설정
  • session=true : 해당 페이지가 세션을 지원하려면 true (디폴트 값은 true)
  • errorPage="에러를 처리할 페이지"
  • isErrorPage="true" : 이 값이 true일 때 exception 내장 객체를 사용 가능 (디폴트 값은 false)
  • pageEncoding : JSP 페이지의 문자 인코딩을 정의(ISO-8859-1)
  • isELIgnored, isThreadSafe, language, extends, buffer, autoFlush, info : 거의 활용 X

스크립틀릿

  • JSP 페이지 내에서 자바 코드를 사용할 수 있도록 함
  • 스크립틀릿 내의 자바코드와 HTML 코드는 분리되어서 처리되어야 함 (주의!)
  • 스크립틀릿 코드의 남용은 코드에 대한 가독성을 떨어뜨리고 유지보수를 어렵게 함
- 밑의 코드는 분리되어서 처리되어 있지 않음
<%
	if(age > 10) {
		you need a ticket.
    } else {
    	You are free.
    }
%>

답안)
<%
	if(age > 10) {
%>
		you need a ticket.
<%
    } else {
%>
    	You are free.
<%
    }
%>
  • 표현식
Ten is <% (2 * 5) %>
Thank you, <%= name %> </b> for registration.
The Current day and time is <%= new java.util.Date() %>

JSP 실습1

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%-- %@는 디렉티브 태그 --%>
<%!private static final String DEFAULT_NAME = "박강산";%>
<%-- %!는 멤버 변수 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<%-- JSP 주석 --%>
<body>
	<%
	String name = request.getParameter("userName");
	if (name == null || name.length() == 0) {
		name = DEFAULT_NAME;
	}
	%><%-- 자바 코드 입력 가능 --%>
	<h3>
		Hello,
		<%=name%><%-- %=는 자바 코드 출력 --%>
	</h3>
</body>
</html>

  • GET 방식을 이용하여, 소스를 수정하지 않고 내용을 변경할 수 있음

JSP 실습2

  • 회원가입 페이지
profile
안녕하세요. 맡은 업무를 확실하게 수행하는 웹 개발자가 되기 위하여 끊임없이 학습에 정진하겠습니다.

0개의 댓글

관련 채용 정보