파일 목록
-
📁 .metadata
-
📁 .mylyn
-
📁 contexts
- repositories.xml.zip
-
-
📁 .plugins
-
📁 org.eclipse.buildship.core
-
📁 init.d
-
📁 project-preferences
-
-
📁 org.eclipse.buildship.ui
-
📁 org.eclipse.core.resources
-
📁 .history
-
📁 22
-
📁 28
-
📁 6a
-
📁 78
-
📁 7e
-
📁 83
-
📁 ca
-
📁 e
-
📁 fe
-
-
📁 .projects
-
📁 .org.eclipse.egit.core.cmp
-
📁 BookMarket
-
📁 .indexes
-
📁 af
-
-
📁 org.eclipse.jdt.apt.core
-
📁 org.eclipse.jdt.core
- .location
- .markers
- .markers.snap
- .syncinfo.snap
-
-
📁 Chap02
-
📁 org.eclipse.jdt.apt.core
-
📁 org.eclipse.jdt.core
- .markers
- .markers.snap
- .syncinfo.snap
-
-
-
📁 .root
-
📁 .safetable
- 10.snap
-
-
📁 org.eclipse.core.runtime
-
📁 .settings
- Docker.prefs
- org.eclipse.buildship.ui.prefs
- org.eclipse.core.resources.prefs
- org.eclipse.debug.ui.prefs
- org.eclipse.egit.core.prefs
- org.eclipse.epp.mpc.ui.prefs
- org.eclipse.jdt.core.prefs
- org.eclipse.jdt.debug.ui.prefs
- org.eclipse.jdt.junit.prefs
- org.eclipse.jdt.launching.prefs
- org.eclipse.jdt.ui.prefs
- org.eclipse.jsch.core.prefs
- org.eclipse.jst.j2ee.webservice.ui.prefs
- org.eclipse.m2e.apt.prefs
- org.eclipse.m2e.discovery.prefs
- org.eclipse.mylyn.context.core.prefs
- org.eclipse.mylyn.monitor.ui.prefs
- org.eclipse.mylyn.tasks.ui.prefs
- org.eclipse.pde.api.tools.prefs
- org.eclipse.ui.browser.prefs
- org.eclipse.ui.ide.prefs
- org.eclipse.ui.navigator.prefs
- org.eclipse.ui.prefs
- org.eclipse.ui.workbench.prefs
- org.eclipse.wst.jsdt.ui.prefs
- org.eclipse.wst.jsdt.web.core.prefs
- org.eclipse.wst.sse.ui.prefs
- org.eclipse.wst.ws.service.policy.prefs
- org.springframework.ide.eclipse.boot.dash.prefs
- org.springframework.ide.eclipse.boot.launch.prefs
- org.springframework.ide.eclipse.boot.prefs
- org.springframework.ide.eclipse.imports.prefs
- org.springsource.ide.eclipse.commons.ui.prefs
-
-
📁 org.eclipse.datatools.connectivity
-
📁 org.eclipse.debug.core
-
📁 org.eclipse.debug.ui
-
📁 org.eclipse.e4.workbench
-
📁 org.eclipse.eclemma.core
-
📁 .execdata
-
-
📁 org.eclipse.egit.core
-
📁 .org.eclipse.egit.core.cmp
-
📁 .settings
- .project
-
-
-
📁 org.eclipse.emf.common.ui
-
📁 org.eclipse.epp.mpc.ui
-
📁 org.eclipse.equinox.p2.ui
-
📁 org.eclipse.jdt.core
- 1032664556.index
- 1046776222.index
- 1085918923.index
- 1098367511.index
- 1103990142.index
- 114257520.index
- 1259591260.index
- 1306943540.index
- 1342465706.index
- 1343725884.index
- 1406489186.index
- 1423644118.index
- 1499060772.index
- 150191461.index
- 153282544.index
- 1561259185.index
- 1587038330.index
- 1591058950.index
- 163494242.index
- 1737725865.index
- 1795320714.index
- 1802910406.index
- 1814875633.index
- 1823358352.index
- 1829605366.index
- 1855262625.index
- 1865797976.index
- 1877692097.index
- 1899050622.index
- 1901848277.index
- 1908842224.index
- 1950052445.index
- 203363936.index
- 2093080152.index
- 213132002.index
- 2158070117.index
- 2187926128.index
- 2208116219.index
- 2239392838.index
- 2270640161.index
- 2300481235.index
- 2323862626.index
- 2327230697.index
- 2361831942.index
- 2403806799.index
- 2425170697.index
- 2428421529.index
- 243173088.index
- 243444292.index
- 246872496.index
- 2574092214.index
- 2606035263.index
- 2642855571.index
- 2673762025.index
- 2687063221.index
- 2694330660.index
- 2716873423.index
- 2735274666.index
- 2762635672.index
- 2785578155.index
- 281274800.index
- 2874808635.index
- 2910265552.index
- 2922188548.index
- 2940098355.index
- 2947743441.index
- 2960267103.index
- 3005342323.index
- 3039149765.index
- 3092362395.index
- 3171200218.index
- 3185776176.index
- 3289718304.index
- 3343647032.index
- 3350778374.index
- 3368243042.index
- 3394968329.index
- 3413701618.index
- 3413725848.index
- 3463701276.index
- 3550271171.index
- 3552686602.index
- 3553503214.index
- 3554740767.index
- 3593383410.index
- 3667659376.index
- 3680454040.index
- 3691127648.index
- 376211574.index
- 3767840844.index
- 3806757576.index
- 3822504139.index
- 3830692465.index
- 3847922432.index
- 3851352355.index
- 3896498729.index
- 4019127980.index
- 4032350038.index
- 4094206136.index
- 4097592731.index
- 4141668602.index
- 4236191647.index
- 426763299.index
- 437405910.index
- 479256431.index
- 509260333.index
- 521676379.index
- 523827649.index
- 524399751.index
- 553796313.index
- 578923137.index
- 594698515.index
- 671830540.index
- 761271397.index
- 766539937.index
- 773662974.index
- 804699012.index
- 83750376.index
- 838434006.index
- 862373323.index
- 869691404.index
- 901893090.index
- 904368330.index
- 924643285.index
- 926828645.index
- 97507228.index
- 976341134.index
- assumedExternalFilesCache
- externalFilesCache
- externalLibsTimeStamps
- indexNamesMap.txt
- javaLikeNames.txt
- nonChainingJarsCache
- savedIndexNames.txt
- variablesAndContainers.dat
-
📁 org.eclipse.jdt.junit.core
-
📁 history
-
-
📁 org.eclipse.jdt.launching
-
📁 org.eclipse.jdt.ui
-
📁 org.eclipse.linuxtools.docker.core
-
📁 org.eclipse.linuxtools.docker.ui
-
📁 org.eclipse.ltk.core.refactoring
-
📁 .refactorings
-
📁 .workspace
-
📁 2025
-
📁 3
-
-
-
📁 Chap02
-
📁 2025
-
📁 3
-
-
-
-
-
📁 org.eclipse.ltk.ui.refactoring
-
📁 org.eclipse.m2e.core
-
📁 org.eclipse.m2e.logback
-
📁 org.eclipse.mylyn.context.core
-
📁 contexts
-
-
📁 org.eclipse.mylyn.github.ui
-
📁 org.eclipse.mylyn.tasks.ui
-
📁 org.eclipse.oomph.setup
-
📁 org.eclipse.oomph.setup.ui
-
📁 org.eclipse.pde.api.tools
-
📁 org.eclipse.pde.core
-
📁 .cache
-
📁 .p2
-
📁 org.eclipse.equinox.p2.engine
-
📁 profileRegistry
-
-
-
-
📁 org.eclipse.tips.ide
-
📁 org.eclipse.tm.terminal.view.ui
-
📁 .executables
-
-
📁 org.eclipse.ui.editors
-
📁 org.eclipse.ui.ide
-
📁 org.eclipse.ui.intro
-
📁 org.eclipse.ui.workbench
-
📁 org.eclipse.userstorage.oauth
-
📁 org.eclipse.wildwebdeveloper.embedder.node
-
📁 org.eclipse.wst.common.modulecore
-
📁 org.eclipse.wst.internet.cache
-
📁 org.eclipse.wst.jsdt.core
-
📁 indexes
-
📁 libraries
- externalLibsTimeStamps
- variablesAndContainers.dat
-
-
📁 org.eclipse.wst.jsdt.ui
-
📁 org.eclipse.wst.jsdt.web.core
-
📁 JSWebResourceEventManager
-
-
📁 org.eclipse.wst.server.core
-
📁 org.eclipse.wst.sse.core
-
📁 org.eclipse.wst.sse.ui
-
📁 org.eclipse.wst.xml.core
-
📁 org.springframework.ide.eclipse.boot
-
📁 installs
-
-
📁 org.springframework.ide.eclipse.boot.dash
-
📁 org.springframework.tooling.boot.ls
-
- .lock
- .log
- version.ini
-
-
📁 BookMarket
-
📁 .apt_generated
-
📁 .apt_generated_tests
-
📁 .gradle
-
📁 8.5
-
📁 checksums
-
📁 dependencies-accessors
-
📁 executionHistory
-
📁 fileChanges
-
📁 fileHashes
-
📁 vcsMetadata
- gc.properties
-
-
📁 buildOutputCleanup
-
📁 vcs-1
- file-system.probe
-
-
📁 bin
-
📁 default
-
📁 main
-
📁 com
-
📁 springboot
-
📁 interceptor
- BookMarketApplication.class
-
-
📁 logging
-
📁 static
-
📁 css
-
📁 images
-
📁 js
- welcome.html
-
-
📁 templates
- application.properties
- messages.properties
-
-
📁 test
-
📁 com
-
📁 springboot
-
-
-
-
📁 build
-
📁 classes
-
📁 java
-
📁 main
-
-
-
📁 generated
-
📁 sources
-
📁 annotationProcessor
-
📁 java
-
📁 main
-
-
-
📁 headers
-
📁 java
-
📁 main
-
-
-
-
-
📁 tmp
-
📁 compileJava
-
-
-
📁 gradle
-
📁 wrapper
-
-
📁 src
-
📁 main
-
📁 java
-
📁 com
-
📁 springboot
-
📁 interceptor
- BookMarketApplication.java
-
-
-
📁 resources
-
📁 logging
-
📁 static
-
📁 css
-
📁 images
-
📁 js
- welcome.html
-
-
📁 templates
- application.properties
- messages.properties
-
-
-
📁 test
-
📁 java
-
📁 com
-
📁 springboot
-
-
-
-
- .classpath
- .gitignore
- .project
- build.gradle
- gradlew
- gradlew.bat
- HELP.md
- settings.gradle
-
- .project
- Title.png
package com.springboot.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; // Page 추가
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute; // ModelAttribute 추가
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; // RequestParam 추가
import com.springboot.domain.Board;
import com.springboot.domain.BoardFormDto;
import com.springboot.domain.Member; // Member 클래스 사용
import com.springboot.service.BoardService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import jakarta.validation.Valid;
@Controller
@RequestMapping(value = "/board")
public class BoardController {
@Autowired
private BoardService boardService;
// 전체 게시글 목록 가져오기
@GetMapping("/list")
public String viewHomePage (Model model) { //
return viewPage(1, "id", "desc", model); // 기본 정렬 id 기준 내림차순
}
// 전체 게시글 가져오기 (페이지네이션 및 정렬)
@GetMapping("/page")
public String viewPage (@RequestParam("pageNum") int pageNum, @RequestParam("sortField") String sortField, @RequestParam("sortDir") String sortDir, Model model) { //
Page<Board> page = boardService.listAll(pageNum, sortField, sortDir); //
List<Board> listBoard = page.getContent(); //
model.addAttribute("currentPage", pageNum); //
model.addAttribute("totalPages", page.getTotalPages()); //
model.addAttribute("totalItems", page.getTotalElements()); //
model.addAttribute("sortField", sortField); //
model.addAttribute("sortDir", sortDir); //
model.addAttribute("reverseSortDir", sortDir.equals("asc") ? "desc": "asc"); //
model.addAttribute("boardList", listBoard); //
return "board/list"; //
}
// 게시글 글쓰기 페이지 출력하기
@GetMapping("/write")
public String post(Model model, HttpSession session) { //
// 로그인 정보를 가져와서 작성자 ID를 미리 채우거나 확인
Member member = (Member) session.getAttribute("userLoginInfo");
if (member == null) {
// 로그인되어 있지 않으면 로그인 페이지로 리다이렉트 또는 에러 처리
return "redirect:/login";
}
model.addAttribute("boardFormDto", new BoardFormDto());
return "board/write"; //
}
// 게시글 글쓰기 저장하기
@PostMapping("/write")
public String write (@ModelAttribute BoardFormDto boardDto, HttpSession session) { //
Member member = (Member) session.getAttribute("userLoginInfo");
if (member == null) {
return "redirect:/login"; // 로그인 정보 없으면 리다이렉트
}
boardDto.setWriterid(member.getMemberId()); // 세션에서 로그인 ID 설정
boardDto.setWriter(member.getName()); // 세션에서 로그인 이름 설정
boardService.savePost (boardDto); //
return "redirect:/board/list"; //
}
// 게시글 상세 보기 (또는 수정 페이지 로드)
@GetMapping("/view/{id}")
public String requestUpdateMemberForm(@PathVariable(name = "id") Long id, HttpServletRequest httpServletRequest, Model model){ //
Board board = boardService.getBoardById(id); //
// Board Entity를 DTO로 변환하여 뷰에 전달
BoardFormDto boardFormDto = BoardFormDto.builder()
.id(board.getId())
.writerid(board.getWriterid())
.writer(board.getWriter())
.title(board.getTitle())
.content(board.getContent())
.createdDate(board.getCreatedDate())
.modifiedDate(board.getModifiedDate())
.build();
model.addAttribute("boardFormDto", boardFormDto); //
HttpSession session = httpServletRequest.getSession(true); //
Member member = (Member) session.getAttribute("userLoginInfo"); //
model.addAttribute("buttonOk", false); // 수정/삭제 버튼 표시 여부
if(member != null && board.getWriterid().equals(member.getMemberId())) { //
model.addAttribute("buttonOk", true); //
}
return "board/view"; //
}
// 게시글 수정하기 (POST)
@PostMapping("/update")
public String submitUpdateMember (@Valid @ModelAttribute BoardFormDto boardDto, BindingResult bindingResult, Model model, HttpSession session) { //
if(bindingResult.hasErrors()) { //
// 에러 발생 시 작성자 ID, 이름 다시 DTO에 설정 (세션에서)
Member member = (Member) session.getAttribute("userLoginInfo");
if (member != null) {
boardDto.setWriterid(member.getMemberId());
boardDto.setWriter(member.getName());
}
model.addAttribute("buttonOk", true); // 수정 페이지이므로 버튼 계속 표시
return "board/view"; //
}
try { //
// 수정 시에도 작성자 ID와 이름을 세션에서 가져와 DTO에 설정 (보안 강화)
Member member = (Member) session.getAttribute("userLoginInfo");
if (member == null || !boardDto.getWriterid().equals(member.getMemberId())) {
throw new IllegalStateException("수정 권한이 없습니다."); // 권한 없음 예외 처리
}
boardDto.setWriterid(member.getMemberId());
boardDto.setWriter(member.getName());
boardService.savePost (boardDto); //
} catch (IllegalStateException e) { //
model.addAttribute("errorMessage", e.getMessage()); //
model.addAttribute("buttonOk", true); // 수정 페이지이므로 버튼 계속 표시
return "board/view"; //
}
return "redirect:/board/list"; //
}
// 게시글 삭제하기
@GetMapping("/delete/{id}")
public String deleteOrder (@PathVariable(name = "id") Long id, HttpSession session) { //
Board board = boardService.getBoardById(id);
Member member = (Member) session.getAttribute("userLoginInfo");
if (member == null || !board.getWriterid().equals(member.getMemberId())) {
throw new IllegalStateException("삭제 권한이 없습니다."); // 권한 없음 예외 처리
}
boardService.deleteBoardById(id); //
return "redirect:/board/list"; //
}
}