최종적인 파일 구조

 

com.springbook.view.controller 의 컨트롤러는 이제 사용하지 않는다.

각 컨트롤러에 이젠 스프링에서 제공하는 컨트롤러와 ModelAndView 서블릿을 임포트해서 사용한다.

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

 

 

전체 코드

GetBoardController

package com.springbook.view.user;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;


public class GetBoardController implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		System.out.println("글 상세 조회 처리");
		
		String seq = request.getParameter("seq");

		BoardVO vo = new BoardVO();
		BoardDAO dao = new BoardDAO();
		
		vo.setSeq(Integer.parseInt(seq));
		
		BoardVO board = dao.getBoard(vo);
		
		// 데이터를 session에 담아 최종적으로 "getBoard.jsp"로 페이지 이동
		//HttpSession session = request.getSession();
		//session.setAttribute("board", board);
		
		//return "getBoard";
		
		ModelAndView mav = new ModelAndView();
		
		mav.addObject("board", board); // request 영역에 저장된다
		mav.setViewName("getBoard");

		return mav;
	}

}

 

GetBoardListController

package com.springbook.view.user;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;


public class GetBoardListController implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("글 목록 검색 처리");
		
		BoardVO vo = new BoardVO();
		BoardDAO dao = new BoardDAO();
		
		List<BoardVO> boardList = dao.getBoardList(vo);
		
		// 목록을 session에 담아 최종적으로 "getBoardList.jsp"로 페이지 이동
		// HttpSession session = request.getSession();
		// session.setAttribute("boardList", boardList);
		
		// return "getBoardList";
		
		ModelAndView mav = new ModelAndView();
		
		mav.addObject("boardList", boardList); // request 영역에 저장된다
		//mav.setViewName("getBoardList.jsp"); // WEB-INF/board/getBoardList.jsp.jsp
		mav.setViewName("getBoardList"); // WEB-INF/board/getBoardList.jsp
		
		return mav;
	}

}

 

InsertBoardController

package com.springbook.view.user;

import java.io.UnsupportedEncodingException;

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

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;


public class InsertBoardController implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		System.out.println("글등록 처리");
		
		try {
			request.setCharacterEncoding("UTF-8");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		String title = request.getParameter("title");
		String writer = request.getParameter("writer");
		String content = request.getParameter("content");

		BoardDAO dao = new BoardDAO();
		BoardVO vo = new BoardVO();
		
		vo.setTitle(title);
		vo.setWriter(writer);
		vo.setContent(content);
		
		dao.insertBoard(vo);
		
		
		ModelAndView mav = new ModelAndView();
		
		// mav.setViewName("getBoardList.do");
		mav.setViewName("redirect:getBoardList.do");
		
		return mav;
		
		// return "getBoardList.do";
	}

}

 

LoginController

package com.springbook.view.user;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import com.springbook.biz.user.UserVO;
import com.springbook.biz.user.impl.UserDAO;

public class LoginController implements Controller {

	// 표준화
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

		System.out.println("로그인 처리");

		String id = request.getParameter("id");
		String password = request.getParameter("password");

		UserVO vo = new UserVO();
		vo.setId(id);
		vo.setPassword(password);

		UserDAO dao = new UserDAO();
		UserVO user = dao.getUser(vo);

		// 기존에는 세션에 필요한 데이터를 담았다.
		// 뷰 정보는 리턴 값에 담음.
		// 스프링 컨트롤러는 ModelAndView로 위 두 가지 일을 한번에 처리한다.
		ModelAndView mav = new ModelAndView();

		if (user != null) {
			mav.setViewName("redirect:getBoardList.do"); // WEB-INF/board/getBoardList.do.jsp 
			// redirect:는 viewResolver를 무시한다. 컨트롤러에 설정된 do로 가야하기 때문에 사용
		} else {
			mav.setViewName("redirect:login.jsp"); // WEB-INF/board/login.jsp.jsp
		}

		return mav;

//		   if(user != null) {
//			  HttpSession session = request.getSession();
//			  session.setAttribute("id", vo.getId());
//		      return "getBoardList.do"; 
//		   }else{
//		     return "login"; // 실패하면 이동할 대상, 여기서는 문자열로만 받았다
//		   }

	}

}

 

LogoutController

package com.springbook.view.user;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;


