关于提交表单的提交及异步问题

//输出json类型的字符流(自定义函数)
protected void writeAjaxResult(JSONObject jsonData, ServletResponse response) {
try {
 OutputStream os = response.getOutputStream();
 os.write(jsonData.toString().getBytes("UTF-8"));
 os.flush();
 os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//调用输出流 MessageCallBack自定义实体类(有) 
MessageCallBack callback = new MessageCallBack(Message,Status等属性);
        callback.setMessage("您提交的相关表单数据字符含有非法字符!");
        callback.setStatus("403");
            JSONObject json = JSONObject.fromObject(callback);
            this.writeAjaxResult(json, response);
//获取当前路径
String last_url = request.getHeader("Referer");

当不为ajax请求时可以用重定向或是转发:

request.转发

getRequestDispatcher是服务器内部跳转,转发,地址栏信息不变,只能跳转到web应用内的网页,以前的request中存放的变量不会失效,就像把两个页面拼到了一起。 

<jsp:forward page="d.jsp"/>

运 行程序,你会发现c页面中的内容没有显示出来,因为forward是自动执行的,地址栏中虽然是c.jsp但实际上,但浏览器中显示的已经是d.jsp的 内容了,而且看到了从b.jsp传过来的参数。

重定向

sendRedirect是页面重定向,地址栏信息改变,可以跳转到任意网页,以前的request中存放的变量全部失效,并进入一个新的request作用域。

<a href="c.jsp?age=23">
为ajax请求时:需异步跳转
protected void writeAjaxResult(JSONObject jsonData, HttpServletResponse response) {
try {
 OutputStream os = response.getOutputStream();
 os.write(jsonData.toString().getBytes("UTF-8"));
 os.flush();
 os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
messageCallBack.setStatus("200");
messageCallBack.setMessage("申请成功!");
messageCallBack.setUrl(GoodsConstant.getPendingAuditGoods);
JSONObject jsonData = JSONObject.fromObject(messageCallBack);
this.writeAjaxResult(jsonData, response);
return null;

重定向的速度比转发慢,因为浏览器还得发出一个新的请求。同时,由于重定向方式产生了一个新的请求,所以经过一次重 定向后,request内的对象将无法使用。

转发,就是延长了requestB-C的作用 域,<jsp:forwardpage="d.jsp"/>,这一句话实际上是把c.jsp和d.jsp粘到了一起,他们就像是在一个页面 中。 

如果你用过struts,那么你就知道为什么在Action中,最后一句几乎总是mapping.findForward("xxx");了。因为我们在这个Action中设置的请求作用域的变量都将会在下一个页面(也许是另一个Action)中用到,所以要用转发。

转载于:https://my.oschina.net/githubhty/blog/648420

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值