首页 > 编程知识 正文

创建对象的过程,单测怎么获取http请求对象

时间:2023-05-06 21:04:49 阅读:51454 作者:1821

创建HttpResponse对象的HttpResponse类实现javax.servlet.http.http servlet response。 跟随它的是一个名为HttpResponseFacade的faade类。 Figure 3.3显示了HttpResponse类及其关联类的UML图。

第二章使用部分实现的HttpResponse类。 例如,该getWriter方法返回一个在调用其中一个print方法时不会自动清除的java.io.PrintWriter对象。 在本章中,APP应用程序将修复此问题。 为了理解它是如何修复的,我们需要知道Writer是从什么来的。

在servlet中,你用打印机写字节。 可以使用任何编码,但这些字节将作为字节流发送到浏览器中。 因此,第2章中ex02.pyrmont.HttpResponse类的getWriter方法就不足为奇了。

公共打印机写入器获取写入器(

//if autoflush is true,println () will flush,

//but print () will not。

//theoutputargumentisanoutputstream

writer=new打印机(output,true );

返回写入器;

}您是如何构建PrintWriter对象的? 通过传递java.io.OutputStream实例实现的。 您传递给PrintWriter的任何print或println方法都将在下面的OutputStream中发送。

本章使用ex03.pyr mont.connector.response stream类的实例代替PrintWriter

输出流。 请注意,类ResponseStream是间接从类java.io.OutputStream传递的。

同样,您使用了继承给PrintWriter的类ex03.pyr mont.connector.response writer。

类ResponseWriter复盖所有print和println方法,这些方法的调用将自动清除输出直到结束

我要去输出流。 因此,我们将使用具有基础响应流对象的响应写入器实例。

可以通过传递ResponseStream对象实例来初始化类ResponseWriter。 但是,将java.io.OutputStreamWriter对象用作ResponseWriter对象和ResponseStream对象之间的桥梁。

OutputStreamWriter将写入的字符以特定的字符集编码为字节。 可以使用名称设置此字符集,可以显式指定该字符集,也可以使用平台接受的默认字符集。 对于每次write方法调用,都会将转换器调用编码为指定的字符。 生成的字节在写入较低的输出流之前存储在缓冲区中。 缓冲区的大小可以自己设置,但对于大多数场景,默认大小已足够。 请注意。 传递给write方法的字符没有缓冲。

因此,getWriter方法为:如下所示

publicprintwritergetwriter throwsioexception

响应sestreamnewstream=newresponsestream (this;

新流. set commit (false;

OutputStreamWriter osr=

newoutputstreamwriter (new stream,getCharacterEncoding ();

写入器=newresponsewriter (osr;

返回写入器;

}

静态资源处理器和servlet处理器类servlet处理器类似于第2章中的ex02.pyr mont.servlet处理器类。 每一个都只有一个方法。 是进程。 但是,ex03.pyr mont.connector.servlet processor的process方法与HttpRequest

HttpResponse而不是Requese和Response实例。 本章的process的方法签名如下所示。

公共语音处理(http请求,HttpResponse response ) {另外,在处理方法中,将http请求facade和HttpResponseFacade

请求和响应的facade类。 另外,正在呼叫

了servlet的service方法之后,它调用了类HttpResponse的
finishResponse方法。

servlet = (Servlet) myClass.newInstance();
HttpRequestFacade requestPacade = new HttpRequestFacade(request);
HttpResponseFacade responseFacade = new HttpResponseFacade(response);
servlet.service(requestFacade, responseFacade);
((HttpResponse) response).finishResponse();

    类StaticResourceProcessor几乎等同于类ex02.pyrmont.StaticResourceProcessor。

运行应用程序

   要在Windows上运行该应用程序,在工作目录下面敲入以下命令:

java -classpath ./lib/servlet.jar;./ ex03.pyrmont.startup.Bootstrap

    在Linux下,你使用一个冒号来分隔两个库:

java -classpath ./lib/servlet.jar:./ ex03.pyrmont.startup.Bootstrap

    要显示index.html,使用下面的URL:

http://localhost:808O/index.html

    要调用PrimitiveServlet,让浏览器指向下面的URL:

http://localhost:8080/servlet/PrimitiveServlet

    在你的浏览器中将会看到下面的内容:

Hello. Roses are red.
Violets are blue.

    注意: 在第2章中运行PrimitiveServlet不会看到第二行。
    你也可以调用ModernServet,在第2章中它不能运行在servlet容器中。下面是相应的URL:

http://localhost:8080/servlet/ModernServlet

    注意: ModernServlet的源代码在工作目录的webroot文件夹可以找到。
    你可以加上一个查询字符串到URL中去测试servlet。加入你使用下面的URL来运行ModernServlet的话,将显示Figure 3.4中的运行结果。

http://localhost:8080/servlet/ModernServlet?userName=直率的店员&password=pwd

Figure 3.4: Running ModernServlet

总结

    在本章中,你已经知道了连接器是如何工作的。建立起来的连接器是Tomcat4的默认连接器的简化版本。正如你所知道的,因为默认连接器并不高效,所以已 经被弃用了。例如,所有的HTTP请求头部都被解析了,即使它们没有在servlet中使用过。因此,默认连接器很慢,并且已经被Coyote所代替了。 Coyote是一个更快的连接器,它的源代码可以在Apache软件基金会的网站中下载。不管怎样,默认连接器作为一个优秀的学习工具,将会在第4章中详 细讨论。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。