2012-04-15 2 views
0

jQuery를 POST를 통해 서블릿 매개 변수를 전달 할 수 없습니다내가 jQuery를 사용하여 POST 요청을 보내고있다

$.post(
'test', 
{ foo: 'bar'} 
); 

을 그리고 나는 단순하게 처리하는 서블릿이 있습니다

@WebServlet("/test") 
public class TestServlet extends HttpServlet { 

    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 
     Map<String, String[]> parameterMap = req.getParameterMap(); 
    } 

} 

그러나 requestMap을 서블릿에서 비어있는 것으로 나타납니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

편집 : 내가 JSF Facelet 페이지에서이 스크립트를 호출 것을 언급하는 것을 잊었다. 왜 Ajax 요청을 수동으로 발행해야하는지, 그리고 서블릿을 사용하여 처리하는 이유를 묻지 마십시오. 이건 긴 이야기다. 나는 이것이 JSF의 유행이 아니라는 것을 안다.

는 @BalusC 대답 한 후,이 같은 서블릿 필터를 추가하는 시도 :

@WebFilter(urlPatterns="/test") 
public class TestFilter implements Filter { 
    @Override 
    public void destroy() { } 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, 
      FilterChain chain) throws IOException, ServletException { 
     Map<String, String[]> parameterMap = request.getParameterMap(); 
     chain.doFilter(request, response); 
    } 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { } 
} 

그리고 그것은했다! 필터에서 매개 변수를 가져올 수있을뿐만 아니라 서블릿에서도 액세스 할 수있었습니다. 그래서, 어떤 사람이 저에게 어떤 종류의 마법을 설명 할 수 있습니까?

+0

'방화 광'으로 무엇을 볼 수 있습니까? – gdoron

+0

실제로 POST 요청을 보내고 있습니다. 동시에 Eclipse에서 중단 점을 설정하고 매개 변수없이이 요청을 실제로 잡았습니다 ... Chrome 개발자 도구를 사용하여 요청이 실제로 필요한 모든 매개 변수와 함께 게시되었음을 보여줍니다. – jFrenetic

답변

0

요청 - 응답 체인의 일부 코드가 request.getReader() 또는 request.getInputStream()을 미리 호출 한 경우 매개 변수 맵은 비어 있습니다. HTTP 요청 본문은 한 번만 (클라이언트가 서버의 필요에 따라 여러 번 다시 보내지 않을 것임) 읽고 파싱 할 수 있습니다. 모든 필터를 확인하십시오.

+0

사용자 지정 필터가 없습니다. 나는 페이스 북에서 액세스 토큰으로 응답을 받고, 페이지로드시이 스크립트를 실행하여 Servlet에 전달합니다. 그러나이 스크립트는 JSF Facelet에서 호출됩니다. – jFrenetic

+0

또한 편집을 참조하십시오. – jFrenetic

+0

'getReader()'또는'getInputStream()'이 * getParameter(), getParameterMap(), 등등 전에 호출되면, 매개 변수는 null로 남을 것입니다. 다른 방법으로,'getParameter()'등, * getReader() 또는 getInputStream()을 호출하면 EOF를 반환합니다. 코드를 직접 디버그하여 (in) 직접 호출하지 않는지 확인하십시오. 그것이 증상을 기반으로 말할 수있는 전부입니다. – BalusC

관련 문제