From cd2ec1c411f3084cb49ae9b35a491a8f47d0a035 Mon Sep 17 00:00:00 2001 From: USER Date: Fri, 14 Aug 2026 19:21:08 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B5=9C=EC=A2=85=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board/controller/BoardController.java | 195 ++++++++++++++++++ .../kr/itpinc/first/board/dao/BoardDAO.java | 79 +++++++ .../first/board/service/BoardService.java | 26 +++ .../first/board/service/BoardServiceImpl.java | 124 +++++++++++ .../resources/mapper/sample/Sample_SQL.xml | 188 +++++++++++++++++ .../webapp/WEB-INF/include/include-body.jspf | 2 + .../WEB-INF/include/include-header.jspf | 15 ++ src/main/webapp/WEB-INF/jsp/sample/Test.jsp | 94 +++++++++ src/main/webapp/WEB-INF/jsp/sample/Test01.jsp | 24 +++ .../webapp/WEB-INF/jsp/sample/boardDetail.jsp | 103 +++++++++ .../webapp/WEB-INF/jsp/sample/boardList.jsp | 98 +++++++++ .../webapp/WEB-INF/jsp/sample/boardSearch.jsp | 13 ++ .../webapp/WEB-INF/jsp/sample/boardUpdate.jsp | 164 +++++++++++++++ .../webapp/WEB-INF/jsp/sample/boardWrite.jsp | 97 +++++++++ src/main/webapp/WEB-INF/jsp/sample/kk.jsp | 12 ++ src/main/webapp/WEB-INF/views/home.jsp | 15 ++ src/main/webapp/css/ui.css | 23 +++ src/main/webapp/index.jsp | 12 ++ src/main/webapp/js/common.js | 179 ++++++++++++++++ 19 files changed, 1463 insertions(+) create mode 100644 src/main/java/kr/itpinc/first/board/controller/BoardController.java create mode 100644 src/main/java/kr/itpinc/first/board/dao/BoardDAO.java create mode 100644 src/main/java/kr/itpinc/first/board/service/BoardService.java create mode 100644 src/main/java/kr/itpinc/first/board/service/BoardServiceImpl.java create mode 100644 src/main/resources/mapper/sample/Sample_SQL.xml create mode 100644 src/main/webapp/WEB-INF/include/include-body.jspf create mode 100644 src/main/webapp/WEB-INF/include/include-header.jspf create mode 100644 src/main/webapp/WEB-INF/jsp/sample/Test.jsp create mode 100644 src/main/webapp/WEB-INF/jsp/sample/Test01.jsp create mode 100644 src/main/webapp/WEB-INF/jsp/sample/boardDetail.jsp create mode 100644 src/main/webapp/WEB-INF/jsp/sample/boardList.jsp create mode 100644 src/main/webapp/WEB-INF/jsp/sample/boardSearch.jsp create mode 100644 src/main/webapp/WEB-INF/jsp/sample/boardUpdate.jsp create mode 100644 src/main/webapp/WEB-INF/jsp/sample/boardWrite.jsp create mode 100644 src/main/webapp/WEB-INF/jsp/sample/kk.jsp create mode 100644 src/main/webapp/WEB-INF/views/home.jsp create mode 100644 src/main/webapp/css/ui.css create mode 100644 src/main/webapp/index.jsp create mode 100644 src/main/webapp/js/common.js diff --git a/src/main/java/kr/itpinc/first/board/controller/BoardController.java b/src/main/java/kr/itpinc/first/board/controller/BoardController.java new file mode 100644 index 0000000..7f16de1 --- /dev/null +++ b/src/main/java/kr/itpinc/first/board/controller/BoardController.java @@ -0,0 +1,195 @@ +package kr.itpinc.first.board.controller; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import jakarta.servlet.http.HttpServletRequest; +import kr.itpinc.first.board.service.BoardService; +import kr.itpinc.first.common.common.CommandMap; +import lombok.extern.slf4j.Slf4j; + +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +//import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; +//import first.common.common.CommandMap; +//import first.sample.service.SampleService; + +@Slf4j +@Controller +public class BoardController +{ + private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(BoardController.class); + + @Autowired + private BoardService boardService; //샘플서비스 선언하고 + + + + @RequestMapping(value="/sample/openBoardSearch.do") + public ModelAndView openBoardSearch(CommandMap commandMap) throws Exception + { + ModelAndView mv = new ModelAndView("/sample/boardSearch"); + return mv; + } + + + @RequestMapping(value="/sample/openBoardList.do") //경로 맵핑해주고~ + public ModelAndView openBoardList( + @PageableDefault(page = 0, size = 10, sort = "boardId", direction = Sort.Direction.DESC) + Pageable pageable, + CommandMap commandMap) throws Exception + { //모델뷰 만들고 openSampleBoardList 메서드 만들고 + ModelAndView mv = new ModelAndView("/sample/boardList"); //모델뷰 객체 선언뒤 jsp파일 지정 + + // 이 안에서 pageable 객체를 열어보면 계산이 다 끝나 있습니다. + int currentPage = pageable.getPageNumber(); // 현재 페이지 번호 (0부터 시작) + int pageSize = pageable.getPageSize(); // 페이지당 데이터 수 (10) + long offset = pageable.getOffset(); // DB 쿼리용 시작 위치 (0 * 10 = 0) + Map param = commandMap.getMap(); + param.put("PAGE_INDEX", currentPage); + param.put("PAGE_ROW", pageSize); + param.put("START", offset); + + + List> resultMap = boardService.selectBoardList(param); + + + // 🌟 원인 파악을 위한 디버깅 코드 3줄 추가 🌟 + System.out.println("넘어온 파라미터: " + commandMap.getMap()); + System.out.println("DB 조회 건수: " + resultMap.size()); + if(!resultMap.isEmpty()) { + System.out.println("첫 번째 데이터 형태: " + resultMap.get(0)); + } + + + //List> list = sampleService.selectBoardList(commandMap); + //앞에서 샘플서비스 선언한것 뒤에 selectBoardList라는 메서드 만들고 + //mv.addObject("list", list); //앞에서 실행 다하고 list에 담긴건 list라고 선언하고 + + //mv.addObject("paginationInfo", (PaginationInfo)resultMap.get("paginationInfo")); + log.info(resultMap.toString()); + mv.addObject("list", resultMap); + + log.info(""); + + return mv; + + + } + + @RequestMapping(value="/sample/testMapArgumentResolver.do") + public ModelAndView testMapArgumentResolver(CommandMap commandMap) throws Exception + { + ModelAndView mv = new ModelAndView(""); + + if(commandMap.isEmpty() == false) + { + Iterator> iterator = commandMap.getMap().entrySet().iterator(); + Entry entry = null; + while(iterator.hasNext()) + { + entry = iterator.next(); + } + } + + return mv; + } + + + @RequestMapping(value="/sample/openBoardWrite.do") + public ModelAndView openBoardWrite(CommandMap commandMap) throws Exception + { + + ModelAndView mv = new ModelAndView("/sample/boardWrite"); //JSP 파일 지정 + System.out.println("========JRebel Test============"); + return mv; + } + + @RequestMapping(value="/sample/Test.do") + public ModelAndView Test(CommandMap commandMap) throws Exception + { + + ModelAndView mv = new ModelAndView("/sample/Test"); //JSP 파일 지정 + System.out.println("========Test Test============"); + return mv; + } + + @RequestMapping(value="/sample/kk.do") + public ModelAndView kk(CommandMap commandMap) throws Exception + { + + ModelAndView mv = new ModelAndView("/sample/kk"); //JSP 파일 지정 + System.out.println("========kk Test============"); + return mv; + } + + + + + @RequestMapping(value="/sample/insertBoard.do") + public ModelAndView insertBoard(CommandMap commandMap, HttpServletRequest request) throws Exception + { + ModelAndView mv = new ModelAndView("redirect:/sample/openBoardList.do"); + + boardService.insertBoard(commandMap.getMap(), request); + + return mv; + } + + @RequestMapping(value="/sample/openBoardDetail.do") + public ModelAndView openBoardDetail(CommandMap commandMap) throws Exception + { + ModelAndView mv = new ModelAndView("/sample/boardDetail"); + + Map map = boardService.selectBoardDetail(commandMap.getMap()); + + mv.addObject("map", map.get("map")); + mv.addObject("list", map.get("list")); //요건 첨부파일 목록 부를때 쓸거임 + + return mv; + } + + @RequestMapping(value="/sample/openBoardUpdate.do") //수정디테일화면 + public ModelAndView openBoardUpdate(CommandMap commandMap) throws Exception + { + ModelAndView mv = new ModelAndView("/sample/boardUpdate"); + + Map map = boardService.boardUpdate(commandMap.getMap()); + + mv.addObject("map", map.get("map")); //내용 + mv.addObject("list", map.get("list")); //첨부파일 + + return mv; + } + + @RequestMapping(value="/sample/updateBoard.do") //수정하기 누르는~~ 혹은 저장하기 누르는~~ + public ModelAndView updateBoard(CommandMap commandMap, HttpServletRequest request) throws Exception + { + ModelAndView mv = new ModelAndView("redirect:/sample/openBoardDetail.do"); + + boardService.updateBoard(commandMap.getMap(), request); + + mv.addObject("IDX", commandMap.get("IDX")); + return mv; + } + + @RequestMapping(value="/sample/deleteBoard.do") + public ModelAndView deleteBoard(CommandMap commandMap) throws Exception + { + ModelAndView mv = new ModelAndView("redirect:/sample/openBoardList.do"); + + boardService.deleteBoard(commandMap.getMap()); + + return mv; + } + + +} diff --git a/src/main/java/kr/itpinc/first/board/dao/BoardDAO.java b/src/main/java/kr/itpinc/first/board/dao/BoardDAO.java new file mode 100644 index 0000000..6dd3682 --- /dev/null +++ b/src/main/java/kr/itpinc/first/board/dao/BoardDAO.java @@ -0,0 +1,79 @@ +package kr.itpinc.first.board.dao; + +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Repository; + +import kr.itpinc.first.common.dao.AbstractDAO; + +@Repository("boardDAO") //@Repository DAO선언시 주로 사용 +public class BoardDAO extends AbstractDAO //오 요건 extends로 상속 받았으니 그대로 쓰면됨 +{ + + @SuppressWarnings("unchecked") //에러 경고문 필요없음 + public List> selectBoardList(Map map) throws Exception + { + //return (List>) selectList("sample.selectBoardList", map); + //첫번째 인자값이 쿼리 이름 -> sample.selectBoardList + return (List>) selectPagingList("sample.selectBoardList", map); + } + + public void insertBoard(Map map) throws Exception + { + insert("sample.insertBoard", map); + } + + public void insertFile(Map map) throws Exception + { + insert("sample.insertFile", map); + } + + /*public void updateHitCnt(Map map) throws Exception + { + update("sample.updateHitCnt", map); + }*/ + + @SuppressWarnings("unchecked") + public Map selectBoardDetail(Map map) throws Exception{ + return (Map) selectOne("sample.selectBoardDetail", map); + } + + @SuppressWarnings("unchecked") + public List> selectFileList(Map map) throws Exception + { + return (List>) selectList("sample.selectFileList", map); + } + + @SuppressWarnings("unchecked") + public Map boardUpdate(Map map) throws Exception + { + return (Map) selectOne("sample.boardUpdate", map); + } + + public void updateBoard(Map map) throws Exception + { + update("sample.updateBoard", map); + } + + public void deleteBoard(Map map) throws Exception + { + delete("sample.deleteBoard", map); + } + + public void updateHitCnt(Map map) + { + update("sample.updateHitCnt", map); + } + + public void deleteFileList(Map map) + { + update("sample.deleteFileList", map); + } + + public void updateFile(Map map) + { + update("sample.updateFile", map); + } + +} diff --git a/src/main/java/kr/itpinc/first/board/service/BoardService.java b/src/main/java/kr/itpinc/first/board/service/BoardService.java new file mode 100644 index 0000000..9b61ca4 --- /dev/null +++ b/src/main/java/kr/itpinc/first/board/service/BoardService.java @@ -0,0 +1,26 @@ +package kr.itpinc.first.board.service; + +import java.util.List; +import java.util.Map; + +import jakarta.servlet.http.HttpServletRequest; + +public interface BoardService { + + List> selectBoardList(Map map) throws Exception; + + void insertBoard(Map map, HttpServletRequest request) throws Exception; + + Map selectBoardDetail(Map map) throws Exception; + + Map boardUpdate(Map map) throws Exception; + + void updateBoard(Map map, HttpServletRequest request) throws Exception; + + void deleteBoard(Map map) throws Exception; + + + + + +} diff --git a/src/main/java/kr/itpinc/first/board/service/BoardServiceImpl.java b/src/main/java/kr/itpinc/first/board/service/BoardServiceImpl.java new file mode 100644 index 0000000..a78c239 --- /dev/null +++ b/src/main/java/kr/itpinc/first/board/service/BoardServiceImpl.java @@ -0,0 +1,124 @@ +package kr.itpinc.first.board.service; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; + +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import kr.itpinc.first.common.util.FileUtils; +import kr.itpinc.first.board.controller.BoardController; +import kr.itpinc.first.board.dao.BoardDAO; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service("boardService") +public class BoardServiceImpl implements BoardService //인터페이스 상속시 implements +{ //SampleSeriveImpl 클래스 선언하는데 SampleSerive + + private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(BoardServiceImpl.class); + + @Resource(name="fileUtils") + private FileUtils fileUtils; + + @Resource(name="boardDAO") + private BoardDAO boardDAO; //SampleDAO 선언해주고 + + @Override //implements로 상속 받았으니 @Override로 재 정의해줌(SampleService에서 정의한놈) + public List> selectBoardList(Map map) throws Exception { + + return boardDAO.selectBoardList(map); + } + + @Override + public void insertBoard(Map map, HttpServletRequest request) throws Exception + { + boardDAO.insertBoard(map); + + List> list = fileUtils.parseInsertFileInfo(map, request); + for(int i=0,size=list.size();i iterator = multipartHttpServletRequest.getFileNames(); + MultipartFile multipartFile = null; + + while(iterator.hasNext()) + { + multipartFile = multipartHttpServletRequest.getFile(iterator.next()); + + if(multipartFile.isEmpty() == false) + { + log.debug("--------------file start------------"); + log.debug("name :" + multipartFile.getName()); + log.debug("filename :" + multipartFile.getOriginalFilename()); + log.debug("size :" + multipartFile.getSize()); + log.debug("--------------file end--------------\n"); + } + } + } + + @Override + public Map selectBoardDetail(Map map) throws Exception + { + boardDAO.updateHitCnt(map); + + Map resultMap = new HashMap(); + Map tempMap = boardDAO.selectBoardDetail(map); + resultMap.put("map", tempMap); + + List> list = boardDAO.selectFileList(map); + resultMap.put("list", list); + + return resultMap; + } + + @Override + public Map boardUpdate(Map map) throws Exception + { + Map resultMap = new HashMap(); + Map tempMap = boardDAO.boardUpdate(map); + resultMap.put("map", tempMap); + + List> list = boardDAO.selectFileList(map); + resultMap.put("list", list); + + return resultMap; + } + + @Override + public void updateBoard(Map map, HttpServletRequest request) throws Exception + { + boardDAO.updateBoard(map); //기존 글만 수정(업데이트) + + boardDAO.deleteFileList(map); // (DEL_GB = 'Y') 로 처리하는 부분 + List> list = fileUtils.parseInsertFileInfo(map, request); + Map tempMap = null; + for(int i=0,size=list.size();i map) throws Exception { + + boardDAO.deleteBoard(map); + + } +} diff --git a/src/main/resources/mapper/sample/Sample_SQL.xml b/src/main/resources/mapper/sample/Sample_SQL.xml new file mode 100644 index 0000000..2a7cdef --- /dev/null +++ b/src/main/resources/mapper/sample/Sample_SQL.xml @@ -0,0 +1,188 @@ + + + + + + + + + SELECT SEQ_TB_BOARD_IDX.NEXTVAL FROM DUAL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/include/include-body.jspf b/src/main/webapp/WEB-INF/include/include-body.jspf new file mode 100644 index 0000000..140e6bf --- /dev/null +++ b/src/main/webapp/WEB-INF/include/include-body.jspf @@ -0,0 +1,2 @@ +<%@ page pageEncoding="UTF-8"%> +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/include/include-header.jspf b/src/main/webapp/WEB-INF/include/include-header.jspf new file mode 100644 index 0000000..6bba074 --- /dev/null +++ b/src/main/webapp/WEB-INF/include/include-header.jspf @@ -0,0 +1,15 @@ +<%@ page pageEncoding="UTF-8"%> + + + +bloggers + +<%@ taglib prefix="c" uri="jakarta.tags.core" %> +<%@ taglib prefix="fn" uri="jakarta.tags.functions" %> +<%@ taglib prefix="fmt" uri="jakarta.tags.fmt" %> + + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/sample/Test.jsp b/src/main/webapp/WEB-INF/jsp/sample/Test.jsp new file mode 100644 index 0000000..aacc1ce --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/sample/Test.jsp @@ -0,0 +1,94 @@ +<%@ page language="java" contentType="text/html; charset=EUC-KR" + pageEncoding="EUC-KR"%> + + + + +Insert title here +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ include file ="/WEB-INF/include/include-header.jspf" %> + + + +

