我希望将一长串请求参数(总共超过2000个字符)从一个.jsp传递到另一个(通过URL),并使接收HTTPServletRequest
看起来就像它正常地接收到请求参数一样。
我不能简单地传递网址,因为IE11会截断网址大约2000个字符(见What is the maximum length of a URL in different browsers?),所以我需要一些变通方法。
用一个.jsp中的键将url保存在ClientSession中是很简单的
public String addValue(String aString) {
String key=""+UUID.randomUUID();
mapValues.put(key, aString);
return key;
}
然后在另一个.jsp中检索它
public String getValue(String key) {
return mapValues.get(key);
}
但是,另一个.jsp需要HTTPServletRequest而不是字符串
也就是说,我需要能够做到
public MyPosition(HttpServletRequest request) {
this.id= (String)request.getParameter("ID");
是否可以通过将检索到的url转换为HTTPServletRequest来实现此目的?
我知道我可以重写MyPosition
以获取字符串并直接从那里提取数据,但我不希望接触非常冗长的遗留代码。
如果我可以对请求执行setParameter
,那么这将是一个解决方案。但这样的选项不可用(请参阅HttpServletRequest - SetParameter)
发布于 2018-06-28 00:29:24
我尝试了@dimplex和@Deadron的解决方案,我认为这两个解决方案都应该可以工作,但在我可用的短时间内都没有实现。
最后,我将MyPosition
函数中的HTTPServletRequest request
参数替换为String urlKey
,并在函数中添加了以下行
RequestStr request=new RequestStr(cSession,urlKey);
现在,我的现有代码根本不需要更改,request.getParameter("paramName")
将调用下面的函数。
public class RequestStr {
String url = "";
public RequestStr(ClientSession cSession, String urlKey) {
super();
this.url = cSession.getValue(urlKey);
}
public String getParameter(String aParam) {
int i = url.indexOf("?" + aParam + "=");
if (i == -1) {
i = url.indexOf("&" + aParam + "=");
}
if (i == -1) {
return null;
} else {
int j = url.indexOf("&", i + 1);
if (j == -1) {
return url.substring(i + aParam.length() + 2);
} else {
return url.substring(i + aParam.length() + 2, j);
}
}
}
}
因此,我所需要做的就是将会话中的超长网址保存在一个带有键urlKey
的映射中,然后在请求中传递这个urlKey
,然后我就可以通过urlKey
检索这个长网址,然后通过我的RequestStr
类对其进行解码
发布于 2018-06-06 22:56:36
修改HttpServletRequest的唯一方法是对其执行wrap操作。
发布于 2018-06-09 06:29:43
听起来你想发出一个标准的POST请求,而不是GET请求。
https://stackoverflow.com/questions/50723034
复制相似问题