首页 > servlet里设置请求转发和PrintWriter流输出有什么区别?

servlet里设置请求转发和PrintWriter流输出有什么区别?

老师讲servlet返回处理结果时讲的是用请求转发的方式
新建一个showJson.jsp

<%[url=home.php?mod=space&uid=2779]@[/url] page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!-- 服务器端程序传递过来的数据,可以用el表达式获得数据
        等同于:request.getAttribute("key");===${key} -->
${json}

然后在servlet.java里用

  JSONArray jsonArray = service.getFoodMenu();

                request.setAttribute("json",jsonArray) ;
////                请求转发
                request.getRequestDispatcher("showMenu.jsp").forward(request, response) ;

的方法向请求返回数据

可是我看到网上有用

                response.setCharacterEncoding("UTF-8");
                response.setContentType("application/json; charset=utf-8");
                PrintWriter out = null;
                try {
                        out = response.getWriter();
                        out.append(jsonArray.toString());
                } catch (IOException e) {
                        e.printStackTrace();
                } finally {
                        if (out != null)
                            out.close();
                   }

返回的 它们有什么区别?该用哪种比较好?


1.用request是将值存放在request的域里面,楼主可以参考jsp的八大对象里面有好几个域,比如session,page等。
2. 用printwrite,是将值写入在响应流里面返回给前端。
3.两者的区别是,前者是需要通过程序去主动获取才能取到,且在跳转后无法获取。后者会被浏览器接受,如果是同步请求会显示在页面上,如果是异步则会显示在ajax的数据对象中。且,request存储的数据有限制仅java一些数据类型,但是printwirt可以响应一些文件类型给前端,比如文件下载就是用它实现的。

【热门文章】
【热门文章】