如果不允许使用session,也可以这样(不过WebLogic集群环境默认配置也应该使用session stick的,不应该出现会话丢失问题) 在这个页面中增加 <script> var param = { 参数1:"参数1的值", 参数2:"参数2的值" }然后在imageAction.jsp中, <form action="真正的处理jsp页面" method="post" id="myform"> </form> <script> var param = window.parent.param; var form = document.getElementById('myform'); for(var x in param) { var input = document.createElement("INPUT"); input.type="hidden"; input.name = x; input.value = param[x]; form.appendChild(input); } form.submit(); </script> 其实就是通过javascript将param动态生成form,然后提示这个form就可以了
有没什么办法能压缩我那4000多字节的URL参数么,压缩一半。
刚如果用post提交后应该不在我原本的frame框架里了吧。
压缩可以使用GZIPOutputStream就可以,但是如果你URL超大,仍然可能超过ByteArrayOutputStream baos = new ByteArrayOutputStream(); GZIPOutputStream out = new GZIPOutputStream(baos); out.write("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".getBytes()); out.close(); String code = new BASE64Encoder().encode(baos.toByteArray()); //若作为URL参数,可能需要response.encodeURL编码一次 System.out.println(code); 解码就是相反操作了 GZIPInputStream in = new GZIPInputStream(new ByteArrayInputStream(new BASE64Decoder().decodeBuffer(code))); baos = new ByteArrayOutputStream(); byte[] b = new byte[1024]; int readed; while((readed = in.read(b)) > 0) baos.write(b, 0, readed); in.close(); System.out.println(baos.toString());
在java代码里也可以Post方式提交啊,不一定非要在页面form中才可以post
请问如何在这里改为 POST提交 src="<%= imageAction %>" 里面是一串url地址。
<frame src="imageAction.jsp"这个JSP只做以下输出而已
<form action="真正的处理jsp页面" method="post" id="myform">
<input type="hidden" name="参数" value="参数值">
</form>
<script>
document.getElementById('myform').submit();
</script>这样实际上是使用imageAction.jsp中转了一次,生成post请求。这样可以没有大小限制。
在这个页面中增加
<script>
var param = {
参数1:"参数1的值",
参数2:"参数2的值"
}然后在imageAction.jsp中,
<form action="真正的处理jsp页面" method="post" id="myform">
</form>
<script>
var param = window.parent.param;
var form = document.getElementById('myform');
for(var x in param) {
var input = document.createElement("INPUT");
input.type="hidden";
input.name = x;
input.value = param[x];
form.appendChild(input);
}
form.submit();
</script>
其实就是通过javascript将param动态生成form,然后提示这个form就可以了
GZIPOutputStream out = new GZIPOutputStream(baos);
out.write("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111".getBytes());
out.close();
String code = new BASE64Encoder().encode(baos.toByteArray());
//若作为URL参数,可能需要response.encodeURL编码一次
System.out.println(code);
解码就是相反操作了
GZIPInputStream in = new GZIPInputStream(new ByteArrayInputStream(new BASE64Decoder().decodeBuffer(code)));
baos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int readed;
while((readed = in.read(b)) > 0)
baos.write(b, 0, readed);
in.close();
System.out.println(baos.toString());