DAL 发表于 2017-8-1 11:41:56

JSPWriter 和 servlet引擎中PrintWrier的对比中产生对程序运行的疑问

在学习JSP的out内置属性时发现一个问题

        <!-- 将JSP的缓冲区设为1kb -->
        <%@ page buffer="1kb" import="java.io.*" contenType="text/html" pageEncoding="UTF-8" %>
        <%
           out.clear();
           int counter = Integer.parseInt(request.getParameter("count"));
           for (int i=0; i < count; i++)
           {
             out.write("1");
                }
                PrintWriter servletOut = pageContext.getResponse().getWriter();
                servletOut.write("使用PrintWriter对象输出数据!");
        %>
    有个疑问在浏览器地址栏输入 http://localhost:8080/webdemo/chapter5/testBuffer.jsp?count=1026
   的情况下
页面的响应是
   111111111111111111111111111111....使用PrintWriter对象输出数据!11       
我的问题在于当程序循环把1输入到JSPWriter的缓冲区的时候满了1kb的字符1之后,将缓冲区写入到PrintWriter后,根据页面响应
是程序离开了for循环转而执行了下一个语句”PrintWriter servletOut = pageContext.getResponse().getWriter();“把PrintWriter的内容写入了servlet缓冲区,
然后再回去未完成的for循环中把JSPWriter中清空后再次写入的两个1字符写入了servlet引擎中的缓冲区结束后,再一起写入客户端吗?
还是因为JSPWriter缓冲区满了之后清空输入到servlet引擎的缓冲区的时候就导致下一个语句的PrintWriter和for循环剩下的两次循环一起运行了?那这样还算单线程吗??

凉生我怕怕 发表于 2017-8-1 16:12:28

JSP 是线程不安全的

DAL 发表于 2017-8-1 16:13:47

凉生我怕怕 发表于 2017-8-1 16:12
JSP 是线程不安全的

意思是这是一个单线程但是出现了 同时对servlet的缓冲区的写入的问题是吗? ?

凉生我怕怕 发表于 2017-8-1 17:19:06

你先试试加上这个
<%@ page language="java" import="java.util.*" pageEncoding="UTF8" isThreadSafe="true"%>

DAL 发表于 2017-8-1 22:55:55

凉生我怕怕 发表于 2017-8-1 17:19
你先试试加上这个

还是一样啊isThreadSafe="true"这个只是让它被程序认定为多线程安全的吧 不是把它转换成多线程安全的吧
页: [1]
查看完整版本: JSPWriter 和 servlet引擎中PrintWrier的对比中产生对程序运行的疑问