public class LogoutController implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("로그아웃 처리");
		
		//HttpSession session = request.getSession();
		//session.invalidate();
		
		ModelAndView mav = new ModelAndView();
		
		mav.setViewName("redirect:login.jsp");
		
		return mav;

	}

}

 

UpdateBoardController

package com.springbook.view.user;

import java.io.UnsupportedEncodingException;

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

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;

public class UpdateBoardController implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("글수정 처리");
		
		try {
			request.setCharacterEncoding("UTF-8");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		String seq = request.getParameter("seq");
		String title = request.getParameter("title");
		String content = request.getParameter("content");
		
		BoardDAO dao = new BoardDAO();
		BoardVO vo = new BoardVO();
		
		vo.setSeq(Integer.parseInt(seq));
		vo.setTitle(title);
		vo.setContent(content);
		
		dao.updateBoard(vo); 
		
		ModelAndView mav = new ModelAndView();
		
		mav.setViewName("redirect:getBoardList.do");
		
		return mav;
		
		// return "getBoardList.do";
	}

}

 

DeleteBoardController

package com.springbook.view.user;

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

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;


public class DeleteBoardController implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		System.out.println("글삭제 처리");
		
		String seq = request.getParameter("seq");

		BoardDAO dao = new BoardDAO();
		BoardVO vo = new BoardVO();
		
		vo.setSeq(Integer.parseInt(seq));
		
		dao.deleteBoard(vo);
		
		ModelAndView mav = new ModelAndView();
		
		mav.setViewName("redirect:getBoardList.do");
		
		return mav;
	}

}

 

main> wedapp> WEB-INF> config> presentation-layer.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean
		class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/login.do">login</prop>
				<prop key="/getBoardList.do">getBoardList</prop>
				<prop key="/getBoard.do">getBoard</prop>
				<prop key="/insertBoard.do">insertBoard</prop>
				<prop key="/updateBoard.do">updateBoard</prop>
				<prop key="/deleteBoard.do">deleteBoard</prop>
				<prop key="/logout.do">logout</prop>
			</props>
		</property>
	</bean>

	<bean id="login" class="com.springbook.view.user.LoginController"></bean>
	<bean id="getBoardList" class="com.springbook.view.user.GetBoardListController"></bean>
	<bean id="getBoard" class="com.springbook.view.user.GetBoardController"></bean>
	<bean id="insertBoard" class="com.springbook.view.user.InsertBoardController"></bean>
	<bean id="updateBoard" class="com.springbook.view.user.UpdateBoardController"></bean>
	<bean id="deleteBoard" class="com.springbook.view.user.DeleteBoardController"></bean>
	<bean id="logout" class="com.springbook.view.user.LogoutController"></bean>
	
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/board/"></property>
	<property name="suffix" value=".jsp"></property>
	</bean>
</beans>

 


 

어노테이션을 사용한 스프링 MVC 사용

어노테이션 컨트롤러 사용하기

 

어노테이션 방식의 bean 등록을 해야 한다.

main> wedapp> WEB-INF> config> presentation-layer.xml 에서

Namespace에 들어가 context 체크

getBoard.jsp와 getBoardList을 다시 webapp으로 옮기기

viewResolver를 통해서 WEB-INF 안의 파일을 사용할 수 있었지만 이젠 주석 처리를 해 사용할 수 없으므로 파일을 옮겨야 한다.

 

수정된 presentation-layer.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<!-- 스캔태그를 사용해서 스캔처리, 모두 어노테이션으로 해결 -->
	<context:component-scan base-package="com.springbook.view"></context:component-scan>

</beans>

 

 

InsertBoardController 만 스프링 컨트롤러를 어노테이션으로 수정했을 때 동작이 잘 되는지 확인해보았다. 값이 잘 들어가는 모습이다.

 

 

수정된 InsertBoardController

package com.springbook.view.user;

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;

@Controller
public class InsertBoardController {

