[0528] 자바 웹 개발 과정🌞

Let's TECH🧐·2021년 5월 30일
0

자바 웹 개발 과정

목록 보기
20/31
post-thumbnail

⭐자바 웹 개발

로그인, 로그아웃

로그인을 위한 LoginController 구현

@WebServlet("/member/login")
public class LoginController extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	

		// 페이지 만들어서 주기
		request.getRequestDispatcher("/WEB-INF/view/member/login.jsp").forward(request, response);
	}
	
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		String userName = request.getParameter("username");
		String password = request.getParameter("password");
		String returnURL = request.getParameter("returnURL");

		// DB에서 회원 데이터를 가져와서 회원 인증하기
		MemberService memberService = new MemberService();
		Member member = null;
		try {
			member = memberService.getByNickName(userName);
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		if(member == null) {
			// 회원이 없을 경우
			// 에러 메시지를 보여주거나 jsp에서 에러를 보여주게 한다
			response.sendRedirect("login?error=1");
			return; // return해주지 않으면 아래 조건문 밖의 sendRedirect와 충돌 발생
		} else if(!member.getPwd().equals(password)) {
			// 비밀번호가 불일치할 경우
			// 에러 메시지를 보여주거나 jsp에서 에러를 보여주게 한다
			response.sendRedirect("login?error=1");
			return;
		} 
		
		// 인증이 성공하면
		// session에 인증 정보를 기록한다.
		HttpSession session = request.getSession();	// 캐비닛 얻기

		// 인증된 사용자 정보를 캐비닛에 넣기
		// 톰캣 플랫폼이 요청자의 세션 아이디를 알고 있기 때문에 그 사용자의 캐비닛에 데이터를 알아서 넣어줌
		session.setAttribute("id", member.getId());
		session.setAttribute("uid", userName);
		
		if(returnURL != null && !returnURL.equals("")) {
			response.sendRedirect(returnURL);
			return;
		}
		
                // 로그인 성공 시 인덱스 페이지로 이동
		response.sendRedirect("/index");
	}
}

로그아웃을 위한 LogoutController

@WebServlet("/member/logout")
public class LogoutController extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		HttpSession session = request.getSession(); // 케비닛 얻기
		session.invalidate(); // 세션이 비워짐
		
		response.sendRedirect("/index");
	}
}

공통 레이아웃 분리

header 분리하기

  • reg.jsp
<!-- header 영역 -->
<jsp:include page="/WEB-INF/view/inc/header.jsp" />
  • header.jsp
<c:if test="${empty sessionScope.uid }"> <!-- el 태그는 pageContext -> request -> session 순으로 찾게 됨 -->
	<li><a href="member/login">로그인</a></li> <!-- 세션에 uid가 존재하지 않을 때 -->
</c:if>
<c:if test="${!empty sessionScope.uid }">
	<li><a href="member/logout">로그아웃</a></li> <!-- 세션에 uid가 존재할 때 -->
</c:if>

Filter

Client로부터 Server로 요청이 들어오기 전에 서블릿을 거쳐서 필터링하는 것을 말한다.
사용자 인증이나 로깅과 같은 기능들은 모든 서블릿에서 공통적으로 필요한 기능인데, 이러한 공통적인 기능들을 서블릿이 호출되기 전에 수행되게 하고 싶거나 서블릿이 호출되고 난 뒤에 수행하고 싶다면 공통 기능들을 서블릿 필터로 구현하면 된다.

인코딩 필터 구현

@WebFilter("/*")
public class CharEncodingFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		
                // 인코딩 설정
		request.setCharacterEncoding("UTF-8");
		
		chain.doFilter(request, response);
		
	}
}

🐥마무리

오늘은 세션에 대해 배운 후 로그인, 로그아웃 기능을 구현해보았다. 또, 모든 서블릿에 공통적으로 적용해야하는 기능을 필터로 구현하는 방법도 공부하였다.

그리고 오늘은 그동안 열심히 참여했던 1차 프로젝트를 발표하는 시간을 가졌다. 우리 팀은 반려동물과의 추억을 기록하는 사이트 'PETHARU'를 만들었고, 내 반려동물을 관리(체중 기록, 일정 관리 등)하는 메뉴, 반려동물과 함께한 일상을 기록하는 일기장, 반려동물에게 도움이 될 수 있는 노하우를 작성하는 메뉴 등 여러 기능을 구현하여 반 학생들 앞에서 프로젝트 결과물을 발표하였다.
비록 처음에 계획한 기능을 100% 완성시킨 것은 아니지만, 내가 처음으로 프론트단과 백단을 모두 구현하여 만든 프로젝트이고, 또 내 아이디어를 기반으로 만든 웹사이트라 더 애정이 많이 갔던 것 같다 :)
1차 프로젝트는 여기서 끝났지만, 나는 PETHARU의 부족한 기능들을 보완해 더 완성도있는 웹사이트로 만들어보려 한다! 이제 다음주 월요일부터 2차 프로젝트가 시작되는데 시간 분배를 잘 해서 2차 프로젝트를 진행하면서 시간이 빌 때마다 1차를 보완해야겠다👍

그리고 노력의 결과로 따라온 것은! 우리 팀이 19명 중 7명의 선택을 받아 1차 프로젝트에서 1등을 했다는 것이다👏 기대하고 있던 것은 아니었지만, 열심히 노력한 만큼 결과도 좋아서 정말 기뻤다. 다음 프로젝트에서도 지금처럼 최선을 다하자!

PETHARU Repository

참고 사이트

[Servlet] 서블릿 필터 (Filter)

profile
Minju's Tech Blog

0개의 댓글