티스토리 뷰
출처 : http://wizardee.tistory.com/141
ajax에서 외부서버에 접속하려 할 경우에 아래와 같은 메세지를 볼 수가 있다.
XMLHttpRequest cannot load http://xx.xx.xx.xx/xxx.jsp. Request header field Content-Type is not allowed by Access-Control-Allow-Headers.
이는 ajax에서는 내부적으로 같은 도메인의 서버에서만 URL접속을 할 수 있도록 되어 있어서 그런데 이를 해결하기 위해서는 접속하려는 웹서버(여기서는 톰캣)에서 아래와 같이 응답헤더를 설정을 해 주면,
다른 서버에서 접속요청하는 ajax 요청을 처리할 수 있다.
response.addHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Headers", "origin, x-requested-with, content-type, accept");
좀더 자세히 말하면,
우선 Filter를 상속받은 클래스를 하나 정의해서 거기에 위의 코드를 넣는다.
EX)
CrossDomainFilter.java
package util.filter;
public class CrossDomainFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse servletResponse,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
if (!(request instanceof HttpServletRequest)) {
throw new ServletException("This filter can "
+ " only process HttpServletRequest requests");
}
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.addHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "origin, x-requested-with, content-type, accept");
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
web.xml
<filter>
<filter-name>CrossDomainFilter</filter-name>
<filter-class>util.filter.CrossDomainFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CrossDomainFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
'Programming > JAVA' 카테고리의 다른 글
안드로이드 개발툴 설치하기 (0) | 2013.03.02 |
---|---|
Eclipse Heap 영역 넓히기 (0) | 2013.02.26 |
JAVA DeComplier (0) | 2009.08.11 |
jsp & JAVA 코딩 가이드(펌) (0) | 2009.08.10 |
서울 자바 FX관련 세미나 (0) | 2009.05.25 |