1. web.xml파일에 welcome-file에 설정되어있는 index.jsp (메인페이지)  만들기 
   메인페이지에 menebar.jsp include 

<%@ include file = "views/common/menubar.jsp"%>

2. index.jsp파일에 바로 작성하지않고 메뉴바와 로그인폼 (항상 같은페이지에 있을것) 따로 
   webapp/views/common안에 menubar.jsp생성 

( html/ css 작성시에는 vscode이용) 
 

복습할 부분 >

CSS )  float: right 화면으로 부터 띄워서 오른쪽 배치 
           clear:both  float 끝내기 
           line-height  줄간격 조정 -> 메뉴바 중간정렬할수있음 (높이와 똑같이쓰기)
           큰부분부터 차례로  설정하기!!

html ) 로그인 전 ( 로그인폼) / 로그인 후 (로그아웃,마이페이지) 같은 jsp내에 작성
       전달받은 session안의 객체가 null일 경우 -> 로그인전  / 그게 아닐 경우 -> 로그인 후 페이지 보이게 하기 (if문)

menubar.jsp

1) 로그인 전     

< form action="<%request.getContextPath()%>/login.me" method="post">

     form의 submit버튼 클릭시 입력한 정보 넘어갈 경로 작성 
    request.getContextPath() :  ContextPath는 바뀔 수 있으니 메소드로 출력
    로그인은 post방식으로 넘겨야함( 개인정보가 url에 노출되면 안됨)

 

submit(로그인) 버튼 클릭 -> LoginController(mapping값 login.me)  Servlet으로  요청처리

 1) 요청시 전달값 뽑기 & 데이터 가공처리 ==>변수, 객체에 기록하기 

String userId = request.getParameter("userId");

 

2) 요청처리 (db에 sql문 실행)
Service>Dao>sql문 실행(member 테이블로 부터 select)

Member loginUser = new MemberService().loginMember(userId,userPwd);

service의 loginMember 으로 아이디와 패스워드값 전달한 후 멤버 객체로 돌려받음

MemberService

longinMember 메소드 생성( userId, userPwd) 매개변수 => 멤버객체 리턴 
Connection 객체 생성 (JDBCTemplate 에 만들어놓은 메소드 호출)

Dao에 Connection객체와 userId, userPwd 전달하며 호출  후 멤버객체 돌려받아 Servlet으로 리턴 

public Member loginMember(String userId, String userPwd) {
		Connection conn = /*JDBCTemplate.*/getConnection();
		
		Member m = new MemberDao().loginMember(conn,userId,userPwd);
		/*JDBCTemplate.*/close(conn);
		return m;
	}

 

MemberDao

Member 객체 생성 
PreparedStatement객체 생성
ResultSet객체생성

sql 구문 xml파일로부터 가져오기 ==> Properties 객체생성 필요 

private Properties prop = new Properties();

public MemberDao(){ 

  String filePath = MemberDao.class.getResource("/db/sql/member-mapper.xml").getPath();
           try {
                  prop.loadFromXML(new FileInputStream(filePath));
               } catch (IOException e) {
                   e.printStackTrace();
               }
 }

 

public Member loginMember(Connection conn, String userId,String userPwd) {
		//select문 => ResultSet객체 (한행 조회)=> Member객체에 담기
		Member m = null;
		PreparedStatement pstmt = null;
		ResultSet rset = null;
		
		String sql = prop.getProperty("loginMember");
		
		try {
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1,userId);
			pstmt.setString(2, userPwd);
			
			rset = pstmt.executeQuery(); // 한행|0행
			
			if(rset.next()) { //true > 조회된게 있을경우
				m= new Member(rset.getInt("user_no"),
							  rset.getString("user_id"),
							  rset.getString("USER_PWD"),
							  rset.getString("user_name"),
							  rset.getString("phone"),
							  rset.getString("email"),
							  rset.getString("address"),
							  rset.getString("interest"),
							  rset.getDate("enroll_date"),
							  rset.getDate("modify_date"),
							  rset.getString("status")
							  );
				
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			/*JDBCTemplate.*/close(rset);
			/*JDBCTemplate.*/close(pstmt);

		}
		return m;
	
	}

>>> 생성한 Member객체를 다시 Service로 리턴 

 member-mapper.xml 파일의 sql구문 >

