getRequestURI -> 확인용 (변화가 없을거 같을때)(쿼리스트링은 출력x)
getRequestURL -> 버퍼 (변화가 있을거 같을때)
//xml
<servlet>
<servlet-name>member-servlet</servlet-name>
<servlet-class>controllers.MemberController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>member-servlet</servlet-name>
<url-pattern>/member/*</url-pattern>
</servlet-mapping>
xml에서 위와 같이 사용하던 것을
클래스에서 에노테이션을 사용하여 간단하게 표현가능하다.
@WebServlet("/member/*")
public class MemberController extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
: 요청과 응답사이에서 걸러줌
Filter 인터페이스를 구현 -> 필터 클래스
web.xml
<filter>
<filter-name>..</filter-name>
<filter-class>...</filter-class>
<init-param>
<param-name>이름</param-name>
<param-value>값</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>...</filter-name>
<url-pattern>...</url-pattern>
</filter-mapping>
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("요청 전 필터");
chain.doFilter(request, response); //다음 필터 또는 서블릿의 처리 메서드 실행
System.out.println("응답 후 필터");
}
필터 클래스 FilterChain::doFilter() 메서드 전 후, 공통 필터 부분 -> 여기에 코드 작성은 지양
ServletRequest 인터페이스 -> ServletRequestWrapper
ServletResponse 인터페이스 -> ServletResponseWrapper
HttpServletRequest 인터페이스 -> HttpServletRequestWrapper
HttpServletResponse 인터페이스 -> HttpServletResponseWrapper
참고) 클래스명에 Wrapper 있다고 감싸는 구조 X
//권장되지 않는 예시
System.out.println("요청 전 필터");
chain.doFilter(request, response); //다음 필터 또는 서블릿의 처리 메서드 실행
System.out.println("응답 후 필터");
}
//권장되는 예시
//래퍼 클래스 정의
public class CommonRequestWrapper extends HttpServletRequestWrapper {
public CommonRequestWrapper(ServletRequest request) {
super((HttpServletRequest) request);
// 요청 전 고통 처리 부분
System.out.println("요청 전 공통 처리 코드..");
}
}
//구현부에서
chain.doFilter(new CommonRequestWrapper(request), response);
//Filter에서 값을 커스텀도 가능함
@Override
public String getParameter(String name) {
String value = super.getParameter(name);
value = value == null ? value : "★" + value + "♥";
return value;
}