jsp include 参数混乱,获取到请求主页面的参数了,清空request parameter

来源:互联网 发布:图片收费网站源码 编辑:程序博客网 时间:2024/05/17 03:57

项目中有一个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重写,如下:

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]});}}}






0 0