// @Controller를 통해 DispatcherServlet이
// 이를 controller로 인식하고 모든 처리를 여기로 요청한다
@Controller
public class MasterController {
// type으로 찾아 bean으로 생성
// root-context.xml에 이미 bean으로 설정은 마친 상태
@Autowired
private SqlSession sqlsession;
// 요청 주소를 mapping
// 일단 .htm은 모두 이곳으로 요청되도록 설정된 상태이고
// 정확한 요청 주소를 보고 @RequestMapping 설정에 따라
// 알맞은 메소드로 요청이 들어간다
@RequestMapping("showallemp.htm")
public String showAllEmp(Model model) {
EmpDao dao = sqlsession.getMapper(EmpDao.class);
List<EmpDto> list = dao.getEmpList();
model.addAttribute("list", list);
return "emp.showAllEmp";
}
// 동일 주소로 요청하지만 두 가지 방식(GET방식과 POST방식) 모두 처리해야 할 때
// 아래와 같이 (value="~", method= ) 로 처리한다
@RequestMapping(value="searchEmp.htm" , method=RequestMethod.GET)
public String searchEmp1() {
return "emp.searchEmp";
}
@RequestMapping(value="searchEmp.htm" , method=RequestMethod.POST)
// 특별한 설정이 없어도 .jsp에서 form으로 태워 보내는
// input tag의 name값을 메소드의 파라미터의 명과 일치시키면
// 아래와 같이 파라미터로 값이 들어오게 된다
// form tag 말고 get 방식으로 파라미터를 보내는 방식도 있는데
// 이는 밑에 있는 "updateEmpview.htm" 요청 메소드에서 설명한다
public String searchEmp2(String column, String KEYVALUE, Model model) {
// java 내에서 제공하는 validator 기능으로
// 숫자 패턴인지를 파악하는 코드이다
Pattern p = Pattern.compile("(^[0-9]*$)");
Matcher m = p.matcher(KEYVALUE);
if(column.equals("EMPNO")) {
// m의 패턴이 아니라면 = 숫자가 아니라면
if(!m.find()) {
KEYVALUE = "0";
}
}
// 다중의 파라미터를 보내야 하므로 map 에 담아서 보내게 되며
// mapper에서 이를 받을 때 key 값을 기준으로 value를 뽑는다
HashMap<String, String> map = new HashMap();
map.put("column", column);
map.put("KEYVALUE", KEYVALUE);
// 아래는 DAO 실행 결과로 받은 DTO를
// model에 태워서 .jsp로 보내는 코드이다
EmpDao dao = sqlsession.getMapper(EmpDao.class);
EmpDto dto = dao.getEmp2(map);
model.addAttribute("emp", dto);
// Tiles.xml 설정에 따라 model에 태운 DTO를 받을
// JSP에서 EL을 이용해서 적절하게 값을 뿌려주면 된다
return "emp.searchEmp";
}
@RequestMapping("searchLikeEmp.htm")
public String showAllEmp2(String KEYVALUE, Model model) {
Pattern p = Pattern.compile("(^[0-9]*$)");
Matcher m = p.matcher(KEYVALUE);
if(!m.find()) {
KEYVALUE = "00000";
}
EmpDao dao = sqlsession.getMapper(EmpDao.class);
List<EmpDto> list = dao.getEmpList2(KEYVALUE);
model.addAttribute("list", list);
return "emp.searchEmp";
}
@RequestMapping(value="insertEmp.htm",method=RequestMethod.GET)
public String insertEmp1() {
return "emp.addEmp";
}
// return "redirect:/~" 은 클라이언트로 하여금 ~ 주소로 재요청하게 만드는 기능이다
// DB처리를 통해 어떠한 데이터를 받아와서 뿌려줘야 하는 상황이 아니고
// DB처리가 끝나고 갱신된 페이지를 보여주고 싶을 경우
// 그냥 client 단에서 재요청하기를 원하는 주소를 redirect:/ 뒤에 붙여주기만 하면 된다
// 즉, 원하는 처리는 끝났으니 깔끔하게 다시 요청하도록 강제하는 것이 redirect:/ 이다
@RequestMapping(value="insertEmp.htm",method=RequestMethod.POST)
public String insertEmp2(EmpDto dto) {
System.out.println(dto);
EmpDao dao = sqlsession.getMapper(EmpDao.class);
dao.insertEmp(dto);
return "redirect:/showallemp.htm";
}
// 클라이언트가 요청과 동시에 보낸 데이터를 받는 첫번째 방식으로
// form에서 보낸 데이터를 받는 방법을 설명하며
// input tag의 name값과 메소드의 파라미터 변수명을 일치시키는 방법에 대해서 위에 정리했다
// 클라이언트가 요청과 동시에 보낸 데이터를 받는 두번째 방식으로
// <a>href="updateEmpview.htm?empno=${list.EMPNO}">수정하기</a> 처럼
// 주소값에 붙여 보내고 이를 받는 방식이 있다
// 첫번째 방식과 받는 방식은 똑같다. 요청을 처리하는 메소드에서 파라미터 명을 일치시키면 된다
// 보낼 때는 저렇게 요청 주소 옆에 ?key=value로 보내면 된다
// 다수의 값을 보내고 싶을 경우 ?key1=value1&key2=value2&key3=value3 과 같이 보내면 된다
@RequestMapping("updateEmpview.htm")
public String showEditEmp(int empno, Model model) {
EmpDao dao = sqlsession.getMapper(EmpDao.class);
EmpDto dto = dao.getEmp(empno);
model.addAttribute("emp", dto);
return "emp.updateEmp";
}
@RequestMapping(value="updateEmp.htm", method=RequestMethod.POST)
public String updateEmp(EmpDto dto) {
EmpDao dao = sqlsession.getMapper(EmpDao.class);
dao.updateEmp(dto);
return "redirect:/showallemp.htm";
}
@RequestMapping("deleteEmp.htm")
public String deleteEmp(int empno) {
EmpDao dao = sqlsession.getMapper(EmpDao.class);
dao.deleteEmp(empno);
return "redirect:/showallemp.htm";
}
}