게시판 목록

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
글번호제목
${row.IDX } + ${row.TITLE } + +
조회된 결과가 없습니다.
+ + + + + +
+ 글쓰기 + + <%@ include file="/WEB-INF/include/include-body.jspf" %> + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/sample/Test01.jsp b/src/main/webapp/WEB-INF/jsp/sample/Test01.jsp new file mode 100644 index 0000000..0baca3b --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/sample/Test01.jsp @@ -0,0 +1,24 @@ +<%@ page language="java" contentType="text/html; charset=EUC-KR" + pageEncoding="EUC-KR"%> + + + + + + +Insert title here + + + +

+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/sample/boardDetail.jsp b/src/main/webapp/WEB-INF/jsp/sample/boardDetail.jsp new file mode 100644 index 0000000..6ed9e00 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/sample/boardDetail.jsp @@ -0,0 +1,103 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + + + + +Insert title here +<%@ include file="/WEB-INF/include/include-header.jspf" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
게시글 상세
글 번호${map.IDX }조회수${map.HIT_CNT }
작성자${map.CREA_ID }작성시간${map.CREA_DTM }
제목${map.TITLE }
${map.CONTENTS }
첨부파일 + + + + + ${row.ORIGINAL_FILE_NAME } + (${row.FILE_SIZE }kb) + + + 첨부된 파일이 없습니다.! + +
+ + 목록으로 + 수정하기 + + <%@ include file="/WEB-INF/include/include-body.jspf" %> + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/sample/boardList.jsp b/src/main/webapp/WEB-INF/jsp/sample/boardList.jsp new file mode 100644 index 0000000..d031589 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/sample/boardList.jsp @@ -0,0 +1,98 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + + + + +Insert title here +<%@ include file ="/WEB-INF/include/include-header.jspf" %> + + + +

