JSP(Example)_FileUpload

2024. 12. 27. 17:20·JSP/기초 내용 정리

2024-12-27

 

UpdateWriteOkAction.java

 

UpdateWriteOkAction.java

 

UpdateWriteOkAction.java

 

 

 

 

 

 

 ====================================== main.java ======================================

<%@ 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>

	<div align="center">
		<hr width="30%" color="orange">
			<h3>UPLOAD 첨부파일 게시판 테이블 메인 페이지</h3>
		<hr width="30%" color="orange">
		<br> <br>
		
		<a href="<%= request.getContextPath() %>/upload_list.go">[전체 게시물 목록]</a>
	</div>
	
</body>
</html>

 

 ====================================== mapping.properties ======================================

# action class(비지니스 로직)

upload_list.go = execute|com.upload.action.UploadListAction
upload_write_ok.go = execute|com.upload.action.UploadWriteOkAction
upload_content.go = execute|com.upload.action.UploadContentAction
upload_modify.go = execute|com.upload.action.UploadmodifyAction
upload_modify_ok.go = execute|com.upload.action.UploadmodifyOkAction
upload_delete.go = execute|com.upload.action.UploadDeleteAction
upload_delete_ok.go = execute|com.upload.action.UploadDeleteOkAction

# view page(화면 구현)

upload_write.go = views/upload_write.jsp

 

 ====================================== FrontController.java ======================================

package com.upload.controller;

import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.util.Properties;
import java.util.StringTokenizer;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.upload.action.Action;
import com.upload.action.ActionForward;



public class FrontController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

		// 한글 깨짐 방지 작업 설정
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");

		// getRequestURI() : "/프로젝트명/파일명(*.go)" 를 문자열로 반환해 주는 메서드
		String uri = request.getRequestURI();
		System.out.println("URI >>> " + uri);

		// getContextPath() : 현재 프로젝트명을 문자열로 반환해 주는 메서드
		String path = request.getContextPath();
		System.out.println("PATH >>> " + path);

		String command = uri.substring(path.length() + 1);
		System.out.println("command >>> " + command);

		Action action = null;
		ActionForward forward = null;

		/*
		 * Properties 클래스 
		 * 
		 * - java.util 패키지에 존재하는 클래스. 
		 * - Properties 클래스는 HashTable의 하위(자식)클래스임. 
		 * - 보통은 환경변수 및 속성 값을 Properties 파일에 저장하여 쉽게 접근할 수 있는 장점이 있음. 
		 * - Properties 파일은 일련의 키(key) - 값(value)의 한 쌍으로 이루어져 있음. 
		 * - 보통은 파일에 저장을 하여 사용을 함, 파일 이름은 *.properties 라는 이름으로 끝나게 함. 
		 * - FileInputStream 클래스에 properties 파일을 인자로 넣어서 그 스트림으로부터 파일을 가져올 때 많이 사용을 함.
		 *   인자로 들어온 properties 파일을 읽게 됨. 
		 * - 읽어 들일 때 사용하는 메서드는 load() 라는 메서드를 이용하여 파일을 읽어 들이게 됨.
		 */

		Properties prop = new Properties();

		FileInputStream fis = new FileInputStream(
				"D:\\NCS\\workspace(jsp)\\12_Board_FileUpload\\src\\main\\java\\com\\upload\\controller\\mapping.properties");

		prop.load(fis);

		String value = prop.getProperty(command);
		System.out.println("Value >>> " + value); // execute|com.reply.action.BbsListAction

		if (value.substring(0, 7).equals("execute")) {
			StringTokenizer st = new StringTokenizer(value, "|");

			String url_1 = st.nextToken(); // "execute"
			String url_2 = st.nextToken(); // "패키지명.클래스명"

			/*
			 * 동적 객체 생성 : newInstance() - Class 객체를 이용하면 new 연산자의 사용 없이 동적으로 객체 생성이 가능함. -
			 * 코드 작성 시에 클래스의 이름을 결정할 수 없고, 런타임(실행) 시에 클래스의 이름이 결정되는 경우에 유용하게 사용이 됨.
			 * 
			 * - newInstance() 메서드는 기본생성자를 통하여 객체를 생성하기 때문에 반드시 클래스에 기본생성자가 존재하여야 함. 예외가 발생할
			 * 수 있는데 해당 클래스가 추상클래스이거나 인터페이스일 경우 발생하고, 또 하나의 예외는 클래스의 생성자가 접근제한자로 인해 접근할 수 없는
			 * 경우에 발생을 함. 따라서 예외 처리를 해 주어야 함.
			 * 
			 * - 반환 타입은 Object 타입이므로 맞게 형변환을 해 주면 되지만, 클래스의 타입을 모르는 상태이므로 형변환을 해 줄 수가 없음.
			 * 이러한 문제를 해결하기 위해서 인터페이스를 사용하는 것임.
			 * 
			 * - Class.forName(class 이름)은 파라미터로 받은 class 이름에 해당하는 클래스를 로딩한 후에 그 클래스에 해당하는
			 * 인스턴스를 리턴을 해 줌. newInstance() 메서드는 로딩한 클래스의 객체를 생성하는 메서드이고, 이렇게 생성된 객체를 동적 객체
			 * 생성이라고 함.
			 */

			// 동적으로 객체를 생성하는 방법
			try {
				Class<?> url = Class.forName(url_2);
				// url.newInstance();

				// 동적으로 로딩된 클래스(객체)의 생성자(기본생성자)를 가져오는 메서드
				Constructor<?> constructor = url.getConstructor();

				// 가져온 기본생성자를 이용하여 newInstance() 메서드를 호출하여 객체를 동적으로 생성하는 메서드
				action = (Action)constructor.newInstance();

				// 비지니스 로직을 실행하는 메서드
				forward = action.execute(request, response);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else {
			// value에 들어온 값이 "execute|....."가 아닌 경우
			forward = new ActionForward();
			forward.setRedirect(false);
			forward.setPath(value);
		}
		if (forward != null) {
			if (forward.isRedirect()) {		// true 인 경우
				response.sendRedirect(forward.getPath());
			} else {	// false 인 경우
				// view page 로 이동
				request.getRequestDispatcher(forward.getPath()).forward(request, response);
			}
		}
	}
}

 

 ====================================== ActionForward.java ======================================

