# Struts 使用的技术

**URL:** <https://www.isharkfly.com/t/struts/6546>\
**Category:** 程序语言\
**Created:** [June 28, 2011, 8:29pm UTC](https://www.isharkfly.com/t/struts/6546 "2011-06-28T20:29:26Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [June 28, 2011, 8:29pm UTC](https://www.isharkfly.com/t/struts/6546/1 "2011-06-28T20:29:26Z")

</div>

使用Struts的应用开发使用了大量的使能技术。这些技术并不是专门针对Struts ，而是所有Java web应用都可以使用的。

开发者使用Struts之类的框架是为了隐藏在诸如HTTP， CGI，以及JSP之类技术后面的繁琐的细节。

作为一个Struts开发者，你并不需要知晓所有的相关知识，但是这些基本技术的工作原理可能有助于你针对棘手问题设计出创造性的方案。

超文本传输协议 (HTTP)  
当两个国家之间进行调解时，外交官们总是遵循一定的正式协议。

外交协议设计来避免误解，以及防止谈判破裂。

同样，当计算机间需要对话，他们也遵循一个正式的协议。

这个协议定义数据是如何传输，以及他们到达后如何进行解码。Web应用程序就是使用HTTP协议在运行浏览器的计算机和运行的服务器的程序间传输数据。

很多服务器应用程序使用HTTP之外的其他协议。

他们在计算机之间维护一个持久性的的连接。

应用服务器可以清楚的知道是谁连接上来，而且何时中断连接。

因为他们知道每一个连接的状态，以及每一个使用它的人。这称之为状态协议。

相反， HTTP 是一个无状态协议。

HTTP server 可以接受来自于各种客户的各种请求，并提供各种响应，即使是这个响应仅仅是说No。

没有大量的协商和连接持久性，无状态协议可以处理大量的请求。

这也是Internet可以扩展到很多计算机的原因。

HTTP成为通用标准的原因是其简单性。

HTTP 请求看起来就像一个平常的文本文档。

这使应用程序很容易创建HTTP请求。你甚至可以通过标准的程序如Telnet来手动传递一个HTTP请求。

当HTTP 响应返回时，他也是一个开发者可以直接阅读的平面文本。

HTTP请求的第一行包含方法，其后是请求的来源地址和HTTP版本。

HTTP请求头跟在首行后面，可以没有也可以有多个。

HTTP 头向服务器提供额外的信息。

可以包括浏览器的种类和版本，可接受的文档类型，浏览器的 cookies等等。

7种请求方法中， GET 和 POST 是用得最多的。

一旦服务器接收到请求，他就要产生一个HTTP响应。

响应的第一行称为状态行，包含了HTTP协议的版本，数字型状态，以及状态的简短描述。

状态行后，服务器将返回一个HTTP 响应头，类似于HTTP请求头。

如上所述， HTTP并不在请求间保持状态信息。

服务器接受请求，发出响应，并且继续愉快地处理文本请求。

因为简单和效率，无状态协议不适合于需要跟踪用户状态的动态应用。

Cookies 和 URL 重写是两个在请求间跟踪用户状态的方式。

cookie 是一种特殊的信息包，存储于用户的计算机中。

URL 重写是在页面地址中存储一个特殊的标记，Java 服务器可以用它来跟踪用户。

这两种方法都不是无缝的，是用哪一个都意味着在开发时都要进行额外的工作。

对其本身来说，标准的HTTP web 服务器并不传输动态内容。

它主要是使用请求来定位文件资源，并在响应中返回此资源。

通常这里的文件使用Hypertext Markup Language (HTML) [W3C, HTML] 格式化，以使浏览器可以显示它们。HTML页面通常包含一些到其他页面的超文本连接，也可以显示其他一些内容比如图像和视频等等。用户点击连接将产生另一个请求，就开始一个新的处理过程。

标准web 服务器处理静态内容处理得很好，但处理动态内容时则需要额外的帮助手段了。

静态内容直接来自于文本或数据文件，比如HTML 或者 JPEG 文件。这些文件可以随时改变，但通过浏览器请求时，却不能自动改变。

相反，动态内容是临时产生的，典型地，它是针对浏览器的个别请求的响应。
