在实际开发中,有时候需要用一个JSP打开另一个JSP,通常还会需要带一些参数在新打开的页面显示或处理,这里整理出一些打开方式和对应的参数接收方法:
一、打开方式
1、通过form表单
<body>
<form action='page.jsp' method='get'>
<input type='text' name='name' value='value'/>
<button type='submit'>提交</button>
</form>
</body>
2、通过open命令
<body>
<button type='submit' οnclick="window.open('page.jsp?name=value')">提交</button>
</body>
<script type="text/javascript">
function openPage(){
window.open('page.jsp?name=value');
}
</script>
<body>
<button type='submit' οnclick="openPage()">提交</button>
</body>
3、通过location命令
<body>
<button type='submit' οnclick="location.href='page.jsp?name=value'">提交</button>
</body>
<script type="text/javascript">
function openPage(){
location.href='page.jsp?name=value';
}
</script>
<body>
<button type='submit' οnclick="openPage()">提交</button>
</body>
4、其他方法
(1)在jsp中编写java代码,使用request的转发方法或response的重定向方法
(2)使用jstl的forward标签
(3)有些前端框架,根据在js原有方法的基础上封装了一些打开页面的方法,如:miniUI的“mini.open()”等,具体可参照框架对应的API。
二、接收方式
以上几种方式中,除了form表单提交且method选择posty外,其他方式都是将数据直接跟在url地址后面,根据获取后的用途不同,通常可以有以下两种方式获取:
1、在页面中获取并显示
<body>
<%=request.getParameter("name") %>
${param.name }
</body>
Tips:如果使用EL表达式,不能直接使用属性名直接获取,需要使用param.属性名
2、在js中获取并使用
<script type="text/javascript">
$(function(){
//获取url中"?"符后的字串,含"?"
var urldata = location.search;
var name = '';
if(urldata!=''){
var aData = urldata.substr(1).split('&');
for(var i = 0;i < aData.length ; i++){
if('name' == aData[i].split('=')[0]){
name = aData[i].split('=')[1];
}
}
$("#p").val(name);
}
});
</script>
<body>
value:<input id='p' type='text' name='name'/>
</body>
三、对比和建议
1、open和location的区别在于open在新页面打开,而location是将原页面覆盖后打开,实际开发中可根据需要进行选择。
2、若传递过去的参数只需要在新的页面对应位置显示,建议使用EL表达式进行接收,并且参数复制的时候,进行判断,防止页面出现null或undefined。
3、post方式传参在js中的接收,需要借助其他技术,一般不建议使用
4、大量数据的传递,建议使用post方式,防止url过大浏览器报错。