본문 바로가기
학습/JSP

18. Filter API

by Elfen Lied 2022. 11. 16.
반응형

- Filter 이용해 한글 인코딩

setCharacterEncoding을 주석처리

 

- LoginTest 생성

package sec03.ex01;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/login")
public class LoginTest extends HttpServlet {
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		String userName = request.getParameter("user_name");
		String userPw = request.getParameter("user_pw");
		
		out.print("이름 : " + userName + "<br>");
		out.print("비밀번호 : " + userPw + "<br>");
		
	}

}

 

 

- login.html 생성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="login" method="post">
		이름 : <input type="text" name="user_name"><br>
		비밀번호 : <input type="password" name="user_pw"><br>
		<button>로그인</button>
	</form>
</body>
</html>

 

한글로 로그인 해보면 깨짐

 

 

- EncoderFilter 생성

package sec03.ex01;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;

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

	ServletContext ctx;
	
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		ctx = filterConfig.getServletContext();
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		// 컨텍스트 패스
		String contextPath = ((HttpServletRequest)request).getContextPath();
		String requestURI = ((HttpServletRequest)request).getRequestURI();
//		String realPath = request.getRealPath(requestURI); // 디프리케이티드
		String realPath = ctx.getRealPath(requestURI);
		
		System.out.println(contextPath);
		System.out.println(requestURI);
		System.out.println(realPath);
		
		chain.doFilter(request, response);
	}
	
}

 

request.realPath는 디프리케이트기 때문에 ServletContext로 받아와야함

 

반응형

댓글