<entry key="loginMember">
		SELECT 
				USER_NO
			  , USER_ID
			  , USER_PWD
			  , USER_NAME
			  , PHONE
			  , EMAIL
			  , ADDRESS
			  , INTEREST
			  , ENROLL_DATE
			  , MODIFY_DATE
			  , STATUS
		 FROM MEMBER
		WHERE USER_ID = ?
		  AND USER_PWD = ?
		  AND STATUS = 'Y'	  	

	</entry>

 

3) 처리된 결과를 가지고 사용자가 보게될 응답뷰(jsp)지정 후 포워딩 또는 url 재요청


⭐⭐⭐중요⭐⭐⭐
 응답페이지에 전달할 값이 있을 경우 어딘가에 담아야됨 -> 담을 수 있는 영역 == jsp내장 객체

1) application : 담긴 데이터를 "웹 애플리케이션 전역" 에서 사용 가능
2) session : 담긴 데이터를 직접 지우거나, 세션이 만료(서버 멈추거나, 브라우저 종료) 되기 전까지 어떤 jsp/Servlet이든 사용가능
3) request : 담긴 데이터를 현재  request객체를 포워딩한 응답 jsp에서만 사용가능 (일회성)
4) page : 해당 jsp에서 담고 그 jsp에서만 사용가능

공통적으로 데이터를 담고자 한다면 .setAttribute("키", 밸류)
                   데이터를 꺼내고자한다면 .getAttribute("키")
                   데이터를 지우고자한다면 .removeAttribute("키")


3_1) 돌려받은 멤버객체가 null이면 조회결과 없음 => 로그인 실패=> 에러페이지 응답

if(loginUser == null) {
			//조회결과 없음 == 로그인 실패 ==> 에러페이지(views/common/errorPage.jsp) 응답 
			request.setAttribute("errorMsg","로그인에 실패했습니다");
			
			RequestDispatcher view = request.getRequestDispatcher("views/common/errorPage.jsp");
			view.forward(request, response);

에러메세지를 attribute에 담은 후 eerorPage.jsp  로 jsp위임 포워딩

 

3_2) 돌려받은 멤버객체가 null이 아니면 => 로그인 성공 => 메인페이지 로그인성공페이지 (로그인후 ) 보이도록 함

  Session 객체에  정보 담기 (로그인한 회원의 정보가 여기저기 필요하기 때문)

 HttpSession session = request.getSession();
 session.setAttribute("loginUser", loginUser);

 url 재요청 방식 (redirect) 로 로그인 후 메인페이지의 url이 변경되지 않도록

response.sendRedirect(request.getContextPath());

 

menubar.jsp

2) 로그인 후 

 session이 null이 아닐경우 
 객체안의 정보( 로그인한 사람의 이름) 출력 -> loginUser.getUserName() 
 a태그의 href="<%=request.getContextPath()%>/logout.me >경로 설정 

로그아웃 요청시에는 전달값 , sql문 실행할 필요 없기때문에  다시 로그인전 메인페이지 보이게 하면됨

1) 로그아웃 처리할 Servlet생성( mapping값 logout.me)

2) 로그아웃 버튼 클릭시 ->> session 만료시키기 == 세션 무효화 시키기(세션비우기)

   HttpSession session = request.getSession(); // 세션가지고오기
   session.invalidate(); 

 3) 응답페이지 => 메인페이지(index.jsp)

  response.sendRedirect(request.getContextPath());

*  redirect : 클라이언트가 요청한 내용에 대해 서버가 바로 응답하는 것이 아니라 클라이언트에게 다시요청하라고 서버가 강제하는것  ( url재요청 방식) 기존에 저페이지를 응답하는 url이 존재할 경우 사용가능 

* response.sendRedirect(String location) : 이동시킬 페이지가 위치해 있는 경로로 매개변수 지정
* response.sendRedirect("http://www.naver.com") : 특정사이트로 이동시키고 싶을 경우 url입력

 

  

 


                                                         

  

 

'Web' 카테고리의 다른 글

Server 03. jsp활용한 피자 주문페이지  (0) 2023.01.03
Server 02 . JSP  (0) 2023.01.02
Server 01 . Servlet  (1) 2023.01.02
복사했습니다!