jsp include 参数混乱,获取到请求主页面的参数了,清空request parameter
2016-07-13 11:33
429 查看
项目中有一个include方法(页面是html),但是是实现上有一些问题,记录下来,有缘人看到希望能帮到你。
当运用jsp include(我这里是用的html,里面自己写了一个include方法)的时候,如果主页面请求带了参数,比如:/home.jsp?id=1,但是在页面include的时候:detail.jsp?name=1&id=2,在这种情况下,我们从request里面获取到的id就是 ,这有时候让人有点头痛,那么怎么才能把上一次的request里面的参数清空呢,大多数人都会想到如下方法:
request.getParameterMap().clear();
那么我恭喜你,思路对了,但是方法错了,等待你的将是:No modifications are allowed to a locked ParameterMap瞬间头大了,当然我这里要说的不是他,既然不能直接清空request里面的参数,那么我们需要将request重写,如下:
将request里面获取和设置参数的方法重写过后,这里面的参数就可以随意更改和设置了
当运用jsp include(我这里是用的html,里面自己写了一个include方法)的时候,如果主页面请求带了参数,比如:/home.jsp?id=1,但是在页面include的时候:detail.jsp?name=1&id=2,在这种情况下,我们从request里面获取到的id就是 ,这有时候让人有点头痛,那么怎么才能把上一次的request里面的参数清空呢,大多数人都会想到如下方法:
request.getParameterMap().clear();
那么我恭喜你,思路对了,但是方法错了,等待你的将是:No modifications are allowed to a locked ParameterMap瞬间头大了,当然我这里要说的不是他,既然不能直接清空request里面的参数,那么我们需要将request重写,如下:
class MyHttpServletRequestWrapper extends HttpServletRequestWrapper { private Map params; public MyHttpServletRequestWrapper(HttpServletRequest originalRequest) { super(originalRequest); params = new HashMap(); } public Map getParameterMap() { return params; } public String getParameter(String name) { return (String) params.get(name); } public Enumeration getParameterNames() { return Collections.enumeration(params.keySet()); } public String[] getParameterValues(String name) { return (String[]) params.get(name); } }
将request里面获取和设置参数的方法重写过后,这里面的参数就可以随意更改和设置了
MyHttpServletRequestWrapper msr = new MyHttpServletRequestWrapper(request); // 清空 String url_path = includePath.indexOf("?") > 0 ? includePath.substring(0, includePath.indexOf("?")) : includePath; String query = includePath.indexOf("?") > 0 ? includePath.substring(includePath.indexOf("?") + 1) : ""; String[] params = query.split("&"); for (String param : params) { if ((param != null) && (!param.equals(""))) { String[] list = param.split("="); if (list.length == 2) { msr.params.put(list[0], new String[]{list[1]}); } } }
相关文章推荐
- UESTC 2016 Summer Training #1 Div.2(未完待续)
- String,StringBuffer和StringBuilder的区别和联系
- Enable DB Query in HUE web UI
- 自定义UIButton
- include与require的区别
- UESTC 2016 Summer Training #2 Div.2(未完待续)
- UI -- UITableView 数据源协议与委托协议
- 解决PKIX:unable to find valid certification path to requested target 的问题
- UGUI富文本
- HDU 5538 House Building
- iOS多线程编程之Operation Queues
- require的按需加载
- easyui在datagrid用formatter添加linkbutton后列表和行号错位
- easyui datagrid宽度设置在ie8无效的问题
- iOS开发工程师与UI视觉设计师不得不说的故事
- UE4通过代码逻辑触发相应事件,相应事件逻辑在蓝图实现
- codeforces 361 D - Friends and Subsequences
- easyui容易被忽略掉的部分
- Request对象中可以获取各种路径信息
- [转]easyui data-options的使用