	// bean, mapping 객체의 역할을 아래 어노테이션이 해결
	@RequestMapping(value = "/insertBoard.do")
	public void insertBoard(HttpServletRequest request) {
		
		System.out.println("글등록 처리");

// 필터부분도 사용할 필요가 없다		
//		try {
//			request.setCharacterEncoding("UTF-8");
//		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		
		String title = request.getParameter("title");
		String writer = request.getParameter("writer");
		String content = request.getParameter("content");

		BoardDAO dao = new BoardDAO();
		BoardVO vo = new BoardVO();
		
		vo.setTitle(title);
		vo.setWriter(writer);
		vo.setContent(content);
		
		dao.insertBoard(vo);
		
		
		
		
// ---------------------------------------------------
// 어노테이션을 사용하지 않고 스프링 컨트롤러를 사용했을 때 ModelAndView를 사용
		
//		ModelAndView mav = new ModelAndView();
//		mav.setViewName("redirect:getBoardList.do");
//		return mav;
		
	}

}

 

스프링 어노테이션을 사용해 더 간편하게 수정된 InsertBoardController

package com.springbook.view.user;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;

@Controller
public class InsertBoardController {

	// bean, mapping 객체의 역할을 아래 어노테이션이 해결
	@RequestMapping(value = "/insertBoard.do")
//	public void insertBoard(HttpServletRequest request) {
	public String insertBoard(BoardVO vo, BoardDAO dao) { // BoardVO vo -> command 객체 (spring container가 관리)
		// spring container는 BoardVO의 setter 메소드에 설정된 이름을 이용해 insertBoard.jsp의 id로 파라매터를 받아 처리해준다
		// setter 메소드와 id값 파라메터의 이름이 일치해야 한다는 것을 전제로 한다. 
		
		System.out.println("글 등록 처리");
		
		dao.insertBoard(vo);
		return "redirect:getBoardList.do";
		
	}

}

 

return "redirect:getBoardList.do"; 

// 기존에는 forward한 방식으로 되어 있어 새로고침하면 계속 새 글이 등록됨.
// 때문에 redirect: 를 이용해 새로운 페이지를 요청해 새로고침해도 새 글이 등록 되지 않게 처리

 

 

 

스프링 어노테이션을 사용해 더 간편하게 수정된 GetBoardListController.java

package com.springbook.view.user;

import java.util.List;

//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;

@Controller
public class GetBoardListController  {

	@RequestMapping(value = "/getBoardList.do")
	public ModelAndView getBoardList(BoardVO vo, BoardDAO dao, ModelAndView mav) {
		System.out.println("글 목록 검색 처리");
		
		mav.addObject("boardList", dao.getBoardList(vo));
		mav.setViewName("getBoardList.jsp"); 
		return mav;
	}

}

이렇게 수정 후 insertBoard.jsp 를 실행해 글을 올리면 목록에 잘 등록이 되는 것을 볼 수 있다.

 

스프링 어노테이션을 사용해 더 간편하게 수정된 GetBoardController.java

package com.springbook.view.user;

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

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;

@Controller
public class GetBoardController{

	@RequestMapping(value = "/getBoard.do")
	public ModelAndView getBoard(BoardVO vo, BoardDAO dao, ModelAndView mav) {
		
		System.out.println("글 상세 조회 처리");
		
		mav.addObject("board", dao.getBoard(vo)); // request 영역에 저장된다
		mav.setViewName("getBoard.jsp");
		return mav;
		
	}

}

 

스프링 어노테이션을 사용해 더 간편하게 수정된 updateBoardController.java

package com.springbook.view.user;

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

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;

@Controller
public class UpdateBoardController {

	@RequestMapping(value = "/updateBoard.do")
	public String updateBoard(BoardVO vo, BoardDAO dao) {
		System.out.println("글수정 처리");
		
		dao.updateBoard(vo); 
		
		return "redirect:getBoardList.do";
	}

}

 

스프링 어노테이션을 사용해 더 간편하게 수정된 DeleteBoardController.java

package com.springbook.view.user;

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

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;

@Controller
public class DeleteBoardController {

	@RequestMapping(value = "/deleteBoard.do")
	public String deleteBoard(BoardVO vo, BoardDAO dao) {
		
		System.out.println("글삭제 처리");
		
		dao.deleteBoard(vo);
		
		return "redirect:getBoardList.do";
	}

}

 

스프링 어노테이션을 사용해 더 간편하게 수정된 LoginController.java

package com.springbook.view.user;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.springbook.biz.user.UserVO;
import com.springbook.biz.user.impl.UserDAO;

@Controller
public class LoginController {