package com.upload.action;

/*
 *  ActionForward 클래스
 *  
 *  1. Action 인터페이스에서 리턴타입(반환형)으로 사용할 클래스
 *  2. 클래스 구성 요소
 *  	1) isRedirect 멤버 = 반환형은 boolean 타입
 *  	   - true : *.go 페이지
 *  	   - false : *.jsp 페이지
 *  
 *  	2) path 멤버 - 반환형은 String 타입
 *  	   - 파일 경로 설정(지정)
 */

public class ActionForward {

	private boolean isRedirect;
	private String path;
	
	
	public boolean isRedirect() {
		return isRedirect;
	}
	public void setRedirect(boolean isRedirect) {
		this.isRedirect = isRedirect;
	}
	
	public String getPath() {
		return path;
	}
	public void setPath(String path) {
		this.path = path;
	}
	
}

 

 ====================================== upload_list.jsp ======================================

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<div align="center">
		<hr width="30%" color="gray">
			<h3>UPLOAD 자료실 게시판 전체 리스트 페이지</h3>
		<hr width="30%" color="gray">
		<br> <br>
		
		<table border="1" width="450">
			<tr>
				<th>글 No.</th> <th>글 제목</th> <th>조회수</th> <th>작성일자</th>
			</tr>
			
			<c:set var="list" value="${ List }"/>
			<c:if test="${ !empty list }">
				<c:forEach items="${ list }" var="dto">
					<tr>
						<td>${ dto.getUpload_no() }</td>
						<td>
							<a href="<%= request.getContextPath() %>/upload_content.go?num=${ dto.getUpload_no() }">
								${ dto.getUpload_title() }</a></td>
						<td>${ dto.getUpload_hit() }</td>
						<td>${ dto.getUpload_date().substring(0, 10) }</td>
					</tr>
				</c:forEach>
			</c:if>
			<c:if test="${ empty list }">
				<tr>
					<td colspan="4" align="center">
						<h3>자료실 전체 게시물이 없습니다.....</h3>
					</td>
				</tr>
			</c:if>
		</table>
		<br> <br>
		
		<input type="button" value="글쓰기"
			onclick="location.href='upload_write.go'">
	</div>

</body>
</html>

'JSP > 기초 내용 정리' 카테고리의 다른 글

JSP(Ajax)_01  (0) 2024.12.31
JSP(Ajax)_00  (1) 2024.12.31
JSP(Example)_BOARD  (0) 2024.12.23
Java(Example)_MEMBER2  (0) 2024.12.23
JSP(JSTL)_04  (1) 2024.12.19
'JSP/기초 내용 정리' 카테고리의 다른 글
  • JSP(Ajax)_01
  • JSP(Ajax)_00
  • JSP(Example)_BOARD
  • Java(Example)_MEMBER2
mw41817
mw41817
일생의 개발 기록 저장소
  • mw41817
    IT 개발 일지
    mw41817
    • Index (487)
      • HTML (36)
        • 기초 내용 정리 (36)
      • CSS (29)
        • 기초 내용 정리 (29)
      • JavaScript (60)
        • 기초 내용 정리 (60)
      • JQuery (38)
        • 기초 내용 정리 (38)
      • Java (232)
        • 기초 내용 정리 (232)
      • JSP (46)
        • 기초 내용 정리 (46)
      • Spring, Boot (31)
        • 기초 내용 정리 (31)
      • DB (5)
        • Oracle SQL (5)
      • Code WorkBook (6)
        • programmers (6)
        • Baekjoon (0)
      • 기타 (1)
        • 유용한 사이트 (3)
  • 전체
    오늘
    어제
  • 글쓰기 관리
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 카테고리
    • 주인장 GitHub
  • 공지사항

  • 인기 글

  • 태그

    html #코딩 #프로그래밍 #기초
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
mw41817
JSP(Example)_FileUpload
상단으로

티스토리툴바