访问一开始就是一个过滤器,为什么Struts2可以直接将内容输出到网页,直接输出时也没有转发,也没有相新建转发的servlet或jsp
,看了书上说action与servlet是没有关系的,是相互独立的,只是普通的java类,过滤器最终将转到哪个页面上呢,而且并没有新建servlet或jsp,那为什么response.getWriter().write(data)就有页面和信息了呢。
比如action中的
   public String execute(){
            String data = "直接输出";
   HttpServletResponse response = ServletActionContext.getResponse();
   response.setContentType("text/html;charset=UTF-8");
   response.getWriter().write(data);
           return success
   }
response.getWriter().write(data);这句是将数据打印在哪里,我并没有新建servlet或相应的jsp,开始的就是一个过滤器,最终的页面是哪里产生的呢。请问大虾们为什么?

解决方案 »

  1.   

    你去看看servlet的基础,,就知道了,response.getWriter().write(data);是可以直接打给浏览器的
      

  2.   

    这是http 协议的一部分
    从http流中输出就是输出到接收端,在浏览器中,网页就是端。
    所以out.write就是输出到网页
      

  3.   

    response.getWriter().write(data);是可以直接打给浏览器的,但是这个方法在哪里调用都行吗?是jsp或者servlet里吧,在普通的java类可以吗?,没有servlet或jsp你往哪里response.getWriter().write(data);
      

  4.   

    response.getWriter().write(data);是否需要一个载体(servlet/jsp)来存放data信息。
      

  5.   

    回复:2楼,3楼
     
    response.getWriter().write(data)是直接输出在请求的servlet/jsp中,前提是访问的servlet/jsp存在。response就是此次请求(request一个servlet/jsp)中的请求响应对像,它的输出会打印在此次请求的页面中,而且请求必须是存在,不然肯定是404了。这一点可以认同吗?,如何说的不对,请给一个示例。如果认同,下面再说一下我的问题:我们请求一个Struts2的action,开始一个过滤器进行过滤请求,请求xxx.do交给Struts2处理,注意xxx.do只是一个url的形式,只是说明这个请求要struts2来处理,Struts2接收reponse,request的请求参数,action的调用过程就不说了。action的调用结束后,会执行Result的实现类。根据结果类型层现相应的画面。如: request转发等,转发是好理解的。现在小弟不明白的是:直接输出信息在页面上像一个servlet一样,Struts2是怎么做的,是一个什么样的思路。有意技术交流者加我:271139169
      

  6.   

    struts的action实际上就是一个servlet,通过ActionServlet可以方便的调用web上下文,内置对象等,可通过response.getWriter()想客户端浏览器输出数据。
      

  7.   

    若是你的struts2配置文件里的action没有配置相应的转发或重定向页面的话,response.getWriter().write(data);默认将数据输出到请求页面的。
      

  8.   

    楼上的兄弟的可以说一下细节,只是这样说一下是不能让人理解的。你说的输出到请求页面上,请问你的请求页面是什么,难到是xxx.do吗?,这个也不是页面啊。可以说明一下,输出的细节,在哪里输出,为什么会输出来。