	// 표준화
	@RequestMapping(value = "/login.do")
	public String login(UserVO vo, UserDAO userDAO) {

		System.out.println("로그인 처리");
		
		if(userDAO.getUser(vo) != null) {
			return "redirect:getBoardList.do";
		} else {
			return "login.jsp";
		}


	}

}

 

스프링 어노테이션을 사용해 더 간편하게 수정된 LogoutController.java

package com.springbook.view.user;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.springbook.biz.user.UserVO;
import com.springbook.biz.user.impl.UserDAO;


@Controller
public class LogoutController {

	@RequestMapping(value = "/logout.do")
	public String logout(HttpSession session) {
		
		System.out.println("로그아웃 처리");
		session.invalidate();
		
		return "login.jsp";

	}

}

로그아웃은 session에 있는 아이디 정보를 지워야 함으로 HttpSession session 을 사용해야 한다.

invalidate : 무효화 하다

 


forward 방식과 redirect 방식의 차이

 

forward 방식은 URL에 변화가 생기지 않는다.

서버 내부적으로 Controller가 View에게 작업을 넘기고 View가 jsp 파일을 렌더링하여 결과 페이지를 클라이언트에게 넘긴다. 이를 클라이언트는 알지 못하고 따라서 URL 요청이 바뀌지 않음.

redirect 방식은 URL에 변화가 생긴다.

새로운 경로로 요청을 보내 새로운 request, response가 생긴다.

DB에 변화를 주는 작업 (회원가입, 게시판 글쓰기 등) redirect

시스템 변화 X (단순 조회, 검색) forward

 

출처) 

 

[Servlet & JSP] Redirect vs forward 방식 비교

[Servlet & JSP] Redirect vs forward 방식 비교 현재 JSP & Servlet을 활용한 WEB 개발에 대해서 전체적으로 학습을 진행하고 있습니다. 그중에서 Redirect와 foward 개념에 대해서 정리해보고자 합니다. 또한 간단

kbj96.tistory.com


 

통합 컨트롤러

 

BoardController.java

package com.springbook.view.board;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;

@Controller
public class BoardController {
// 통합 컨트롤러

	// 글 등록
	@RequestMapping(value = "/insertBoard.do")
	public String insertBoard(BoardVO vo, BoardDAO boardDAO) {
		boardDAO.insertBoard(vo);
		return "redirect:getBoardList.do";
	}
	
	// 글 수정
	@RequestMapping(value = "/updateBoard.do")
	public String updateBoard(BoardVO vo, BoardDAO boardDAO) {
		boardDAO.updateBoard(vo);
		return "redirect:getBoardList.do";
	}
	
	// 글 삭제
	@RequestMapping(value = "/deleteBoard.do")
	public String deleteBoard(BoardVO vo, BoardDAO boardDAO) {
		boardDAO.deleteBoard(vo);
		return "redirect:getBoardList.do";
	}
	
	// 글 상세조회
	@RequestMapping(value = "/getBoard.do")
	public ModelAndView getBoard(BoardVO vo, BoardDAO boardDAO, ModelAndView mav) {
		mav.addObject("board", boardDAO.getBoard(vo)); // Model 정보 저장
		mav.setViewName("getBoard.jsp"); // View 정보 저장
		return mav;
	}
	
	// 글 목록 검색
	@RequestMapping(value = "/getBoardList.do")
	public ModelAndView getBoardList(BoardVO vo, BoardDAO boardDAO, ModelAndView mav) {
		mav.addObject("boardList", boardDAO.getBoardList(vo)); // Model 정보 저장
		mav.setViewName("getBoardList.jsp"); // View 정보 저장
		return mav;
	}
	
}

기존 컨트롤러 다 주석 처리 후

이 컨트롤러로 동작 시켜 보면 잘 되는 것을 확인할 수 있다.

 


doget 방식과 dopost 방식

get 방식은 화면을 띄워주고 post 방식은 데이터를 처리

 

커맨드 객체 (Command Object)

  • HttpServletRequest를 통해 들어온 요청 값을 setter 메서드를 통해 객체에 정의되어있는 속성에 바인딩이 되는 객체
  • DTO, VO 클래스, setter 메서드를 가지고 있어야 한다.

= 클라이언트가 전달해주는 피라미터 데이터를 주입 받기 위해 사용

HttpServletRequest 나 RequestParam 을 사용하는 것보다 훨씬 간단하다.


 

