커리큘럼(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);
}
}
}