首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将非常长的URL传递给HTTPServletRequest

将非常长的URL传递给HTTPServletRequest
EN

Stack Overflow用户
提问于 2018-06-06 22:33:22
回答 3查看 176关注 0票数 0

我希望将一长串请求参数(总共超过2000个字符)从一个.jsp传递到另一个(通过URL),并使接收HTTPServletRequest看起来就像它正常地接收到请求参数一样。

我不能简单地传递网址,因为IE11会截断网址大约2000个字符(见What is the maximum length of a URL in different browsers?),所以我需要一些变通方法。

用一个.jsp中的键将url保存在ClientSession中是很简单的

代码语言:javascript
复制
public String addValue(String aString) {
    String key=""+UUID.randomUUID();
    mapValues.put(key, aString);
    return key;
}

然后在另一个.jsp中检索它

代码语言:javascript
复制
public String getValue(String key) {
        return mapValues.get(key);
}

但是,另一个.jsp需要HTTPServletRequest而不是字符串

也就是说,我需要能够做到

代码语言:javascript
复制
public MyPosition(HttpServletRequest request) {
        this.id= (String)request.getParameter("ID");

是否可以通过将检索到的url转换为HTTPServletRequest来实现此目的?

我知道我可以重写MyPosition以获取字符串并直接从那里提取数据,但我不希望接触非常冗长的遗留代码。

如果我可以对请求执行setParameter,那么这将是一个解决方案。但这样的选项不可用(请参阅HttpServletRequest - SetParameter)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-28 00:29:24

我尝试了@dimplex和@Deadron的解决方案,我认为这两个解决方案都应该可以工作,但在我可用的短时间内都没有实现。

最后,我将MyPosition函数中的HTTPServletRequest request参数替换为String urlKey,并在函数中添加了以下行

代码语言:javascript
复制
RequestStr request=new RequestStr(cSession,urlKey);

现在,我的现有代码根本不需要更改,request.getParameter("paramName")将调用下面的函数。

代码语言:javascript
复制
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类对其进行解码

票数 0
EN

Stack Overflow用户

发布于 2018-06-06 22:56:36

修改HttpServletRequest的唯一方法是对其执行wrap操作。

票数 1
EN

Stack Overflow用户

发布于 2018-06-09 06:29:43

听起来你想发出一个标准的POST请求,而不是GET请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50723034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档