어떻게 연결할 것 인가!
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 넘겨주기!!!!