요청을 통해 로그인 페이지 실행

 

loginController.java

package com.springbook.view.user;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.springbook.biz.user.UserVO;
import com.springbook.biz.user.impl.UserDAO;

@Controller
public class LoginController {

	// 표준화
	@RequestMapping(value = "/login.do", method = RequestMethod.GET)
	// @ModelAttribute("이름") 로 이름을 지정해줄 수도 있다. 
	public String loginView(@ModelAttribute("userVO") UserVO vo) { // UserVO vo 로 생성된 커맨드 객체는 request 영역에 저장, 객체 저장명 -> userVO
		System.out.println("로그인 화면으로 이동...");
		vo.setId("test");
		vo.setPassword("test1234");
		return "login.jsp";  // login.jsp가 실행될 때  setId, setPassword 값을 쓸 수있다 
	}
	
	
	@RequestMapping(value = "/login.do", method = RequestMethod.POST)
	public String login(UserVO vo, UserDAO userDAO, HttpSession session) {
		System.out.println("로그인 인증 처리...");
		if (userDAO.getUser(vo) != null) {
			// 로그인 유무 체크하기
			session.setAttribute("id", userDAO.getUser(vo).getId());
			session.setAttribute("userName", userDAO.getUser(vo).getName());
			return "getBoardList.do";
		}else {
			return "login.jsp";
		}
	}
	
	
	
	
//	public String login(UserVO vo, UserDAO userDAO) {
//
//		System.out.println("로그인 처리");
		
//		if(userDAO.getUser(vo) != null) {
//			return "redirect:getBoardList.do";
//		} else {
//			return "login.jsp";
//		}

}

 

index.jsp

<%@ 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>
	<center>
		<h1>게시판 프로그램</h1>
		<hr>
		<a href="login.do">로그인</a>
		<br> <br> <br>
		<a href="getBoardList.do">글 목록 바로가기</a>
		<hr>
	</center>
</body>
</html>

 

 

 

효율성을 높이기 위해 ModelAndView 사용 대신 Model 을 사용한 컨트롤러

BoardController.java

package com.springbook.view.board;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;

@Controller
public class BoardController {
// 통합 컨트롤러

	// 글 등록
	@RequestMapping(value = "/insertBoard.do")
	public String insertBoard(BoardVO vo, BoardDAO boardDAO) {
		boardDAO.insertBoard(vo);
		return "redirect:getBoardList.do";
	}
	
	// 글 수정
	@RequestMapping(value = "/updateBoard.do")
	public String updateBoard(BoardVO vo, BoardDAO boardDAO) {
		boardDAO.updateBoard(vo);
		return "redirect:getBoardList.do";
	}
	
	// 글 삭제
	@RequestMapping(value = "/deleteBoard.do")
	public String deleteBoard(BoardVO vo, BoardDAO boardDAO) {
		boardDAO.deleteBoard(vo);
		return "redirect:getBoardList.do";
	}
	
	// 글 상세조회
	@RequestMapping(value = "/getBoard.do")
	public String getBoard(BoardVO vo, BoardDAO boardDAO, Model model) {
		
		model.addAttribute("board", boardDAO.getBoard(vo));
		return "getBoard.jsp";
	}
	
	// 글 목록 검색
	@RequestMapping(value = "/getBoardList.do")
	public String getBoardList(BoardVO vo, BoardDAO boardDAO, Model model) {
		
		model.addAttribute("boardList", boardDAO.getBoardList(vo));
		return "getBoardList.jsp";
	}
	
}

 

login.jsp

<%@ 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>
	<center>
		<form action="login.do" method="post">
			<table border="1" callpadding="0" cellspacing="0">
				<tr>
					<td bgcolor="orange">아이디</td>
					<td>
						<input type="text" name="id" value="${userVO.id }">
					</td>
				</tr>
				<tr>
					<td bgcolor="orange">비밀번호</td>
					<td>
						<input type="password" name="password" value="${userVO.password }">
					</td>
				</tr>
				<tr>
					<td colspan="2" align="center">
						<input type="submit" value="로그인"></td>
				</tr>
			</table>
		</form>
	</center>
</body>
</html>

 

 

커멘드 객체가 아닌 경우, 검색 처리

 

