** 이전에 JSP로 만들었던 코드를 이용해 서블릿으로 아주 쉽게 구현해보았다. 다만 두가지 이슈가 발견되었다.
하나는 자바스크립트의 한글화, 나머지 하나는 forward, redirect시 이동이 우선시 되어 스크립트가 무시되는 점이었다.
[JSP] 7강 - 세션, 로그아웃 그리고 메인 페이지 만들기
본 포스팅은 정보 제공용이 아닌 유튜브 동빈나님의 JSP 게시판 만들기 강좌 7강을 바탕으로 보고 배운 것을 직접 정리해본 포스트 입니다. ** 로그인 구현할 때 들었던 구현하지 않은 세션 부여
egu99.tistory.com
** LogoutControl.java
@WebServlet("/logout")
public class LogoutControl extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1)
//response.setCharacterEncoding("UTF-8");
//response.setContentType("text/html; charset=UTF-8");
HttpSession session = request.getSession();
//세션 삭제
session.invalidate();
PrintWriter out = response.getWriter();
out.println("<script>");
out.println("alert('로그아웃 되었습니다.');");
out.println("location.href='main'");
out.print("</script>");
// 2)
//response.sendRedirect("main");
}
- session.invalidate로 세션삭제를 해주었다.
- 여기서 LoginControl도 포함하여 두가지 문제점이 있었는데
1) LoginControl에서도 그렇고 여기 LogoutControl에서도 그렇고 PrintWriter부분, 정확히는 response에서 한글이 깨진 상태로 출력되는 것을 확인했다. LoginControl에서는 임시방편으로 해줬지만 서블릿마다 이런 코드를 넣을 순 없어서 모든 서블릿에 적용할 수 있는 필터를 만들어보기로 했다. 필터의 코드는 아래를 확인하자.
2) LoginControl에서 로그인 실패시, 그러니까 redirect나 forward가 없을 때 alert가 작동했지만 있을 때인 로그인 성공시에서는 alert가 뜨지 않았고 여기 로그아웃도 그러했다. 아마도 우선순위가 스크립트보다 페이지 이동이 우선시 되는 거 같다. 이동 또한 자바스크립트의 location.href=''를 이용하여 이동해주는데이 때 location.href는 get으로 가는 것을 확인했다. 우선은 잘 작동하지만 이래나 저래나 여기서 자바스크립트를 쓰는 것은 아닌듯하다.
** CharacterEncodingFilter.java
@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//System.out.println("Before Filter");
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
chain.doFilter(request, response);
//System.out.println("After Filter");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
- 이전에는 web.xml을 통해 webfilter를 추가해줬지만 서블릿 3.0부터는 어노테이션만으로도 가능해졌다.
- @WebFilter( ) 안에는 적용할 URL매핑이름을 넣어주기만 하면 된다.
- /*처럼 와일드카드를 써 모든 어노테이션 URL 매핑에 적용할 수도 있다.
'웹 개발 한걸음' 카테고리의 다른 글
[Servlet] 게시판 목록 구현하기 (0) | 2021.03.29 |
---|---|
[Servlet] 회원가입 구현하기 (0) | 2021.03.22 |
[Servlet] 로그인 구현하기 (0) | 2021.03.18 |
[Servlet] EL과 데이터 저장소 (0) | 2021.03.18 |
[JSP] 14강 - 메인 화면 꾸미기 (0) | 2021.03.17 |