首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

重定向url中带参数有关问题,以及http 参数解析

2013-11-09 
重定向url中带参数问题,以及http 参数解析进入一个页面处理完后还要返回到进入的页面,常见场景是 1)登陆重

重定向url中带参数问题,以及http 参数解析

进入一个页面处理完后还要返回到进入的页面,常见场景是 1)登陆重定向 2)从不同的入口进入公共页面,处理完成后返回到进入的页面。

?

下面链接会进入到公共上传页面,完成后返回activity/moke/toStep?activityId=234&tempStepId=33&index=2

<a

href="/activity/moke/to_uploadFile?activityId=234&actStepId=185&redirectParam=activity/moke/toStep?activityId=234&tempStepId=33&index=2"

style="text-align: left;">?

在上传页面内通过hidden记录要返回的页面

?<input type="hidden" name="redirectParam" value="${redirectParam }" />

上传页面提交后直接重定向到redirectParam即可。

.....

return "redirect:/"+redirectParam;

?

?

存在的问题是:在后台request中获得redirectParam参数只能获取部分参数,后面的tempStepId=33&index=2参数丢失了。这样导致上传页面内hidden redirectParam中只有部分参数,这样重定向后的页面参数就不对了。<

?

解决办法:将redirectParam的全部值编码,变成如下形式

redirectParam=。。。activityId%3D234%26tempStepId%3D32%26index%3D1

这样后台就将这个值当做一个整体来处理,生成上传页面内的hidden redirectParam中包含全部的参数,示例如下<

input中的内容也会当做一个整体来处理,这样获取redirectParam的值后重定向就正确了。

?

在freemarker中使用自定义函数来编码

<#assign urlEncode="cn.com.teacher.cistus.dt.common.freemarker.url.UrlEncode"?new()>

<a href="。。。。&actStepId=${step2.id}&redirectParam=${urlEncode(redirectParam)}"

?

import jodd.servlet.URLCoder;

public class UrlEncode implements TemplateMethodModel{
??? @Override
??? public Object exec(List arguments) throws TemplateModelException {
??? ??? String rulParam=(String) arguments.get(0);
??? ??? return URLCoder.encodeQuery(rulParam);
??? }
}

总结:url中的&符号会被当做参数分割符,将&转码后就不是参数分割符了,而input中的&按普通字符来处理,并且转码后的&输出到页面时会自动变回成&。

也可以通过标准的js方法encodeURIComponent来将url中多个参数编码

http://cas.teacher.com.cn/logincheck?sub=1&f="+encodeURIComponent('a=1&b=2&c=3')

这样后台获取到f的值是a=1&b=2&c=3

?

热点排行