필터에서 왜 httpServletRequest 형식으로 강제로 변환하는지 간단히 말해 주세요.

1731 단어
public void doFilter(ServletRequest request,
		ServletResponse response, FilterChain chain)
		throws IOException,ServletException
	{
		// Filter 
		String encoding = config.getInitParameter("encoding");
		String loginPage = config.getInitParameter("loginPage");
		String proLogin = config.getInitParameter("proLogin");
		// request 
		request.setCharacterEncoding(encoding);			//①
		HttpServletRequest requ = (HttpServletRequest)request;
		HttpSession session = requ.getSession(true);
		// 
		String requestPath = requ.getServletPath();

이런 광경은 필터에서 흔히 볼 수 있는데 왜 강제로 변환해야 합니까?테스트를 통해 알았습니다. if (request instance Of Http Servlet Request) 시스템.out.println("true");true를 출력합니다.
ServletRequest는 HttpServletRequest의 부모 인터페이스입니다. 이를 통해 알 수 있듯이 request는 HttpServletRequest의 실현 유형의 대상이고 다음은 다태적인 지식을 사용합니다.
ServletRequest request;이것은 하위 클래스의 대상을 상위 클래스에 인용하는 것입니다. 그가 실행할 때의 유형은 하위 클래스이고 컴파일할 때의 유형은 상위 클래스입니다. 그러나 실행할 때 상위 클래스의 대상 호출 방법이 하위 클래스에 있으면 하위 클래스의 방법을 실행하고 컴파일할 때의 유형은 상위 클래스가 호출되지 않은 방법입니다.그래서 그곳에서 강제 형식 전환을 해야 한다. 그렇지 않으면 오류가 발생할 것이다.

좋은 웹페이지 즐겨찾기