Fullstack-Study-241204-250625

커리큘럼(12-30/변경)

01. Java
02. git
03. Database 
04. Jsp [Server] (v)

05. 미니프로젝트 (3W)
06. HTML,CSS  
07. JS

08. SpringFramework , SrpingBoot
09. React JS [Front-end]
10. 중간프로젝트 (1M)
11. Linux 명령어
12. AWS 클라우드
13. DevOps - Docker
14. App - Android
15. 최종프로젝트 (1M)

JSP

Myweb 예시 프로젝트 실습

controller

@WebServlet("*.users")
public class UsersController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public UsersController() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doAction(request,response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doAction(request,response);
	}

	protected void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String uri = request.getRequestURI();
		String conPath = request.getContextPath();
		String command = uri.substring(conPath.length());

		System.out.println("요청경로 : "+command);
		
		
		// 사용할 서비스 선언
		UsersService service = new UsersServiceImpl();
		
		//MVC2의 기본 이동방식은 forward 방식
		if(command.equals("/users/join.users")) {
			
			//mvc2 방식에서 이동
			request.getRequestDispatcher("join.jsp").forward(request, response);
		
		}else if(command.equals("/users/joinForm.users")) {
			service.join(request, response);
			
		}else if(command.equals("/users/login.users")) {
			request.getRequestDispatcher("login.jsp").forward(request, response);
		}
		else if(command.equals("/users/loginForm.users")) {
			// 로그인 처리
			service.login(request, response);
		}
		else if(command.equals("/users/mypage.users")) { // 마이페이지
			request.getRequestDispatcher("mypage.jsp").forward(request, response);
		}
		else if(command.equals("/users/modifyform.users")) { // 정보수정
			service.modify(request,response);
		}
		
	}

}

DAO

public class UsersDAO {
	/*
	 * DAO는 클래스는 여러개 만들필요 없이, 객체가 한개만 생성되도록
	 * singleton클래스로 생성
	 */
	//1. 나자신의 객체를 1개 생성한다.
	private static UsersDAO instance = new UsersDAO();
	//2. 외부에서 생성자를 호출할수 없도록 private막는다
	private UsersDAO() {
		
		try {
			InitialContext context = new InitialContext();
			dataSource = (DataSource)context.lookup("java:comp/env/jdbc/oracle");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	//3. 외부에서 객체를 요구할 때, instance를 반환합니다.
	public static UsersDAO getInstance() {
		return instance;
	}
	
	//커넥션풀을 사용할 dataSource클래스
	private DataSource dataSource;
	
	
	// 아이디 중복체크 메서드
	public int idDuplicationCheck(String email) {
		
		int result=0;
		
		String sql = "SELECT * FROM USERS WHERE EMAIL=?";
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs= null;
		
		try {			
			conn=dataSource.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, email);
			rs = pstmt.executeQuery();
			
			if(rs.next()) result=1; // 1 = 중복
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JdbcUtil.close(conn, pstmt, rs);
		}
		
		return result;
	}
		
	// 회원가입 메서드
	public void join(UsersDTO dto) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		String sql = "INSERT INTO USERS(EMAIL,NAME,PW,PHONE,GENDER,SNS_YN) VALUES(?,?,?,?,?,?)";
		
		try {
			conn = dataSource.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1,dto.getEmail() );
			pstmt.setString(2,dto.getName() );
			pstmt.setString(3, dto.getPw());
			pstmt.setString(4, dto.getPhone());
			pstmt.setString(5,dto.getGender() );
			pstmt.setString(6, dto.getSnsYn());
			
			pstmt.executeUpdate(); // insert, update, delete
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 여기 들어가는 코드는 똑같음
			JdbcUtil.close(conn, pstmt, null);
		}
	}
	
	
	// 로그인 메서드
	public UsersDTO login(String email, String pw) {
		UsersDTO dto =null;
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		String sql = "SELECT * FROM USERS WHERE EMAIL=? AND PW=?";
		try {
			conn = dataSource.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, email);
			pstmt.setString(2, pw);
			
			rs = pstmt.executeQuery();
			if(rs.next()) {
				String name = rs.getString("name");
				String phone = rs.getString("phone");
				String gender = rs.getString("gender");
				String snsYn = rs.getString("sns_yn");
				Timestamp regDate = rs.getTimestamp("regdate");
				
				dto=new UsersDTO(email,name,null,phone,gender,snsYn,regDate);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			JdbcUtil.close(conn, pstmt, rs);
		}
		return dto;
	}
	
	// 정보 수정 메서드
	public int modify(String name,String gender, String phone, String snsYn,String email) {
		int result =0;
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		String sql = "UPDATE USERS SET NAME=?,GENDER=?,PHONE=?,SNS_YN=? WHERE EMAIL=?";
		
		try {
			conn = dataSource.getConnection();
			pstmt= conn.prepareStatement(sql);
			pstmt.setString(1, name);
			pstmt.setString(2, gender);
			pstmt.setString(3, phone);
			pstmt.setString(4, snsYn);
			pstmt.setString(5, email);
			
			result = pstmt.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			JdbcUtil.close(conn, pstmt, null);
		}
		
		
		return result;
	}
	
	// id에 해당하는 값 가져오기
	public UsersDTO getInfo(String email) {
		UsersDTO dto =null;
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		String sql = "SELECT * FROM USERS WHERE EMAIL=?";
		try {
			conn = dataSource.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, email);
			
			rs = pstmt.executeQuery();
			if(rs.next()) {
				String name = rs.getString("name");
				String phone = rs.getString("phone");
				String gender = rs.getString("gender");
				String snsYn = rs.getString("sns_yn");
				Timestamp regDate = rs.getTimestamp("regdate");
				
				dto=new UsersDTO(email,name,null,phone,gender,snsYn,regDate);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			JdbcUtil.close(conn, pstmt, rs);
		}
		return dto;
	}
	
}

