이전에 했던 Mybatis를 적용한 게시판에 어노테이션을 적용하고자한다.
기존에 했던것들처럼 순서대로 진행하면서 정리하고자 한다.
POJO클래스
우선 pojo클래스를 먼저 정리하고자한다
POJO클래스 개요
Controller인터페이스나 AbstractCommandController추상클래스를 상속받지 않아도 독립적으로 사용자로부터 요청을 받아서 처리해줄 수 있는 기능을 가진 클래스
특징
인터페이스 or 추상클래스를 상속받지 않아도 된다.
@Controller를 부여->자동적으로 컨트롤러가 된다.
요청을 받아서 처리해주는 메서드를 내마음대로 변경이 가능하다.=>종속X
=>매개변수도 내마음대로 설정이 가능
index.jsp 수정
<%
response.sendRedirect("http://localhost:8090/SpringAnno/list.do");
%>
글목록보기
board-servlet.xml에 추가 및 수정
<!-- @Autowired,@Required -->
<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor" />
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
~생략~
<!-- <bean name="/list.do" class="lee.ListActionController">
<property name="dao">
<ref bean="boardDAO" />
</property>
</bean> -->
이걸
<bean name="/list.do" class="lee.ListActionController" />
이렇게 생략해서 바꿔준다
이러면 dao를 불러오지 못하니까 에러뜬다 따라서 컨트롤러에 어노테이션들을 적용해준다
ListActionController 수정
@Controller란? : 요청을 받아서 처리해주는 컨트롤러역할을 해주는 어노테이션
Controller 와 @RequestMapping은 컨트롤러에서 필수다
package lee;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
//import org.springframework.web.servlet.mvc.Controller;
//public class ListActionController implements Controller {
//요청을 받아서 처리해주는 컨트롤러역할을 해주는 어노테이션
@Controller
public class ListActionController{
BoardDAO dao;//BoardDAO dao=new BoardDAO(); 스프링컨테이너가 해준다.
//<property name="dao"> <ref bean="boardDAO()" ~ <= 이거 생략가능 (어노테이션 적용해서)
@Required
@Autowired
public void setDao(BoardDAO dao) {//<property name="dao"><ref bean~
this.dao = dao;
System.out.println("setDao() 호출됨(dao)=>"+dao);
}
public void hello() {
System.out.println("hello");
}
@RequestMapping("/list.do") // 다른 메서드 여러개있을때 내가 지정해주는 메서들 요청할때 사용 => 요청명령어에 따른 처리해줄 메서드를 지정해줄때 사용하는 어노테이션
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
System.out.println("ListActionController의 handleRequest()호출됨");
//ArrayList list=dao.list();
List list=dao.list();
//화면에 출력할 list.jsp에 전달할 페이지명과 전달할값을 설정하기위해
ModelAndView mav=new ModelAndView();//viewName 멤버변수
mav.setViewName("list");//이동할 페이지명만 확인->경로? 확장자?
mav.addObject("list",list);//request.setAttribute("list",list);
//mav.addObject("키명",전달할값),,,,
//${list(키명)} request.getAttribute("list");
return mav;
}
}
글쓰기
board-servlet.xml 수정
<bean name="/write.do" class="lee.WriteActionController" />
밑에꺼를 이렇게 간략하게 바꿔준다
<!-- before
<bean name="/write.do" class="lee.WriteActionController">
<property name="dao">
<ref bean="boardDAO" />
</property>
<property name="commandClass" value="lee.BoardCommand"/>
</bean>
-->
WriteActionController 수정
package lee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
//입력을 받아서 처리(글쓰기,글수정,로그인),입력X 처리해주는경우(페이지 이동(글쓰기폼),글상세보기,글삭제
//public class WriteActionController extends AbstractCommandController {
@Controller
public class WriteActionController {
@Autowired
BoardDAO dao;
/* 위에 멤버변수에 @Autowired를 적용하면 생략가능
public void setDao(BoardDAO dao) {
this.dao = dao;
System.out.println("setDao()호출=>"+dao);
}*/
//String title=request.getParameter("title") 이걸 어노테이션으로 바꾸려면
// => 메서드의 매개변수처리 @RequestParam("매개변수명") 반환자료명
@RequestMapping("/write.do")
protected ModelAndView test(@RequestParam("title") String title,
@RequestParam("author") String author,
@RequestParam("content") String content)
throws Exception {
// TODO Auto-generated method stub
System.out.println("WriteActionController 실행됨!");
//request.setCharacterEncoding("utf-8");//한글처리
BoardCommand data=new BoardCommand();
//확인
//최대값 구하기(계산해서 넣을것)
int newNum=dao.getNewNum()+1;
data.setNum(newNum);//5->6->7
//추가(입력을 받아서 넣어준다.)
data.setTitle(title);
data.setAuthor(author);
data.setContent(content);
//-----------------------------------------------
dao.write(data);//->getNum()호출해서 #{num}에 전달된다.
return new ModelAndView("redirect:/list.do");
}
}
나머지는 다음에 이어서
2022-08-30