게시판 목록

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
글번호제목조회수작성일
${row.IDX } + ${row.TITLE } + + ${row.HIT_CNT }${row.CREA_DTM }
조회된 결과가 없습니다.
+ + + + + + +
+ 글쓰기 + + <%@ include file="/WEB-INF/include/include-body.jspf" %> + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/sample/boardSearch.jsp b/src/main/webapp/WEB-INF/jsp/sample/boardSearch.jsp new file mode 100644 index 0000000..d3d22da --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/sample/boardSearch.jsp @@ -0,0 +1,13 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + + + +Insert title here +<%@ include file="/WEB-INF/include/include-header.jspf" %> + + +HI~ +<%@ include file="/WEB-INF/include/include-body.jspf" %> + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/sample/boardUpdate.jsp b/src/main/webapp/WEB-INF/jsp/sample/boardUpdate.jsp new file mode 100644 index 0000000..76ed53e --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/sample/boardUpdate.jsp @@ -0,0 +1,164 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + + + + +Insert title here +<%@ include file="/WEB-INF/include/include-header.jspf" %> + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
게시글 상세
글 번호 + ${map.IDX } + + 조회수${map.HIT_CNT }
작성자${map.CREA_ID }작성시간${map.CREA_DTM }
제목 + +
+ +
첨부파일 +
+ + + +

