JSP

[JSP] 44. <JSP와 MVC 패턴을 사용한 to-do 프로젝트> (3)

Song hyun 2024. 7. 9. 12:39
728x90
반응형

[JSP] 44. <JSP와 MVC 패턴을 사용한 to-do 프로젝트> (3)

 

 

1.UserController.java

*보안상의 이유로 [views]를 [WEB-INF]에 넣는다.

*GET/POST는 방식 상의 차이가 있는 것이지, URL은 동일하다.

package com.tenco.controller;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

import com.tenco.model.UserDAO;
import com.tenco.model.UserDAOImpl;
import com.tenco.model.UserDTO;

// 주소설계
// http://localhost:8080/mvc/user/
@WebServlet("/user/*")
public class UserController extends HttpServlet {
	private static final long serialVersionUID = 1L;
    private UserDAO userDAO;

    public UserController() {
        super();
    }
    
    @Override
    public void init() throws ServletException {
    	userDAO=new UserDAOImpl();
    }

    // GET 방식으로 들어올 때,
    // http://localhost:8080/mvc/user/signUp --> 회원가입 페이지
    // http://localhost:8080/mvc/user/signIn --> 로그인 페이지
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String action = request.getPathInfo();
		System.out.println("action : "+action);
		switch(action) {
		case "/signIn":
			
			break;
		case "/signUp":
			signUp(request,response);
			break;
		default:
			response.sendError(HttpServletResponse.SC_NOT_FOUND);
			break;
		}
	}
	
	// 회원 가입 기능
	private void signUp(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 인증 검사 필요 없는 기능
		String username = request.getParameter("username");
		String password=request.getParameter("password");
		String email=request.getParameter("email");
		
		// 방어적 코드 작성 (username)
		if(username==null || username.trim().isEmpty()) {
			request.setAttribute("errorMessage", "사용자 이름을 입력하시오.");
			request.getRequestDispatcher("/WEB-INF/views/signUp.jsp").forward(request,response);
			return;
		}
		
		// 방어적 코드 작성 (password)
		// 방어적 코드 작성 (email)
		
		UserDTO userDTO = UserDTO.builder()
				.username(username)
				.password(password)
				.email(email)
				.build();
		
		int resultRowCount = userDAO.addUser(userDTO);
		System.out.println("resultRowCount : "+resultRowCount);
		if(resultRowCount==1) {
			response.sendRedirect(" http://localhost:8080/mvc/user/signIn");
		} else {
			response.sendRedirect(" http://localhost:8080/mvc/user/signIn");
		}
	}

	// 로그인 기능 요청 (자원의 요청 -- GET 방식, 하지만 예외 처리 -> because of 보안)
	// POST 요청 시 - 로그인 기능 구현, 회원 가입 기능 구현
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String action = request.getPathInfo();
		System.out.println("action : "+action);
		switch(action) {
		case "/signIn":
			// 로그인 페이지로 보내는 동작 처리
			request.getRequestDispatcher("/WEB-INF/views/signIn.jsp").forward(request, response);
			break;
		case "/signUp":
			// 회원가입 페이지로 보내는 동작 처리
			request.getRequestDispatcher("/WEB-INF/views/signUp.jsp").forward(request, response);
			break;
		default:
			response.sendError(HttpServletResponse.SC_NOT_FOUND);
			break;
		}
	}

}

 

 

2. UserDAOImpl.java

package com.tenco.model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class UserDAOImpl implements UserDAO{

	private DataSource dataSource;
	
	public UserDAOImpl() {
		try {
			InitialContext ctx=new InitialContext();
			dataSource=(DataSource)ctx.lookup("java:comp/env/jdbc/MyDB");
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}
	
	@Override
	public int addUser(UserDTO userDTO) {
		int resultCount = 0;
		String sql= "INSERT INTO users(username,password,email) VALUES (?,?,?)";
		try (Connection conn = dataSource.getConnection();){
			PreparedStatement pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, userDTO.getUsername());
			pstmt.setString(2, userDTO.getPassword());
			pstmt.setString(3, userDTO.getEmail());
			resultCount = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}

	@Override
	public UserDTO getUserById(int id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public UserDTO getUserByUsername(String username) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<UserDTO> getAllUsers() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int updateUser(UserDTO userDTO, int principalId) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int deleteUser(int id) {
		// TODO Auto-generated method stub
		return 0;
	}

}

 

 

728x90
반응형