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

项目中有一个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]});
		}
	}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值