2023. 6. 20. 20:13ㆍTIL(Today I Learned)
filter>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<filter-name>abc</filter-name>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<url-pattern>/*</url-pattern>
<filter-name>abc</filter-name>
</filter-mapping>
(1) SSR(서버 사이드 렌더링)
- 보통 forward, redirect를 사용하는데 forward할 때(jsp로 넘겨줄 때) req에 값을 담고 넘긴다.
- 스프링에서는 어떻게 사용할까?
- 이렇게 Model을 사용하면 servlet의 request와 같다.
- 마찬가지로 redirect를 할 때도, model에 addAttribute를 하면 알아서 그 값이 담긴다. 다른 페이지로 넘어갈 때도 알아서 담긴다.
@GetMapping(value = {"/", "home"})
public String home(Model model) {
model.addAttribute("nick", "jjonse");
return "home";
}
- 개발자는 req, session에 담을지 상관하지 말고 스프링이 알아서 해주도록 한다.
- req에 담는 것은 다 model에 담으면 된다.
- pageContext, session 영역은 그대로 쓰면 된다. req 대신에 model에 담기!!!
- model에 담고 redirect를 하면 queryString이 된다.
(2) 필터(Filter) - 스프링과 servlet의 차이
- 가능하면 전부 다 스프링이 관리하게 만들어줘야 작업하기 편리하다.
- filter 객체는 spring보다 바깥쪽에 존재한다.
- filter는 bean이랑 자동으로 연결되지 않는다. 왜냐하면 filter는 spring 밖에 존재하기 때문이다.
- filter가 spring 내부의 것을 필요로 하는데 스프링은 filter가 밖에 위치하니까 신경쓰지 않는다.
- 그래서 필터를 사용할 때는 스프링이 관리하는 객체가 될 수 있도록 해야한다.
- 이 어플리케이션을 전부다 스프링이 관리했으면 좋겠다 생각한다.
- 필터를 세운다.(실제로 필터 역할을 하는 것은 따로 있다)
- 명목상 필터는 존재하고 실제로는 다른 것을 사용하면 된다. 겉으로 볼 때는 홍길동이라는 친구가 있다. 명단에는 홍길동이라고 적고, 실제로 홍길동이라 적은 애는 김철수가 들어와 있는 것이다.
- 그래서 스프링이 filter로 쓸 객체 하나를 만든다. 그 다음에 filter를 명목상 세워준다. 필터한테 요청 들어오면 아무것도 하지 말고 대체되는 애한테 넘겨주면 된다고 한다.
- 그럼 스프링 입장에서는 관리하는 객체가 사실상 필터의 역할을 하게 된다.
- 그럼 필터도 스프링이 관리하는 객체가 되었다고 볼 수 있다.
- validatingFilterProxy라는 게 있는데 이를 이용하면 자동으로 스프링 내의 필터를 만들어준다.
(3) 필터를 등록하는 방법
1. @WebFilter를 통해 등록
- 훨씬 편리하다.
- 웬만하면 이 방법을 사용한다.
- 하지만 만약에 내가 만든 클래스를 아닌 걸 가지고 filter를 등록하고 싶을 때는 사용할 수 없다.
- 그렇기 때문에 xml을 사용해야 한다.
@WebFilter("/*")
public class EncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("필터 동작~~~~");
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
}
2. XML 사용
- 예시를 들자면 이렇다.
- 스프링은 이런 것들도 다 만들어져 있다.
<filter>
<filter-class>com.kh.app.filter.EncodingFilter</filter-class>
<filter-name>abc</filter-name>
</filter>
<filter-mapping>
<url-pattern>/*</url-pattern>
<filter-name>abc</filter-name>
</filter-mapping>
- 이 필터는 이미 spring에 존재하기 때문에 그저 스프링 프레임워크의 라이브러리를 추가하면 되는 것이다.
- 이렇게 해도 작동하지 않는다. 생성자에다 encoding 방식을 추가해야 한다.
<filter>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<filter-name>abc</filter-name>
</filter>
<filter-mapping>
<url-pattern>/*</url-pattern>
<filter-name>abc</filter-name>
</filter-mapping>
- root-context에 이것도 추가해줘야 한다.
<bean id="abc" class="com.kh.app.filter.EncodingFilter"></bean>
'TIL(Today I Learned)' 카테고리의 다른 글
2023.06.23 TIL (0) | 2023.06.23 |
---|---|
2023.06.22 TIL (0) | 2023.06.22 |
2023.06.19 TIL (0) | 2023.06.19 |
2023.06.15 TIL(web.xml, root-context.xml, servlet-context.xml 상세 설명) (0) | 2023.06.15 |
2023.06.14 TIL(스프링과 servlet의 차이, 메이븐 세팅, xml 정보) (0) | 2023.06.14 |