//输出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)中用到,因此要用转发。函数