if(success) {
try {
// 트랜잭션은 한 메서드에서 동시실행되는 쿼리가 있을 경우 사용한다.(일반적으로)
// 여러 메서드가 있다 하더라도, 모두 SELECT 문이라면 사용할 필요가 없다.(데이터가 변하지 않기때문)
dao.conn.setAutoCommit(false); // auto commit 기능 끄기
dao.insert();
dao.conn.commit(); // 확정
} catch (Exception e) {
e.printStackTrace();
try {
dao.conn.rollback(); // 되돌리기
} catch (SQLException e1) {
e1.printStackTrace();
}
}
- extends : 사용 할 수 있는 기능이 추가된다.(확장)
- include : 기능이 자동으로 호출 된다.(포함)
//Controller
@RequestMapping(value="/login",method = RequestMethod.POST)
public String login(Model model, HttpSession session
,@RequestParam String id,@RequestParam String pw) {
logger.info(id+"/"+pw);
MemberService service = new MemberService();
boolean success=service.login(id,pw);
logger.info("login success : "+success);
String page = "index";
if (success) { // 로그인 성공시...
// session 에 로그인이 성공했다는 표시로 id 를 저장한다.
session.setAttribute("loginId", id);
// list.jsp 로 이동한다. (list.jsp 에는 회원 정보 리스트가 나타나야 한다.)
page = "redirect:/list"; // 성공하면 -> "/list" 요청을 보내도록 한다.
}else { // 로그인 실패시...
// msg 에 "아이디 또는 비밀번호를 확인하세요" 라는 메시지를 담는다.
model.addAttribute("msg", "아이디 또는 비밀번호를 확인하세요");
// index.jsp 로 보낸다.
}
return page;
}
//DAO
// 로그인(login) - id 와 pw 가 일치하는 id 값이 있느냐?
public boolean login(String id, String pw) {
String sql = "select id from member where id=? and pw=?";
boolean success = false;
try {
ps = conn.prepareStatement(sql);
ps.setString(1, id);
ps.setString(2, pw);
rs = ps.executeQuery();
success =rs.next(); // ResultSet 에 값이 있는지 여부
} catch (SQLException e) {
e.printStackTrace();
}finally {
close();
}
return success;
}
HttpSession 을 이용하여 로그인해서 정보가 저장되고 유지될 경우에만 보여주도록 한다.
//Controller
@RequestMapping(value="/list")
public String list(Model model,HttpSession session) {
logger.info("list 요청 받음");
String page = "index";
String msg = "로그인이 필요한 서비스 입니다.";
if(session.getAttribute("loginId") != null) { //로그인 했을 경우만 내용을 실행
page = "list";
msg = "환영 합니다.";
MemberService service = new MemberService();
model.addAttribute("list", service.list());
}
model.addAttribute("msg", msg);
return page;
// 리스트(list)
public ArrayList<MemberDTO> list() {
// 1. 쿼리문(id,name,gender)
String sql = "SELECT id,name,gender FROM member";
// 2. PreparedStatement -> ? 가 필요 한가?
ArrayList<MemberDTO> list = null;
try {
ps = conn.prepareStatement(sql);
// 3. 쿼리문 실행
rs = ps.executeQuery();
// 4. ResultSet 에서 데이터 가져오기
list = new ArrayList<MemberDTO>();
while(rs.next()) {
String id =rs.getString("id");
String name= rs.getString("name");
String gender =rs.getString("gender");
logger.info(id+"/"+name+"/"+gender);
// DTO 에 가져온값 담기
MemberDTO dto = new MemberDTO();
dto.setId(id);
dto.setName(name);
dto.setGender(gender);
list.add(dto);
}
// 5. 어떻게 담아서 보낼 것 인가?
} catch (SQLException e) {
e.printStackTrace();
}finally {
close();
}
return list;
}
"redirect:/list"; -> sendRedirect의 역할을 해준다