+ + ${row.ORIGINAL_FILE_NAME } + + (${row.FILE_SIZE }kb) + 삭제 +

+
+
+ 첨부된 파일이 없습니다! +
+
+
+
+ 파일추가 + 목록으로 + 저장하기 + 삭제하기 + + <%@ include file="/WEB-INF/include/include-body.jspf" %> + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/sample/boardWrite.jsp b/src/main/webapp/WEB-INF/jsp/sample/boardWrite.jsp new file mode 100644 index 0000000..3443953 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/sample/boardWrite.jsp @@ -0,0 +1,97 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + + + +<%@ include file="/WEB-INF/include/include-header.jspf" %> +Insert title here + + +
+ + + + + + + + + + + + + + + +
게시글 작성
제목
+ +
+ + +
+

+ + 삭제 +

+
+

+ 파일추가 + 작성하기 + 목록으로 +
+ + <%@ include file="/WEB-INF/include/include-body.jspf" %> + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/sample/kk.jsp b/src/main/webapp/WEB-INF/jsp/sample/kk.jsp new file mode 100644 index 0000000..68fbafa --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/sample/kk.jsp @@ -0,0 +1,12 @@ +<%@ page language="java" contentType="text/html; charset=EUC-KR" + pageEncoding="EUC-KR"%> + + + + +Insert title here + + +kkkk + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/home.jsp b/src/main/webapp/WEB-INF/views/home.jsp new file mode 100644 index 0000000..d1f8a0f --- /dev/null +++ b/src/main/webapp/WEB-INF/views/home.jsp @@ -0,0 +1,15 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ page session="false" %> + + + Home + + +

