lombok 을 사용하여 클라이언트로부터 요청과 데이터를 받아 표시해본다.
로그인 화면
<form action="loginget" method="get">
i d : <input type="text" name="id">
passwd : <input type="text" name="pwd">
<input type="submit" value="전송"/>
</form>
LoginController.java : Controller mapping.
- forward가 기본값. 클라-서버이기때문에 redirect로 명시.
- views폴더는 클라이언트의 요청으로는 접근할 수 없다.
따라서 login.html은 WEB-INF의 밖에서 작성해야함
@Controller
public class LoginController {
@GetMapping("login")
public String submitCall() {
return "redirect:http://localhost/login.html";
}
}
기존방법
request.getParameter
로 보낸값을 변수에 받고,model.addAttribute
로 model에 데이터를 반영한다.return "result"
뷰를 선택
@GetMapping("loginget")
public String submit(HttpServletRequest request,Model model) {
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
String data = "";
if(id.equals("kbs") && pwd.equals("111")) {
data = "로그인 성공";
}else data="로그인 실패";
model.addAttribute("data",data);
return "result"; //jsp명 (forwarding방식)
}
Spring 방식
- Spring에서는 파라미터->변수 저장을
@RequestParam
을 이용하여 단번에 한다.- value에는 요청명, 그후엔 변수타입과 이름을 지정한다.
@GetMapping("loginget")
public String submit(@RequestParam(value="id")String id,
@RequestParam(value="pwd")String pwd,Model model) {
String data = "";
if(id.equals("kbs") && pwd.equals("111")) {
data = "로그인 성공";
}else data="로그인 실패";
model.addAttribute("data",data);
return "result";
}
*자료 입력*
<form action="sangpum.do" method="post">
품명 : <input type="text" name="sang" /><br/>
수량 : <input type="text" name="su" /><br/>
단가 : <input type="text" name="dan" /><br/>
<input type="submit" value="전송(post)" />
</form>
action 속성의 이름이 요청명으로써 컨트롤러의 inputController에게 전달될 예정이다.
입력된 3개의 데이터는 SanpumBean에게 전달. 저장되어있다.
다음은 inputController의 내용이다.
@Controller
public class InputController {
@Autowired
private SangpumModel sangpumModel;
@GetMapping("/insdata")
public String submitcall() {
return "redirect:http://localhost/input.html";
}
@PostMapping("sangpum.do")
public String submit(SangpumBean bean, Model model) {
model.addAttribute("data",sangpumModel.compute(bean));
return "result";
}
}
출력모델인 SangpumModel의 메소드를 사용할 수 있도록 @Autowired
하고,
클라이언트html의 요청명인 sangpum.do의 요청을 확인하고 submit메소드를 실행한다.
submit에서는 model.addAttribute
으로 모델정보를 추가한다.
model.addAttribute("data",sangpumModel.compute(bean));
return "result";
result
뷰의 data
변수에게 모델의 처리(compute)를 거친 처리결과를 넘긴다.
//로그 확인시 해당 객체를 이용
private final Logger logger = LoggerFactory.getLogger(this.getClass());
logger.info(id+pwd);
로그(Log)란 프로그램 개발이나 운영 시 발생하는 문제점을 추적하거나 운영 상태를 모니터링하기 위한 텍스트이다.
System.out.println(); 를 사용하여 로그를 확인할 수 있지만 이보다 로그를 기록하는 클래스를 만들어 사용하는 것이 더 나은 방법이다. (실무에서 Logging 방식을 사용한다)
TRACE > DEBUG > INFO > WARN > ERROR > FATAL
INFO로 셋팅하면, INFO, WARN, ERROR, FATAL은 기록된다.
FATAL : 아주 심각한 에러가 발생한 상태를 나타낸다.
ERROR : 어떠한 요청을 처리하는 중 문제가 발생한 상태를 나타낸다. 프로그램 동작에 큰 문제가 발생했다는 것으로 즉시 문제를 조사해야 하는 것 (DB를 사용할 수 없는 상태, 중요 에러가 나오는 상황)
WARN : 프로그램의 실행에는 문제가 없지만, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타낸다. WARN에서도 2가지의 부분에선 종료가 일어남
-명확한 문제 : 현재 데이터를 사용 불가, 캐시값 사용 등
-잠재적 문제 : 개발 모드로 프로그램 시작, 관리자 콘솔 비밀번호가 보호되지 않고 접속 등
INFO : 어떠한 상태 변경과 같은 정보성 메시지를 나타낸다.
DEBUG : 개발시 디버그 용도로 사용하는 메시지를 나타낸다.
TRACE : 디버그 레벨이 너무 광범위한 것을 해결하기 위해서 좀 더 상세한 이벤트를 나타낸다.