[JSP & Servlet] 복습

Dawon Ruby Choi·2023년 10월 31일

어떻게 연결할 것 인가!

1) servlet mapping 방식

<servlet>
  	<servlet-name>loginView</servlet-name>
  	<servlet-class>employee.controller.LoginViewServlet</servlet-class> 
  </servlet>
  <servlet-mapping>
  	<servlet-name>loginView</servlet-name>
  	<url-pattern>loginView.me</url-pattern>
  </servlet-mapping>

2) annotation(@) 방식 - 주로 쓰는 방식

@WebServlet("/loginView.me")
public class LoginViewServlet extends HttpServlet { 

💡do get쓰고 ctrl + space하면 Override 생성!

@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		RequestDispatcher view = req.getRequestDispatcher("WEB-INF/views/employee/login.jsp");
        //넘어갈 뷰 경로 WEB-INF/views/employee/login.jsp 를 getRequestDispatcher인자로 보내줌
		view.forward(req, resp);
	}
}

기본 로직

loginbar -> servlet (conroller) -> 로그인 페이지
⭐controller가 어떤 화면을 보여줄지 결정 !

엔터를 치면 로그인으로 넘어가는 기능

window.onload = () =>{
			const inputIdPwd = document.getElementsByTagName('input');
			for(let i = 0; i < inputIdPwd.length; i++){
				inputIdPwd[i].addEventListener('keyup', (e) => {
                // 이벤트를 사용할 때 인자로 e 를 집어넣으면 event의 객체를 담겠다는 의미 
					console.log(e)
					if(e.key == 'Enter'){
						doLoginLabel();
					}
				});
			}
		}

비밀번호와 아이디가 일치하는지 확인

로직

Servlet(controller) -> service -> DB -> EMPLOYEE VO
SELECT *
FROM EMP
WHERE EMPNO =? AND PWD =?

SELECT 를 사용해서 가져와야함
(COUNT(*)로 가져오면 정보를 반환해줄수 없이 있냐 없냐만 알 수 있기 때문에)
이 때 EMPLOYEE VO로 사원 정보 반환 받기 (클래스 생성)

servlet 생성
doPost로 넘겼지만

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

doPost에서 doGet으로 넘기기 때문에 어떤 방식으로 해도 doGet에 코드 작성하면 됨
(그래도 여전히 POST방식인 것은 맞음)

값 넘어오기 전에 한글 인코딩 미리 해주어야함
(하지만 사번과 비밀번호는 숫자와, 영어이기 때문에 필수는 아님)
사용자로부터 입력받아온 id/pwd를 service로 넘겨주기

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");// 값 넘어오기 전에 한글 인코딩 미리 해주어야함
		int id = Integer.parseInt(request.getParameter("id")); //login.jsp 확인
		String pwd = request.getParameter("pwd");
		
		Employee e = new Employee();
		//EMPLOYEE에 매개변수 있는 생성자 만들거나 setter 이용해서 가져오기 
		e.setEmpNo(id);
		e.setPwd(pwd);
        
        EmployeeService service = new EmployeeService(); //service로 넘겨주기!!!!
		service.login(e); //입력받아온 id,pwd service의 login으로 넘기기
	} 

필터를 사용하면 알아서 UTF-8로 바꿔줌 (Spring)

EPLOYEE DAO 생성해주고 쿼리 작성하기

public class EmployeeDAO {

	public Employee selectEmp(Connection conn, Employee e) {
		PreparedStatement pstmt = null;
		ResultSet rset = null;
		Employee login = null;
		
		String query = ⭐"SELECT * FROM v_selectemp WHERE empno = ? and pwd = ?"; //id pwd 맞추는 쿼리문장
		try {
			pstmt = conn.prepareStatement(query);
			pstmt.setInt(1, e.getEmpNo());
			pstmt.setString(2, e.getPwd());
			rset = pstmt.executeQuery();
			
			if(rset.next()) {
				login = new Employee(rset.getInt("empno"), //resultset 컬럼명
									 rset.getString("pwd"), //슌서는 employee 생성자 순서
									 rset.getString("ename"),
									 rset.getString("job"),
									 rset.getInt("mgr_no"),
									 rset.getString("mgr"),
									 rset.getDate("hireDate"),
									 rset.getInt("sal"),
									 rset.getInt("comm"),
									 rset.getInt("deptno"),
									 rset.getString("dname"),
									 rset.getString("is_admin"),
									 rset.getString("status"));
			}
		} catch (SQLException e1) {
			e1.printStackTrace();
		} finally {
			close(rset);
			close(pstmt);
		}
		return login;
	}

}

로그인 성공/실패 시 화면 전환 (loginServlet클래스)

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");// 값 넘어오기 전에 한글 인코딩 미리 해주어야함
		int id = Integer.parseInt(request.getParameter("id")); //login.jsp 확인
		String pwd = request.getParameter("pwd");
		
		Employee e = new Employee();
		//Employee에 매개변수 있는 생성자 만들거나 setter 이용해서 가져오기 
		e.setEmpNo(id);
		e.setPwd(pwd);
		
		EmployeeService service = new EmployeeService();
		Employee login = service.login(e); //login : 로그인 성공/실패에 대한 정보가 담겨있음
		
		if(login != null) { //로그인 성공
			//request.setAttribute(pwd, login) - 로그인이 유지되지 않음
			HttpSession session = request.getSession(); // 일정시간 이후에 로그아웃 됨
			session.setAttribute("loginUser", login); //기본 30분 유지
			session.setMaxInactiveInterval(600); //600이 10분
			//request.getRequestDispatcher("index.jsp").forward(request, response);//성공시 메인화면으로 돌아가기 
			//response.sendRedirect("index.jsp"); // 이 경우 위 주소에 index.jsp 그대로 노출됨
			response.sendRedirect(request.getContextPath());// 바로 메인으로 ㄱㄱ
			
			//forwrd            vs          sendRedirect (화면 바꿔주는 것)
			//url 유지						url 넘어온 값으로 변경
			//request, response 유지			request, response 유지x 새로 생성o
			//=> 데이터 전달 가능				=> view에게 데이터 전달이 안됨
			
			//sendRedirect는 request,response 데이터 유지가 안되는데 위 경우 사용할 수 있는 이유는
			//session에 담아 주었기 때문이다.
			
		} else { //로그인 실패
			
		}
	} //service 넘겨주기!!!!
profile
나의 코딩 다이어리🖥️👾✨

0개의 댓글