Service

public class UsersServiceImpl implements UsersService{

	@Override
	public void join(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
		String emailPrev = request.getParameter("email_prev");
		String emailNext = request.getParameter("email_next");
		String name = request.getParameter("name");
		String pw = request.getParameter("pw");
		String phone = request.getParameter("phone");
		String gender = request.getParameter("gender");
		String snsYn  = request.getParameter("sns_yn");
		if(snsYn==null) snsYn="N";
		String email = emailPrev + "@"+emailNext;
		
		//System.out.println(emailPrev);
		//System.out.println(emailNext);
		//System.out.println(name);
		//System.out.println(pw);
		//System.out.println(phone);
		//System.out.println(gender);
		//System.out.println(snsYn);
		
		UsersDAO dao = UsersDAO.getInstance();
		
		int result = dao.idDuplicationCheck(email);
		
		if(result==1) {
			// msg를 화면에 보냄
			request.setAttribute("msg","이미 존재하는 아이디입니다.");
			request.getRequestDispatcher("join.jsp").forward(request, response);
			
		}else {
			UsersDTO dto = new UsersDTO(email,name,pw,phone,gender,snsYn,null);
			dao.join(dto);
			
			//mvc2방식에서는 리다이렉트는 다시 컨트롤러를 태워서 이동할 때 사용
			response.sendRedirect("login.users");
		}
	}

	@Override
	public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		UsersDAO dao = UsersDAO.getInstance();
		UsersDTO dto = dao.login(id, pw);
		
		if(dto==null) { // 로그인 실패
			request.setAttribute("msg","로그인 실패");
			request.getRequestDispatcher("login.jsp").forward(request, response);
		}else { // 로그인 성공
			// 현재 브라우저의 세션은 request에서 얻을 수 있음
			HttpSession session = request.getSession();
			session.setAttribute("userDTO",dto);
			
			response.sendRedirect("../index.jsp");
		}
		
	}

	@Override
	public void modify(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		/*
		 * update 테이블명 set 업데이트할값 where pk=?
		 * 
		 *  1. 화면에서 넘어온 값을 받음(이름, 성별, 휴대폰, 수신여부
		 *  2. email값은 세션에서 얻음
		 *  3. DAO는 modify() 메서드를 생성하고 업데이트진행
		 *  4. DAO 성공시 1을 반환하고, 실패시 0을 반환
		 *  5. 서비스에서는 정보수정성공시에 메인페이지로 이동, 실패시 마이페이지로 이동
		 */
		
		String name = request.getParameter("name");
		String gender = request.getParameter("gender");
		String phone = request.getParameter("phone");
		String snsYn = request.getParameter("snsYn");
		UsersDTO dto = ((UsersDTO)request.getSession().getAttribute("userDTO"));
		String email = dto.getEmail();
		
		
		
		UsersDAO dao = UsersDAO.getInstance();
		int result = dao.modify(name,gender,phone,snsYn,email);
		
		if(result==1) {
			dto = dao.getInfo(email);
			System.out.println(dto==null);
			HttpSession session = request.getSession();
			session.setAttribute("userDTO", dto);
			response.sendRedirect("../index.jsp");
			
		}else {
			request.setAttribute("msg", "정보수정 실패");
			request.getRequestDispatcher("mypage.jsp").forward(request, response);
		}
		
	}

}