+ Hello world! +

+ +

The time on the server is ${serverTime}.

+ + diff --git a/src/main/webapp/css/ui.css b/src/main/webapp/css/ui.css new file mode 100644 index 0000000..d317aac --- /dev/null +++ b/src/main/webapp/css/ui.css @@ -0,0 +1,23 @@ +@CHARSET "UTF-8"; + +a:link, a:visited {text-decoration: none; color: #656565;} + +.board_list {width:100%;border-top:2px solid #252525;border-bottom:1px solid #ccc} +.board_list thead th:first-child{background-image:none} +.board_list thead th {border-bottom:1px solid #ccc;padding:12px 0 13px 0;color:#3b3a3a;vertical-align:middle} +.board_list tbody td {border-top:1px solid #ccc;padding:10px 0;text-align:center;vertical-align:middle} +.board_list tbody tr:first-child td {border:none} +.board_list tbody td.title {text-align:left; padding-left:20px} +.board_list tbody td a {display:inline-block} + +.board_view {width:30%;border-top:2px solid #252525;border-bottom:1px solid #ccc} +.board_view tbody th {text-align:left;background:#f7f7f7;color:#3b3a3a} +.board_view tbody th.list_tit {font-size:13px;color:#000;letter-spacing:0.1px} +.board_view tbody .no_line_b th, .board_view tbody .no_line_b td {border-bottom:none} +.board_view tbody th, .board_view tbody td {padding:15px 0 16px 16px;border-bottom:1px solid #ccc} +.board_view tbody td.view_text {border-top:1px solid #ccc; border-bottom:1px solid #ccc;padding:45px 18px 45px 18px} +.board_view tbody th.th_file {padding:0 0 0 15px; vertical-align:middle} + +.wdp_90 {width:60%} +.btn {border-radius:3px;padding:5px 11px;color:#fff !important; display:inline-block; background-color:#6b9ab8; border:1px solid #56819d;vertical-align:middle} +.pad_5 {padding: 5px} \ No newline at end of file diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp new file mode 100644 index 0000000..ad05442 --- /dev/null +++ b/src/main/webapp/index.jsp @@ -0,0 +1,12 @@ +<%@ page language="java" contentType="text/html; charset=EUC-KR" + pageEncoding="EUC-KR"%> + + + + +Insert title here + + + + + \ No newline at end of file diff --git a/src/main/webapp/js/common.js b/src/main/webapp/js/common.js new file mode 100644 index 0000000..0ee9411 --- /dev/null +++ b/src/main/webapp/js/common.js @@ -0,0 +1,179 @@ +function gfn_isNull(str) { + if (str == null) return true; + if (str == "NaN") return true; + if (new String(str).valueOf() == "undefined") return true; + var chkStr = new String(str); + if( chkStr.valueOf() == "undefined" ) return true; + if (chkStr == null) return true; + if (chkStr.toString().length == 0 ) return true; + return false; +} + +/** + * 공통 서브밋 객체 (Target/Popup 대응 버전) + */ +function ComSubmit(opt_formId) { + this.formId = (typeof opt_formId === "undefined" || opt_formId === null || opt_formId === "") ? "commonForm" : opt_formId; + this.url = ""; + this.target = "_self"; // 기본값은 현재 창 + + var $targetForm = $("#" + this.formId); + + // [1] 초기화: commonForm일 경우 내부를 비우고 target도 기본값으로 리셋 + if ($targetForm.length > 0 && this.formId === "commonForm") { + $targetForm.empty(); + $targetForm.attr("target", "_self"); // 이전 타겟 설정 제거 + } + + this.setUrl = function setUrl(url) { + this.url = url; + }; + + /** + * [2] 타겟 설정 (팝업창 이름이나 _blank 등) + */ + this.setTarget = function setTarget(target) { + this.target = target; + }; + + this.addParam = function addParam(key, value) { + if ($targetForm.length === 0) return; + var $existingParam = $targetForm.find("input[name='" + key + "']"); + + if ($existingParam.length > 0) { + $existingParam.val(value); + } else { + var inputHtml = $("", { type: "hidden", name: key, id: key, value: value }); + $targetForm.append(inputHtml); + } + }; + + /** + * [3] 서버 전송 + */ + this.submit = function submit() { + if ($targetForm.length === 0) return; + + var frm = $targetForm[0]; + if (!this.url) { + alert("전송할 URL이 설정되지 않았습니다."); + return; + } + + frm.action = this.url; + frm.method = "post"; + frm.target = this.target; // 설정된 타겟 적용 + frm.submit(); + }; +} + + var gfv_ajaxCallback = ""; + + function ComAjax(opt_formId) + { + this.url = ""; + this.formId = gfn_isNull(opt_formId) == true?"commonForm":opt_formId; + this.param = ""; + + if(this.formId == "commonForm") + { + var frm = $("#commonForm"); + if(frm.length>0){ + frm.remove(); + } + + var str = "
"; + $('body').append(str); + } + + this.setUrl = function setUrl(url) + { + this.url = url; + }; + + this.setCallback = function setCallback(callBack) + { + fv_ajaxCallback = callBack; + }; + + this.addParam = function addParam(key, value) + { + this.param = this.param + "&" + key + "=" + value; + }; + + this.ajax = function ajax() + { + if(this.formId != "commonForm"){ + this.param += "&" + $("#" + this.formId).serialize(); + } + $.ajax({ + url : this.url, + type : "post", + data : this.param, + async : false, + success : function(data, status){ + if(typeof(fv_ajaxCallback) == "function"){ + fv_ajaxCallback(data); + }else{ + eval(fv_ajaxCallback + "(data);"); + } + } + }); + }; + } + + //페이징 태그부분 + /* + * divId : 페이징 태그가 그려질 div + * pageIndx : 현재 페이지 위치가 저장될 input 태그 id + * recordCount : 페이지당 레코드 수 + * totalCount : 전체 조회 건수 + * eventName : 페이징 하단의 숫자 등의 버튼이 클릭되었을때 호출될 함수 이름 + */ + + var gfv_pageIndex = null; + var gfv_eventName = null; + + function gfn_renderPaging(params) + { + var divId = params.divId; //페이징이 그려질 div id + gfv_pageIndex = params.pageIndex; //현재 위치가 저장될 input 태그 + var totalCount = params.totalCount; //전체 조회 건수 + var currentIndex = $("#"+params.pageIndex).val(); //현재 위치 + if($("#"+params.pageIndex).length == 0 || gfn_isNull(currentIndex) == true){ + currentIndex = 1; + } + + var recordCount = params.recordCount; //페이지당 레코드 수 + if(gfn_isNull(recordCount) == true){ + recordCount = 20; + } + + var totalIndexCount = Math.ceil(totalCount/recordCount); //전체 인덱스 수 + gfn_eventName = params.eventName; + /* + * Math.floor : 소수점 버림 + * Math.ceil : 소수점 올림 + * Math.round : 반올림 + * Math.random : 랜덤함수 + * Math.sqrt : 제곱근 + * Math.pow : 제곱 + * Math.abs : 절대값 + */ + + $("#"+divId).empty(); + var preStr = ""; + var postStr = ""; + var str = ""; + + var first = (parseInt((currentIndex-1)/10)*10) + 1; + var last = (parseInt(totalCount/10)==parseInt(currentIndex/10))?totalIndexCount%10:10; + var prev = (parseInt((currentIndex-1)/10)*10) - 9 > 0 ? (parseInt((currentIndex-1)/10)*10) - 9 : 1; + var next = (parseInt((currentIndex-1)/10)+1) * 10 + 1 < totalIndexCount ? (parseInt((currentIndex-1)/10)+1) * 10 + 1 : totalIndexCount; + + if(totalIndexCount>10){ + preStr += "[<<]" + } + + + } \ No newline at end of file