BoardController에서)

	// 글 목록 검색
	// 커멘드 객체가 아닌 경우
	@RequestMapping(value = "/getBoardList.do")
	public String getBoardList(@RequestParam(value = "searchCondtion",defaultValue = "TITLE",required = false) String condition,
			@RequestParam(value = "searchKeyword",defaultValue = "CONTENT",required = false) String keyword,
			BoardVO vo, BoardDAO boardDAO, Model model) {
		
		System.out.println("검색 조건" + condition);
		System.out.println("검색 단어" + keyword);
		
		model.addAttribute("boardList", boardDAO.getBoardList(vo));
		return "getBoardList.jsp";
	}

 


@ModelAttribute 의 특징을 사용해 검색 기능 옵션 선택 부분 수정

 

BoardController.java

package com.springbook.view.board;

import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;

@Controller
public class BoardController {
// 통합 컨트롤러
	
	// @ModelAttribute 의 특징
	// @RequestMapping 메소드가 실행 되기 전에 실행된다.
	// @ModelAttribute 메소드의 실행 결과로 리턴되어지는 객체는 자동으로 Model에 저장된다. 
	// @ModelAttribute 메소드의 실행을 View페이지에서 사용할 수 있다. 
	@ModelAttribute("conditionMap")  // ("") <- View 페이지에서 사용할 이름
	public Map<String, String> searchConditionMap() {
		
		Map<String, String> conditionMap = new HashMap<>();
		conditionMap.put("제목", "TITLE");
		conditionMap.put("내용", "CONTENT");
		return conditionMap;
	}

	// 글 등록
	@RequestMapping(value = "/insertBoard.do")
	public String insertBoard(BoardVO vo, BoardDAO boardDAO) {
		boardDAO.insertBoard(vo);
		return "redirect:getBoardList.do";
	}
	
	// 글 수정
	@RequestMapping(value = "/updateBoard.do")
	public String updateBoard(BoardVO vo, BoardDAO boardDAO) {
		boardDAO.updateBoard(vo);
		return "redirect:getBoardList.do";
	}
	
	// 글 삭제
	@RequestMapping(value = "/deleteBoard.do")
	public String deleteBoard(BoardVO vo, BoardDAO boardDAO) {
		boardDAO.deleteBoard(vo);
		return "redirect:getBoardList.do";
	}
	
	// 글 상세조회
	@RequestMapping(value = "/getBoard.do")
	public String getBoard(BoardVO vo, BoardDAO boardDAO, Model model) {
		
		model.addAttribute("board", boardDAO.getBoard(vo));
		return "getBoard.jsp";
	}
	
	// 글 목록 검색
	// 커멘드 객체인 경우
	@RequestMapping(value = "/getBoardList.do")
	public String getBoardList(BoardVO vo, BoardDAO boardDAO, Model model) {
			
		model.addAttribute("boardList", boardDAO.getBoardList(vo));
		return "getBoardList.jsp";
	}
	
	// 글 목록 검색
	// 커멘드 객체가 아닌 경우
	/*
	 * @RequestMapping(value = "/getBoardList.do") public String
	 * getBoardList(@RequestParam(value = "searchCondtion",defaultValue =
	 * "TITLE",required = false) String condition,
	 * 
	 * @RequestParam(value = "searchKeyword",defaultValue = "CONTENT",required =
	 * false) String keyword, BoardVO vo, BoardDAO boardDAO, Model model) {
	 * 
	 * System.out.println("검색 조건" + condition); System.out.println("검색 단어" +
	 * keyword);
	 * 
	 * model.addAttribute("boardList", boardDAO.getBoardList(vo)); return
	 * "getBoardList.jsp"; }
	 */
	
}

 

