728x90
Model 객체 사용
데이터만 설정이 가능
@RequestMapping("/board/view")
public String view(Model model) {
model.addAttribute("id", "hongku"); return "board/view";
}
model.addAttribute("변수이름", "변수에 넣을 데이터값");
Data : ${data}
ModelAndView
데이터와 뷰를 동시에 설정이 가능
@RequestMapping("/board/content")
public ModelAndView content() {
ModelAndView mv = new ModelAndView();
mv.setViewName("/board/content"); // 뷰의 이름
mv.addObject("data", "12341234"); // 뷰로 보낼 데이터 값
return mv;
}
mv.setViewName("뷰의 경로");
mv.addObject("변수 이름", "데이터 값");
Data : ${data}
AJAX 를 이용 ( 로그인 예제 )
map 을 이용하여 return
/** 로그인 버튼 click */
@ResponseBody
@RequestMapping("/login/start")
public Map<String, Object> login(HttpSession session , @ModelAttribute("userVO") UserDTO userDTO ) throws Exception {
Map<String, Object> resultMap = new HashMap<>();
try{
userDTO.setCommand("idCheck");
if( userService.checkUserDuplicated( userDTO ) ){ // 사용자 중복확인
UserDTO findUserVO = userService.findByUserInfo(userDTO);
String d_salt = userService.getSalt(userDTO.getUser_id());
String input_pw = SHA256.getEncrypt(userDTO.getUser_pw(), d_salt);
if(findUserVO.getFail_count() < 5) { // 로그인 5회연속 실패시 접속 불가능
if (findUserVO.getUser_pw().equals(input_pw)) { // pw 확인
session.setAttribute("user_id", findUserVO.getUser_id());
session.setAttribute("user_nm", findUserVO.getUser_nm());
findUserVO.setFail_count(0);
userService.updateFailCount( findUserVO ); // 시도횟수 초기화
resultMap.put("status", "success");
} else {
findUserVO.setFail_count(findUserVO.getFail_count() + 1);
userService.updateFailCount( findUserVO );// 시도횟수 +1
resultMap.put("trial", findUserVO.getFail_count());
resultMap.put("status", "pw_check");
}
}else{
resultMap.put("status", "trial_fail");
}
}else{
resultMap.put("status", "no_user");
}
}catch(Exception e){
resultMap.put("status",e.getMessage());
return resultMap;
}
return resultMap;
}
JS 에서 데이터 받기
let submitFlag = false;
function formCheck() {
if(submitFlag){ return false; }
var inputId = $('#user_id').val();
var inputPass = $('#user_pw').val();
if (inputId ==""){$('#inputNoDiv').addClass('d-block show').removeClass('d-none hide');return;}
else $('#inputNoDiv').removeClass('d-block show').addClass('d-none hide');
if (inputPass ==""){$('#inputPassDiv').addClass('d-block show').removeClass('d-none hide');return;}
else $('#inputPassDiv').removeClass('d-block show').addClass('d-none hide');
//form
submitFlag = true;
var formData = $("#loginForm").serialize();
$.ajax({
type: "POST",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
url: "/login/start",
data: formData,
dataType: "json", // 응답 데이터는? JSON타입
async : false,
success: function (result) {
switch(result.status){
case "success" : location.href="dashboard"; break;
case "pw_check" :
showModal("alertModal" ,"비밀번호를 확인 하세요.\n\n5/"+result.trial+ "회 실패.");
break;
case "trial_fail" :
showModal("alertModal" ,"시도횟수를 초과 하였습니다. 비밀번호 찾기를 이용하세요.");
break;
case "no_user" :
showModal("alertModal" ,"존재하지 않는 사용자 입니다.");
break;
default :
showModal("alertModal",result.status);
break;
}
},
error: function () {
showModal("alertModal" ,"페이지에 에러가 있습니다!");
}
});
setTimeout(function (){submitFlag = false;}, 2000);
}
Servlet.xml 에서 정의
<mvc:view-controller path="hahaha" view-name="/"/>
<!-- GET 요청만 가능 controller에 코드 없어도 페이지 이동됨. -->
728x90