GDJ 9/18

Yongha Hwang·2023년 9월 18일
0

SPRING

1.Transaction

			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();
				} 
			}

2. 회원가입 페이지 만들기

  • extends : 사용 할 수 있는 기능이 추가된다.(확장)
  • include : 기능이 자동으로 호출 된다.(포함)
  • Login
//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;
	}        
  • List

    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;
	}
  • DTO
    데이터를 담고 있는 객체로 원하는 데이터를 가져오거나 값을 지정 할때 사용한다.
    (주요 목적은 한 번의 호출로 해당 호출에 관련 된 모든 데이터를 담은 객체를 리턴 받아 사용하는 것)

"redirect:/list"; -> sendRedirect의 역할을 해준다

0개의 댓글

관련 채용 정보