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

//输出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请求时能够用重定向或是转发:java

request.转发web

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

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

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

重定向服务器

sendRedirect是页面重定向,地址栏信息改变,能够跳转到任意网页,之前的request中存放的变量所有失效,并进入一个新的request做用域。app

<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粘到了一块儿,他们就像是在一个页面 中。 jsp

若是你用过struts,那么你就知道为何在Action中,最后一句几乎老是mapping.findForward("xxx");了。由于咱们在这个Action中设置的请求做用域的变量都将会在下一个页面(也许是另外一个Action)中用到,因此要用转发。函数

相关文章
相关标签/搜索