2024-12-27








====================================== 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 |