getBoardList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@page import="com.springbook.biz.board.*"%>
<%@page import="com.springbook.biz.board.impl.*"%>
<%@page import="java.util.*"%>
<%@ 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>
	<center>
		<h1>글 목록</h1>
		<h3>
			${userName }님! 게시판에 오신 걸 환영합니다! <a href="logout.do">log-out</a>
		</h3>

		<form action="getBoardList.do" method="post">
			<table border="1" cellpadding="0" cellspacing="0" width="700">
				<tr>
					<td align="right">
					<select name="searchCondtion">
							
							<c:forEach items="${conditionMap }" var="option">
								<option value="${option.value }">${option.key }
							</c:forEach>
							
					</select> 
					<input name="searchKeyword" type="text" /> 
					<input type="submit" value="검색" /></td>
				</tr>
			</table>
		</form>

		<table border="1" cellpadding="0" cellspacing="0" width="700">
			<tr>
				<th bgcolor="orange" width="100">번호</th>
				<th bgcolor="orange" width="200">제목</th>
				<th bgcolor="orange" width="150">작성자</th>
				<th bgcolor="orange" width="150">등록일</th>
				<th bgcolor="orange" width="100">조회수</th>
			</tr>

			<c:forEach items="${boardList }" var="board">

				<tr>
					<td>${board.seq }</td>
					<td><a href="getBoard.do?seq=${board.seq }"> ${board.title }</a>
					</td>
					<td>${board.writer }</td>
					<td>${board.regDate }</td>
					<td>${board.cnt}</td>
				</tr>
			</c:forEach>
		</table>

		<br> <a href="insertBoard.jsp">새글 등록</a>
	</center>
</body>
</html>

 

BoardController.java

package com.springbook.view.board;

import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.springbook.biz.board.BoardVO;
import com.springbook.biz.board.impl.BoardDAO;

@Controller // web.xml에 있는 프론트컨트롤러를 읽어준다
@SessionAttributes("board") // 저장할 때 "board"라는 이름의 객체가 있으면 session 영역에 저장
public class BoardController {
// 통합 컨트롤러
	
	// @ModelAttribute 의 특징
	// @RequestMapping 메소드가 실행 되기 전에 실행된다.
	// @ModelAttribute 메소드의 실행 결과로 리턴되어지는 객체는 자동으로 Model에 저장된다. 
	// @ModelAttribute 메소드의 실행을 View페이지에서 사용할 수 있다. 
	@ModelAttribute("conditionMap")  // ("") <- View 페이지에서 사용할 이름
	public Map<String, String> searchConditionMap() {
		
		Map<String, String> conditionMap = new HashMap<>();
		conditionMap.put("제목", "TITLE");
		conditionMap.put("내용", "CONTENT");
		return conditionMap;
	}

	// 글 등록
	@RequestMapping(value = "/insertBoard.do")
	public String insertBoard(BoardVO vo, BoardDAO boardDAO) {
		boardDAO.insertBoard(vo);
		return "redirect:getBoardList.do";
	}
	
	// 글 수정
	// @ModelAttribute("board")으로 정보를 가지고 온다 
	// @SessionAttributes("board")와 실제 같은 값
	// 수정한 정보는 vo에 들어있다.
	// 한번 들어온 객체들을 넣어두고 
	// 수정된 title, content는 나중에 처리
	// 전체 데이터를 null 데이터 없이 넘겨 처리하기 위해선 이렇게 사용해야 한다.
	@RequestMapping(value = "/updateBoard.do")
	public String updateBoard(@ModelAttribute("board")BoardVO vo, BoardDAO boardDAO) {
		
		System.out.println(vo.getSeq());
		System.out.println(vo.getTitle());
		System.out.println(vo.getWriter());
		System.out.println(vo.getContent());
		System.out.println(vo.getRegDate());
		System.out.println(vo.getCnt());
		
		boardDAO.updateBoard(vo);
		return "redirect:getBoardList.do";
	}
	
	// 글 삭제
	@RequestMapping(value = "/deleteBoard.do")
	public String deleteBoard(BoardVO vo, BoardDAO boardDAO) {
		boardDAO.deleteBoard(vo);
		return "redirect:getBoardList.do";
	}
	
	// 글 상세조회
	@RequestMapping(value = "/getBoard.do")
	public String getBoard(BoardVO vo, BoardDAO boardDAO, Model model) {
		
		model.addAttribute("board", boardDAO.getBoard(vo)); // model은 request 영역에 저장
		return "getBoard.jsp";
	}
	
	// 글 목록 검색
	// 커멘드 객체인 경우
	@RequestMapping(value = "/getBoardList.do")
	public String getBoardList(BoardVO vo, BoardDAO boardDAO, Model model) {
			
		model.addAttribute("boardList", boardDAO.getBoardList(vo));
		return "getBoardList.jsp";
	}
	
}

 

18
비오는
33
날에는 일찍 집가자
2024-07-23
0

이렇게 값을 잘 받아온다.

+ Recent posts