环境:tomcat5.5+jre1.6.0_07,windows2003server
用过滤器filter修改过webrequest的一个参数的值以后,在servlet里面用方法getParameterValues getParameterValue分别取出来居然不同??前者是没修改过的,后者是修改过的,我觉得太奇怪,只能以为web请求到达Server以后就开始传递两套参数,一套是数组变量,一套是字窜变量,你在过滤器里面修改了其中一个后另外一个却保持不变。是这样吗?还是我哪里出了问题!!代码如下:
1〉过滤器
package filter;import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.RequestDispatcher;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.*;
import java.util.*;public class ChangeAnswerFilter implements Filter 
{ public void init(final FilterConfig filterConfig) 
{ } public void destroy() 
{ } 
public ChangeAnswerFilter() { 
} public void doFilter(final ServletRequest request, 
final ServletResponse response, 
FilterChain chain) 
throws java.io.IOException, javax.servlet.ServletException 


Vector emptyprameters = new Vector(); 
HttpServletRequest httprequest = (HttpServletRequest)request; 
GenericRequestWrapper wrapper = new GenericRequestWrapper(httprequest); 
Enumeration paramNames = httprequest.getParameterNames(); 
while (paramNames.hasMoreElements()) { 
String paramName = (String)paramNames.nextElement(); 
String[] paramValues = httprequest.getParameterValues(paramName); 
if(paramName.equals("Comment")) 

String paramValue = paramValues[0]; 
if ((paramValue.equals("Please Enter Other Information")))

wrapper.setParameterValue(paramName, "No Comment Added (from ChangeAnswerFilter)"); 
else 

wrapper.setParameterValue(paramName, paramValue);} } 
else 

if (paramValues.length== 1) 

String paramValue = paramValues[0]; 
wrapper.setParameterValue(paramName, paramValue); 



//tools.WriteStringtoWebPage.doWrite(request, response, wrapper.getParameter("Comment"));
chain.doFilter(wrapper, response);
} } 2〉servletpackage servlet;
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.*; 
import java.util.Enumeration; public class FormParameterServlet extends HttpServlet 
{ public void doPost ( HttpServletRequest req, HttpServletResponse resp ) 
throws ServletException,IOException 

// filter.GenericRequestWrapper wrapper=new filter.GenericRequestWrapper(req);
//tools.WriteStringtoWebPage.doWrite(req, resp, wrapper.getParameter("Comment"));
tools.WriteStringtoWebPage.doWrite(req, resp, req.getParameter("Comment"));


Enumeration params = req.getParameterNames(); 
PrintWriter out = resp.getWriter(); 
resp.setContentType("text/html"); 
out.println(" <HTML> "); 
out.println(" <HEAD>"); 
out.println(" <TITLE>FormParameterServlet</TITLE> "); 
out.println(" </HEAD> "); 
out.println(" <BODY BGCOLOR=white> "); 
out.println(" <CENTER> "); 
out.println(" <FONT COLOR='#009999' SIZE='4' face='Arial'> "); 
out.println(" <STRONG>List of all Parameters Sent from the Browser</STRONG> "); 
out.println(" </FONT> "); 
out.println(" </CENTER> "); 
out.println(" <HR> "); 
out.println(" <H2></H2> "); 
out.println("Parameter Lists: <br> "); 
out.println("<CENTER>"); 
out.println ( "<TABLE Border=1 BGCOLOR=WHITE> "); 
out.println("<TR BGCOLOR='#99cee6'> <TH> Name </TH> <TH>Value </TH> </TR> "); 
while( params.hasMoreElements() ) 


String nextparam = (String)params.nextElement();
out.println(req.getParameter(nextparam));
String[] paramarray = req.getParameterValues(nextparam); 
boolean first=true; 
String value = ""; 
for ( int i=0; i<paramarray.length; i++ ) 

if ( !first ) 

value = value + " , "; 

else 

first = false; 

value = value + paramarray[i]; 
} /*
 * getParameterValues获得的值居然和getParameterValue不一样?????!!!!
 */
/*
getParameterValues获得的值是没有修改过的,但用下面的语句就是修改过的
value=req.getParameter(nextparam);

*/
out.println("<TR> <TD> " + nextparam + " </TD> <TD> <I><FONT> " + value + " </FONT></I></TD></TR>" ); 

out.println ( "</TABLE> "); 
out.println("</CENTER>"); 
out.println(" <HR> "); 
out.println(" </BODY> "); 
out.println(" </HTML> " ); 
out.flush(); 

public void doGet ( HttpServletRequest req, HttpServletResponse resp ) 
throws ServletException,IOException 

doPost(req,resp);