环境: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);
}
}
用过滤器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);
}
}
解决方案 »
- 求问一个jsp小问题?
- 到主机 的 TCP/IP 连接失败.
- 如果一条数据都没有查询出来。让他出现一个没有数据的一个提示
- 谁注解的越明白,分全部给他她
- 求一条统计用的sql
- 关于eWebEditor在线文本编辑器--怎么插入Mysql数据库
- NoClassDefFoundError,NoSuchMethodError.在开发jsp应用程序时出现的错误
- jsp或java如何调用VC封装好的OCX控件!
- 哪里有跟JSP或数据库相关的英文资料下载(100分)
- jsp查询数据如何在网页显示
- 最近在用spring+hibernate,可是一定要使lazy=“false”,否则涉及到Set时,会报错。
- eclipse 开发 JSP 遇到的问题
getParameterValues 返回的是数组 在用索引获取.