[Web] 필터
2024. 8. 21. 14:40ㆍ자바 웹 개발/세션 쿠키 필터 리스너
필터는 브라우저에서 서블릿에 요청하거나 응답할 때 미리 요청이나 응답과 관련해 여러 가지 작업을 처리하는 기능이다. 모든 서브릿에서 공통으로 처리하는 작업을 필터로 처리하면 편한다.
일단 login.html와 LoginTest 서블릿을 작성하자.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>LoginPage</title>
</head>
<body>
<form name="frmlogin" method="POST" action="login" encType="utf-8">
이름 : <input type="text" name="user_name"><br>
비밀번호 : <input type="password" name="user_pw"><br>
<input type="submit" value="로그인">
<input type="reset" value="다시입력">
</form>
</body>
</html>
@WebServlet("/login")
public class LoginTest extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
String user_name = req.getParameter("user_name");
String user_pw = req.getParameter("user_pw");
out.println("<html><body>");
out.println("이름은 " + user_name + "<br>");
out.println("비밀번호는 " + user_pw + "<br>");
out.println("</body></html>");
}
}
req.setCharsetEncoding("utf-8")을 작성하지 않았기 때문에 한글을 작성하면 인코딩 문제가 발생한다.
이제 필터를 이용해보자
필터를 만들고 class name에서 EncoderFilter를 입력한다.
Edit을 누른 뒤에 모든 요청에 기능을 수행하도록 Pattern을 /*으로 수정한다.
WebFilter 애너테이션을 확인해보고 다음과 같으면 정상이다.
@WebFilter("/*")
public class EncoderFilter implements Filter {
ServletContext context;
/**
* Default constructor.
*/
public EncoderFilter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
System.out.println("destroy 호출");
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("doFilter 호출");
request.setCharacterEncoding("utf-8");
String context = ((HttpServletRequest)request).getContextPath(); //컨텍스트 이름을 가져온다
String pathinfo = ((HttpServletRequest)request).getRequestURI(); //브라우저가 요청한 요청 URI를 가져온다.
String realPath = request.getRealPath(pathinfo); //요청 URI의 실제 경로를 가져온다.
String mesg = " Context 정보 : " + context + "\n URI 정보 : " + pathinfo + "\n URI 정보 : " + realPath;
System.out.println(mesg);
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("utf-8 인코딩 ........");
context = fConfig.getServletContext();
}
}
정상 작동을 확인할 수 있다.
'자바 웹 개발 > 세션 쿠키 필터 리스너' 카테고리의 다른 글
[Web] 리스너 / HttpSessionBindingListener 접속자 표시 / HttpSessionListener 로그인 접속자수 표시 (0) | 2024.08.21 |
---|---|
[Web] 서블릿 URL 패턴 (0) | 2024.08.21 |
[Web] 서블릿 속성과 스코프 (0) | 2024.08.21 |
[Web] encodeURL 사용 (0) | 2024.08.19 |
[Web] 세션을 이용한 로그인 정보 바인딩하기 (0) | 2024.08.19 |