如何在filter中获取ajax 传递的参数。request.getQueryString()为空,request.getParameter("userName")也为空。如果用form提交,在filter中 就能获取到参数。
下面是个很简单的例子
js代码,ajax 不管是用get方式还是用post方式,在filter中也无法获取 ajax传递的参数。
<script type="text/javascript">
  
   window.onload = funtion(){
   var xmlHttp = getXmlHttp();
   var url = "<%=basePath%>/index.jsp";
   xmlHttp.onreadystatechange = function() {
   if (xmlHttp.readyState == 4) {
   if (xmlHttp.status == 200) {
   var resultText = xmlHttp.responseText;
   }
   }
   }
   xmlHttp.open("POST",url,true);
   xmlHttp.send("userName=test");
   }
  
   function getXmlHttp(){
   try {

// for IE
return new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
try {

// for non IE
return new XMLHttpRequest();
} catch (e) {
throw new Error("无法创建XMLHttpRequest对象。");
}
}
   }
  </script>
web.xml中只配置了一个filter
<filter>
<filter-name>myFilter</filter-name>
<filter-class>filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
java文件 filter
package filter;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;public class MyFilter implements Filter { public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest)req;
                //这一行获取的参数值为空。
String str = request.getQueryString();
if(str == null){
return ;
}
chain.doFilter(req, resp);
} public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}}

解决方案 »

  1.   

    String str = request.getParameter("userName");试一试..
      

  2.   

    post请求需要加一个请求头..xmlHttp.open("POST",url,true);
    xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlHttp.send("userName=test");
      

  3.   

    xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  加请求头
      

  4.   

    使用form提交,可以获得到。
    现在我想从filter中判断数据来源,是通过form提交的还是通过ajax提交的。我想在ajax提交的参数中增加一个参数ajaxFlag,在filter中判断如果ajaxFlag为空的时候是通过form表单提交的,如果有值则是通过ajax提交的。
    现在通过ajax提交的时候,在filter中无法取的ajax传递的参数值。换成get方式也不行。