반응형
2024_0715_Visit_Ajax_Mybatis_MyMVC [ADD] 기존 Visit Project MVC Pattern으로 변경
GitHub - chaSunil/FirstProject: 1차 프로젝트
1차 프로젝트. Contribute to chaSunil/FirstProject development by creating an account on GitHub.
github.com
Outline을 띄워놓고 작업하는 것이 유리하다(메소드 한눈에 확인가능)
MVC 기본설정 하기
xml 변경
<servlet>
<servlet-name>FrontController</servlet-name>
<servlet-class>controller.FrontController</servlet-class>
<init-param>
<param-name>action</param-name>
<param-value>action.controller.VisitController</param-value>
</init-param>
</servlet>
POJO 생성하기(Filter가 Encoding 종류를 받아주고 있으니, Encoding과 Dispatcher 형식을 지우고 복사한다)
public class VisitController {
// 전체조회
@RequestMapping("/visit/list.do")
public String list(HttpServletRequest request, HttpServletResponse response) {
// 1. parameter 받기
String search = request.getParameter("search");
String search_text = request.getParameter("search_text");
// search 값이 안들어왔을때 그냥 default로 전체보기로 보여주겠다.(안넣어주면 nullPointException)
if(search==null) {
search="all";
}
int nowPage = 1;
try {
nowPage = Integer.parseInt(request.getParameter("page"));
} catch (Exception e) {
// TODO: handle exception
}
// start/end
int BLOCK_LIST = 2;
int start = (nowPage-1) * BLOCK_LIST + 1;
int end = start + BLOCK_LIST - 1;
// 검색조건을 담을 맵
Map<String, Object> map = new HashMap<String, Object>();
map.put("start",start);
map.put("end",end);
// 이름 + 내용
if(search.equals("name_content")) {
map.put("name", search_text); // 데이터를 찾아오는 값에 이름에다가두 넣구우
map.put("content", search_text); // 내용에다가두 넣구우
} else if(search.equals("name")) { // 문자열 비교는 무조건 equals //search=="name"(X)
// 이름
map.put("name", search_text);
} else if(search.equals("content")) {
// 내용
map.put("content", search_text);
}
// 방명록 데이터 가져오기
List<VisitVo> list = VisitDao.getInstance().selectList(map);
// 전체 게시물수
int rowTotal = VisitDao.getInstance().selectRowTotal(map);
// 검색정보 filter : search_filter = "search=name&search_text=길동"
String search_filter = String.format("search=%s&search_text=%s", search, search_text);
// pageMenu 만들기
String pageMenu = Paging.getPaging("list.do", // pageURL
search_filter,
nowPage, // 현재페이지
rowTotal, // 전체페이지
MyCommon.Visit.BLOCK_LIST, // 한화면에 보여질 게시물 수
MyCommon.Visit.BLOCK_PAGE); // 한화면에 보여질 페이지 수
// request binding
request.setAttribute("list", list);
request.setAttribute("pageMenu", pageMenu);
return "visit_list.jsp";
}// end:list()
(기존에 있던 WebServlet 경로에 list.do 주석처리, 겹치기 때문이다)
insert_form 같이 일일이 Servlet을 만들었던 것이 굉장히 간결해진다(Dispatcher 방식)
// 입력폼 띄우기
@RequestMapping("/visit/insert_form.do")
public String insert_form(HttpServletRequest request, HttpServletResponse response) {
return "visit_insert_form.jsp";
}// end:insert_form()
Redirect로 값을 넘겨주는 방법!!!
// 입력(등록)하기
@RequestMapping("/visit/insert.do")
public String insert(HttpServletRequest request, HttpServletResponse response) {
// 1. parameter(전달인자) 받기
String name = request.getParameter("name");
String content = request.getParameter("content").replaceAll("\n", "<br>");
String pwd = request.getParameter("pwd");
// 2. ip 정보 받기
String ip = request.getRemoteAddr();
// 3. VisitVo 포장
// vo에서 오버로드 된 생성자 새로 추가
VisitVo vo = new VisitVo(name, content, pwd, ip);
// 4. DBinsert
int res = VisitDao.getInstance().insert(vo);
// 내가 원하는것은 Redirect이다.
// return "visit_list.jsp"; (기존 Dispatcher 형식)
return "redirect:list.do";
}
★
★
★
★
★Redirect가 FrontController에서 전달되어 jsp에 뿌리는 과정
★
★
★
★
★ ResponseBody 확인하는 방법
// 입력(등록)하기
@RequestMapping(value="/visit/check_pwd.do",produces="application/json:charset=utf-8")
@ResponseBody
public String check_pwd(HttpServletRequest request, HttpServletResponse response) {
// parameter 받기
int idx = Integer.parseInt(request.getParameter("idx"));
String c_pwd = request.getParameter("c_pwd");
// idx에 해당되는 게시물 1건을 얻어온다
VisitVo vo = VisitDao.getInstance().selectOne(idx);
// 비밀번호 비교
boolean bResult = vo.getPwd().equals(c_pwd);
// JSON Data 생성 전송 : {"result":true}
String json = String.format("{\"result\":%b}", bResult);
return json; // 이렇게 사용할시 forward 되어버린다 jsp가 아니기 때문에 505 error
}
ResponseBody를 FrontController를 가져오는 구조
전체코드
package action.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import action.util.MyCommon;
import action.util.Paging;
import annotation.RequestMapping;
import annotation.ResponseBody;
import dao.VisitDao;
import db.vo.VisitVo;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class VisitController {
// 전체조회
@RequestMapping("/visit/list.do")
public String list(HttpServletRequest request, HttpServletResponse response) {
// 1. parameter 받기
String search = request.getParameter("search");
String search_text = request.getParameter("search_text");
// search 값이 안들어왔을때 그냥 default로 전체보기로 보여주겠다.(안넣어주면 nullPointException)
if(search==null) {
search="all";
}
int nowPage = 1;
try {
nowPage = Integer.parseInt(request.getParameter("page"));
} catch (Exception e) {
// TODO: handle exception
}
// start/end
int BLOCK_LIST = 2;
int start = (nowPage-1) * BLOCK_LIST + 1;
int end = start + BLOCK_LIST - 1;
// 검색조건을 담을 맵
Map<String, Object> map = new HashMap<String, Object>();
map.put("start",start);
map.put("end",end);
// 이름 + 내용
if(search.equals("name_content")) {
map.put("name", search_text); // 데이터를 찾아오는 값에 이름에다가두 넣구우
map.put("content", search_text); // 내용에다가두 넣구우
} else if(search.equals("name")) { // 문자열 비교는 무조건 equals //search=="name"(X)
// 이름
map.put("name", search_text);
} else if(search.equals("content")) {
// 내용
map.put("content", search_text);
}
// 방명록 데이터 가져오기
List<VisitVo> list = VisitDao.getInstance().selectList(map);
// 전체 게시물수
int rowTotal = VisitDao.getInstance().selectRowTotal(map);
// 검색정보 filter : search_filter = "search=name&search_text=길동"
String search_filter = String.format("search=%s&search_text=%s", search, search_text);
// pageMenu 만들기
String pageMenu = Paging.getPaging("list.do", // pageURL
search_filter,
nowPage, // 현재페이지
rowTotal, // 전체페이지
MyCommon.Visit.BLOCK_LIST, // 한화면에 보여질 게시물 수
MyCommon.Visit.BLOCK_PAGE); // 한화면에 보여질 페이지 수
// request binding
request.setAttribute("list", list);
request.setAttribute("pageMenu", pageMenu);
return "visit_list.jsp";
}// end:list()
// 입력폼 띄우기
@RequestMapping("/visit/insert_form.do")
public String insert_form(HttpServletRequest request, HttpServletResponse response) {
return "visit_insert_form.jsp";
}// end:insert_form()
// 입력(등록)하기
@RequestMapping("/visit/insert.do")
public String insert(HttpServletRequest request, HttpServletResponse response) {
// 1. parameter(전달인자) 받기
String name = request.getParameter("name");
String content = request.getParameter("content").replaceAll("\n", "<br>");
String pwd = request.getParameter("pwd");
// 2. ip 정보 받기
String ip = request.getRemoteAddr();
// 3. VisitVo 포장
// vo에서 오버로드 된 생성자 새로 추가
VisitVo vo = new VisitVo(name, content, pwd, ip);
// 4. DBinsert
int res = VisitDao.getInstance().insert(vo);
// 내가 원하는것은 Redirect이다.
// return "visit_list.jsp"; (기존 Dispatcher 형식)
return "redirect:list.do";
// FrontController에게 반환
}// end:insert
// 입력(등록)하기
@RequestMapping(value="/visit/check_pwd.do",produces="application/json:charset=utf-8")
@ResponseBody
public String check_pwd(HttpServletRequest request, HttpServletResponse response) {
// parameter 받기
int idx = Integer.parseInt(request.getParameter("idx"));
String c_pwd = request.getParameter("c_pwd");
// idx에 해당되는 게시물 1건을 얻어온다
VisitVo vo = VisitDao.getInstance().selectOne(idx);
// 비밀번호 비교
boolean bResult = vo.getPwd().equals(c_pwd);
// JSON Data 생성 전송 : {"result":true}
String json = String.format("{\"result\":%b}", bResult);
return json; // 이렇게 사용할시 forward 되어버린다 jsp가 아니기 때문에 505 error
}// end:check_pwd
// 삭제하기
@RequestMapping("/visit/delete.do")
public String delete(HttpServletRequest request, HttpServletResponse response) {
int idx = Integer.parseInt(request.getParameter("idx"));
String no = request.getParameter("no"); // 삭제할 글의 순서
// DB 삭제
int res = VisitDao.getInstance().delete(idx);
return "redirect:list.do";
}// end:delete
// 수정폼으로 연결
@RequestMapping("/visit/modify_form.do")
public String modify_form(HttpServletRequest request, HttpServletResponse response) {
int idx = Integer.parseInt(request.getParameter("idx"));
// idx에 해당되는 게시물 1건 얻어오기
VisitVo vo = VisitDao.getInstance().selectOne(idx);
// textarer \n기능처리 : content <br> -> \n 변환
String content = vo.getContent().replaceAll("<br>", "\n");
vo.setContent(content);
// request binding(JSP에게 vo의 데이터를 넘겨줘야 하기 때문에 setAttribute 한다)
request.setAttribute("vo", vo);
return "visit_modify_form.do";
}// end:modify_form
// 수정하기
@RequestMapping("/visit/modify.do")
public String modify(HttpServletRequest request, HttpServletResponse response) {
// parameter 받기
int idx = Integer.parseInt(request.getParameter("idx"));
// String no = request.getParameter("no");
String name = request.getParameter("name");
String content = request.getParameter("content").replaceAll("\n", "<br>");
String pwd = request.getParameter("pwd");
String page = request.getParameter("page");
String search = request.getParameter("search");
String search_text = request.getParameter("search_text");
// ip주소 얻어온다
String ip = request.getRemoteAddr();
// VisitVo 포장
VisitVo vo = new VisitVo(idx, name, content, pwd, ip);
// DB 수정하기
int res = VisitDao.getInstance().update(vo);
return "redirect:list.do";
}// end:modify
}
MVC Pattern으로 수정하기 끝
반응형