第十五章_部署

15.1、部署描述符概述

web-app元素为根元素,并且可以利用子元素来指定以下内容

1、servlet声明

2、servlet映射

3、ServletContext初始参数

4、会话配置

5、监听器类

6、过滤器定义和映射

7、MIME类型映射

8、welcome文件列表

9、错误页面

10、JSP相关的特定设置

11、JNDI设置

 

15.1.1、核心元素

context-param

context-param元素用于为ServletContext赋值。它可以通过在ServletContext中调用getInitParameter方法获取到。只要其参数名称在整个应用程序中是唯一的,则可以有多个context-param元素。ServletContext.getInitParameterNames()将返回所有的ServletContext参数名称。

context-param元素中必须包含一个param-name元素和一个param-value元素。param-name元素中包含参数名称,param-value元素中则包含参数值。description元素是可选的,它也可以用来描述参数。

 

[html] view plain copy

 print?

  1. <context-param>  
  2.         <param-name>location</param-name>  
  3.         <param-value>localhost</param-value>  
  4.     </context-param>  
  5.     <context-param>  
  6.         <description>The port number used</description>  
  7.         <param-name>port</param-name>  
  8.         <param-value>8080</param-value>  
  9.     </context-param>  

distributable

distributable元素用来表明这个应用程序应该部署到一个分布式的Servlet/JSP容器中,distributable元素必须为空。例如,下面就是一个distributable元素

[html] view plain copy

 print?

  1. <distributable/>  

error-page

error-page元素中包含了一个HTTP错误码与一个资源路径之间的映射,或者是一种Java异常类型与一个资源路径之间的映射。error-page元素命令容器,在发生HTTP错误事件,或者抛出指定的异常时,应该返回指定的资源。

该元素中必须包含以下子元素:

1、error-code,指定一个HTTP错误码。

2、exception-type,指定要不活的java异常类型的全类名

3、location,指定要在错误事件或者异常中显示的资源的位置,location元素必须以/开头。

下面就是一个error-page元素的例子:

[html] view plain copy

 print?

  1. <error-page>  
  2.         <error-code>404</error-code>  
  3.         <location>/error.html</location>  
  4.     </error-page>  

filter

该元素用来指定一种Servlet过滤器,它至少包含一个filter-name元素和一个filter-class元素。另外,它还可以可选的包含以下元素:icon、display-name、description、init-param和async-supported。

filter-name元素定义过滤器的名称。过滤器的名称在整个应用程序中必须是唯一的。filter-class元素指定过滤器类的全类名,init-param元素用来指定过滤器的初始参数,其元素描述与<context-param>的相同。filter元素中可以有多个init-param元素。

下面是两个filter元素,其名称分别为UpperCaseFilter和ImageFilter。

[html] view plain copy

 print?

  1. <filter>  
  2.         <filter-name>UpperCaseFilter</filter-name>  
  3.         <filter-class>com.example.UpperCaseFilter</filter-class>  
  4.     </filter>  
  5.     <filter>  
  6.         <filter-name>ImageFilter</filter-name>  
  7.         <filter-class>com.example.ImageFilter</filter-class>  
  8.         <init-param>  
  9.             <param-name>frequency</param-name>  
  10.             <param-value>1909</param-value>  
  11.         </init-param>  
  12.         <init-param>  
  13.             <param-name>resolution</param-name>  
  14.             <param-value>1024</param-value>  
  15.         </init-param>  
  16.     </filter>  

filter-mapping

filter-mapping元素定义过滤器要应用到的一个或多个资源。过滤器也可以应用于Servlet或者URL模式,将过滤器映射到Servlet,将致使过滤器的作用于Servlet。将过滤器映射到URL模式,则将使过滤器作用于所有其URL与URL模式匹配的任意资源。它们的过滤顺序与filter-mapping元素在部署描述符中出现的顺序一致。

filter-mapping元素中包含了一个filter-name元素和一个url-pattern元素,或者servlet-name元素。

filter-name值必须与利用filter元素声明的某一个过滤器的名称相匹配。

下面是两个filter元素和两个filter-mapping元素:

[html] view plain copy

 print?

  1. <filter>  
  2.         <filter-name>Logging Filter</filter-name>  
  3.         <filter-class>com.example.LoggingFilter</filter-class>  
  4.     </filter>  
  5.     <filter>  
  6.         <filter-name>Security Filter</filter-name>  
  7.         <filter-class>com.example.SecurityFilter</filter-class>  
  8.     </filter>  
  9.     <filter-mapping>  
  10.         <filter-name>Logging Filter</filter-name>  
  11.         <servlet-name>FirstServlet</servlet-name>  
  12.     </filter-mapping>  
  13.     <filter-mapping>  
  14.         <filter-name>Security Filter</filter-name>  
  15.         <url-pattern>/*</url-pattern>  
  16.     </filter-mapping>  

listener

listener元素用来注册一个监听器,它包含一个listener-class元素,用于定义监听器类的全类名,例如:

[html] view plain copy

 print?

  1. <listener>  
  2.         <listener-class>com.example.AppListener</listener-class>  
  3.     </listener>  

locale-encoding-mapping-list和locale-encoding-mapping

locale-encoding-mapping-list元素中包含一个或多个locale-encoding-mapping元素。locale-encoding-mapping元素将一个语言环境的名称映射成一个编码,并且包含一个locale元素和一个encoding元素。<locale>的值必须是ISO 639中定义的某一个language-code,例如en,或者是一个language-code_country-code,例如en_US。如果使用的是language-code_country-code,那么country-code部分必须为ISO 3166中定义的某一个国家代码。

例如,下面的locale-encoding-mapping-list中包含了一个locale-encoding-mapping元素,它将japanese(日文)映射成Shift_JIS编码。

[html] view plain copy

 print?

  1. <locale-encoding-mapping-list>  
  2.         <locale-encoding-mapping>  
  3.             <locale>ja</locale>  
  4.             <encoding>Shift_JIS</encoding>  
  5.         </locale-encoding-mapping>  
  6.     </locale-encoding-mapping-list>  

login-config

login-config元素指定用来验证用户的验证方法,如果采用基于表单的验证,那么则还可以定义表单登录机制所需的realm名称和属性。login-config元素中有一个可选的auth-method元素,一个可选的realm-name元素,和一个可选的form-login-config元素。

auth-method元素指定访问验证方法,它的值可能为:BASIC、DIGEST、FORM或者CLIENT-CERT。

realm-name元素指定要在Basic访问验证和Digest访问验证中使用的realm名称。

form-login-config元素指定在基于表单的验证中要用到的登录页面和错误页面。如果没有使用基于表单的验证,则可以忽略这些元素。

form-login-config元素中有一个form-login-page元素和一个form-error-page元素,form-login-page元素指定显示Login页面的资源路径。这个路径必须以“/”开头,并且是相对与应用程序目录的。

form-error-page元素用于指定在登录失败时显示错误页面的资源路径。这个路径必须以/开头,并且是相对于应用程序的目录的。

举个例子:

[html] view plain copy

 print?

  1. <login-config>  
  2.         <auth-method>DIGEST</auth-method>  
  3.         <realm-name>Members Only</realm-name>  
  4.     </login-config>  

再举个例子:

[html] view plain copy

 print?

  1. <login-config>  
  2.         <auth-method>FORM</auth-method>  
  3.         <form-login-config>  
  4.             <form-login-page>/loginForm.jsp</form-login-page>  
  5.             <form-error-page>/errorPage.jsp</form-error-page>  
  6.         </form-login-config>  
  7.     </login-config>  

mime-mapping

mime-mapping元素是将一个MIME类型映射成一个扩展,它包含一个extension元素和一个mime-type元素。extension元素描述扩展,mime-type元素指定MIME类型。例如,下面就是一个mime-mapping元素的例子:

[html] view plain copy

 print?

  1. <mime-mapping>  
  2.         <extension>txt</extension>  
  3.         <mime-type>text/plain</mime-type>  
  4.     </mime-mapping>  

security-constraint

security-constraint元素可以通过声明的方式来限制对某个资源集合的访问。

security-constraint元素中包含一个可选的display-name元素,一个或多个web-resource-collection元素,一个可选的auth-constraint元素,以及一个可选的user-data-constraint元素。

web-resource-collection元素定义需要限制访问的资源集合。在这里,可以定义一个或者多个URL模式,以及一个或者多个需要受到限制的HTTP方法。如果没有指定HTTP方法,那么这个安全约束将应用于所有的HTTP方法。

auth-constraint元素定义可以访问该资源集合的用户角色。如果没有设置auth-constraint元素,那么该安全约束将应用于所有角色。

user-data-constraint元素用来指明在客户与Servlet/JSP容器之间的传输的数据应该如何进行保护。

web-resource-collection元素中包含一个web-resource-name元素,一个可选的description元素,有零个或者多个url-pattern元素,以及有零个或者多个http-method元素。

web-resource-name元素中包含了一个与被保护资源相关的名称

http-method元素中可以设置一个HTTP方法,如GET、POST或者TRACE。

auth-constraint元素中包含一个可选的description元素,有零个或者多个role-name元素。role-name元素中包含某个安全角色的名称。

user-data-constraint元素中包含一个可选的description元素和一个transport-guarantee元素。transport-guarantee元素必须具有以下其中一个值:NONE、INTEGRAL或者CONFIDENTIAL。NONE表示该应用程序不需要传输保证。INTEGRAL表示服务器与客户端之间的数据应该以一种在传输过程中无法更改的方式进行发送。CONFIDENTIAL表示所传输的数据必须进行加密。在大多数情况下,SSL是用于INTEGRAL或者CONFIDENTIAL的。

以下是一个范例:

[html] view plain copy

 print?

  1. <security-constraint>  
  2.         <web-resource-collection>  
  3.             <web-resource-name>Members Only</web-resource-name>  
  4.             <url-pattern>/members/*</url-pattern>  
  5.         </web-resource-collection>  
  6.         <auth-constraint>  
  7.             <role-name>payingMember</role-name>  
  8.         </auth-constraint>  
  9.     </security-constraint>  
  10.     <login-config>  
  11.         <auth-method>Digest</auth-method>  
  12.         <realm-name>Digest Access Authentication</realm-name>  
  13.     </login-config>  

security-role

security-role元素用来指定安全约束中所有的安全角色声明。这个元素有一个可选的description元素和一个role-name元素。下面是一个security-role元素的示例。

[html] view plain copy

 print?

  1. <security-role>  
  2.         <role-name>payingMember</role-name>  
  3.     </security-role>  

servlet

servlet元素用来声明一个Servlet,它可以包含以下元素:

1、一个可选的icon元素

2、一个可选的description元素

3、一个可选的display-name元素

4、一个servlet-name元素

5、一个servlet-class元素,或者一个jsp-file元素

6、有零个或者多个init-param元素

7、一个可选的load-on-startup元素

8、一个可选的run-as元素

9、一个可选的enabled元素

10、一个可选的async-supported元素

11、一个可选的multipart-config元素

12、有零个或者多个security-role-ref元素

将安全角色引用PM映射到名为payingMember的安全角色,其语法如下:

[html] view plain copy

 print?

  1. <security-role-ref>  
  2.             <role-name>PM</role-name>  
  3.             <role-link>payingMember</role-link>  
  4.         </security-role-ref>  

在这个例子中,如果是由属于payingMember安全角色的用户调用Servlet,那么调用isUserInRole(“payingMember”)时,其结果将为true。

下面是个servlet元素的例子:

[html] view plain copy

 print?

  1. <servlet>  
  2.         <servlet-name>UploadServlet</servlet-name>  
  3.         <servlet-class>com.brainysoftware.UploadServlet</servlet-class>  
  4.         <load-on-startup>10</load-on-startup>  
  5.     </servlet>  
  6.     <servlet>  
  7.         <servlet-name>SecureServlet</servlet-name>  
  8.         <servlet-class>com.brainysoftware.SecureServlet</servlet-class>  
  9.         <load-on-startup>20</load-on-startup>  
  10.     </servlet>  

servlet-mapping

servlet-mapping元素将一个Servlet映射到一个URL模式。servlet-mapping元素必须有一个servlet-name元素和一个url-pattern元素。

下面的servlet-mapping元素将一个Servlet映射到URL模式/first。

[html] view plain copy

 print?

  1. <servlet>  
  2.         <servlet-name>FirstServlet</servlet-name>  
  3.         <servlet-class>com.brainysoftware.FirstServlet</servlet-class>  
  4.     </servlet>  
  5.     <servlet-mapping>  
  6.         <servlet-name>FirstServlet</servlet-name>  
  7.         <url-pattern>/first</url-pattern>  
  8.     </servlet-mapping>  

session-config

session-config元素为javax.servlet.http.HttpSession实例定义参数,这个元素可以包含一个或者多个以下元素:session-timeout、cookie-config或tracking-mode。

session-timeout元素定义默认回话超时的时间间隔,其单位为分钟。这个值必须为整数值。如果session-timeout元素的值为0,或者为负数,那么这个回话将永远不会超时。

cookie-config元素定义会话的配置,用来追踪这个Servlet/JSP应用程序创建的cookie。

tracking-mode元素为该WEB应用程序创建的会话定义追踪模式,其有效值为COOKIE、URL或者SSL。

下面的session-config元素将使当前应用程序中的HttpSession对象在12分钟没有活动之后失效。

[html] view plain copy

 print?

  1. <session-config>  
  2.         <session-timeout>12</session-timeout>  
  3.     </session-config>  

welcome-file-list

welcome-file-list元素定义了当用户在浏览器中输入的URL不包含Servlet名称或JSP页面或静态资源时,要显示的文件或者Servlet

welcome-file-list元素中包含一个或者多个welcome-file元素。welcome-file元素中包含默认的文件名称。如果找不到第一个welcome-file元素中指定的文件,Web容器将尝试进行显示第二个,以此类推。

下面列举一个welcome-file-list元素:

[html] view plain copy

 print?

  1. <welcome-file-list>  
  2.     <welcome-file>index.htm</welcome-file>  
  3.     <welcome-file>index.html</welcome-file>  
  4.     <welcome-file>index.jsp</welcome-file>  
  5. </welcome-file-list>  

以下范例使用了一个包含两个welcome-file元素的welcome-file-list元素。第一个welcome-file元素定义了应用程序目录下一个名为index.html的文件;第二个定义了servlet目录下的welcome Servlet,它放在应用程序目录下:

[html] view plain copy

 print?

  1. <welcome-file-list>  
  2.     <welcome-file>index.html</welcome-file>  
  3.     <welcome-file>servlet/welcome</welcome-file>  
  4. </welcome-file-list>  

15.1.2、特定于JSP的元素

<web-app>下的jsp-config元素中包含了特定于JSP的元素。它可以有零个或者多个taglib元素,以及有零个或者多个jsp-property-group元素。taglib元素和jsp-property-group元素将在下面讨论。

taglib

taglib元素描述了一个JSP定制标签库。taglib元素中包含了一个taglib-uri元素和一个taglib-location元素。

taglib元素定义了Servlet/JSP应用程序中所用的标签类库URI。<taglib-uri>的值是相对于部署描述符的位置。

taglib-location元素为标签类库定义了TLD文件的位置。

下面是个taglib的例子

[html] view plain copy

 print?

  1. <jsp-config>  
  2.     <taglib>  
  3.         <taglib-uri>http://brainysoftware.com/taglib/complex</taglib-uri>  
  4.         <taglib-location>/WEB-INF/jsp/complex.tld</taglib-location>  
  5.     </taglib>  
  6. </jsp-config>  

jsp-property-group

jsp-property-group元素中集合了许多jsp文件,以便可以为她们提供通用的属性信息,利用<jsp-property-group>下的子元素可以完成下列任务:

1、是否忽略EL

2、是否允许有脚本元素

3、页面编码信息

4、某个资源是一个JSP文档(用XML编写)

5、前言及代码自动生成的内容

jsp-property-group元素具有以下子元素:

1、一个可选的description元素

2、一个可选的display-name元素

3、一个可选的icon元素

4、一个或多个url-pattern元素

5、一个可选的el-ignored元素

6、一个可选的page-encoding元素

7、一个可选的scripting-invalid元素

8、一个可选的is-xml元素

9、零个或者多个include-prelude元素

10、零个或者多个include-code元素

下面就是一个使所有jsp页面中的EL运算都会被忽略的jsp-property-group元素

[html] view plain copy

 print?

  1. <jsp-config>  
  2.     <jsp-property-group>  
  3.         <url-pattern>*.jsp</url-pattern>  
  4.         <el-ignored>true</el-ignored>  
  5.     </jsp-property-group>  
  6. </jsp-config>  

下面是一个jsp-property-group元素,用于强制整个应用程序中的所有jsp页面中都没有脚本。

[html] view plain copy

 print?

  1. <jsp-config>  
  2.     <jsp-property-group>  
  3.         <url-pattern>*.jsp</url-pattern>  
  4.         <scripting-invalid>true</scripting-invalid>  
  5.     </jsp-property-group>  
  6. </jsp-config>  

15.2、部署

自从有了Servlet开始,部署Servlet/JSP应用程序一直都是一间很容易的事情。它只需要将原始目录结构下的所有应用程序资源压缩成一个war文件即可。你也可以使用JDk中的jar工具,或者像WinZip这样的流行工具。总之,你只需要确保压缩好的文件扩展名为war即可。如果使用的是WinZip,压缩好了之后重命名即可。

我们必须将所有的类库和类文件以及HTML文件、JSp页面、图片、版权信息等,全部放在war文件中。但是不要包含java源文件。需要用到该程序的任何人只需要复制一份war文件,并将它部署到一个Servlet/JSP容器中即可。

 

15.3、Web Fragment

Servlet3中新增了web fragment,这是在现成Web应用程序中部署插件或者框架的一项新特性。web fragment只在对部署描述符进行补充,无须编辑web.xml文件。web fragment基本上就是一个jar包文件,其中包含了常用的Web对象,如Servlet、过滤器、监听器,以及其他资源,如JSP页面和静态图片。web fragment也可以带有描述符,这是一个与部署描述符类似的XML文档。web fragment描述符必须命名为web-fragment.xml,并且必须放在压缩包的META-INF目录下。web fragment描述符中可以包含部署描述中web-app元素下的所有元素,以及一些特定于web fragment的元素。一个应用程序中可以有多个web fragment。

下面展示了web fragment描述符的大体框架,web-fragment元素中甚至可以带有metadata-complete属性。如果这个属性值为true,那么web fragment中包含的类中的注解将会全部被忽略。

 

[html] view plain copy

 print?

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <web-fragment xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
  5.     http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"  
  6.     version="3.0"  
  7.     [metadata-cmplete="true|false"]  
  8. >  
  9.   
  10. </web-fragment>  

下面是个例子:

FragmentServlet.java

[html] view plain copy

 print?

  1. package fragment.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class FragmentServlet extends HttpServlet {  
  12.   
  13.     private static final long serialVersionUID = 1L;  
  14.       
  15.     @Override  
  16.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  17.             throws ServletException, IOException {  
  18.         response.setContentType("text/html");  
  19.         PrintWriter out = response.getWriter() ;  
  20.         out.println("A plug-in") ;  
  21.     }  
  22.   
  23. }  

web-fragment.xml

[html] view plain copy

 print?

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <web-fragment xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
  5.     http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"  
  6.     version="3.0"  
  7. >  
  8.     <servlet>  
  9.         <servlet-name>FragmentServlet</servlet-name>  
  10.         <servlet-class>fragment.servlet.FragmentServlet</servlet-class>  
  11.     </servlet>  
  12.     <servlet-mapping>  
  13.         <servlet-name>FragmentServlet</servlet-name>  
  14.         <url-pattern>/fragment</url-pattern>  
  15.     </servlet-mapping>  
  16. </web-fragment>  

把这两个文件拷贝到下图所示的文件夹里:

在cmd里执行下图的命令,把文件打成jar包

把生成的jar包拷贝到项目中,在浏览器输入http://localhost:8080/filedowmload/fragment查看结果

时间: 2024-10-01 18:13:18

第十五章_部署的相关文章

第十五章 接口[《.net框架程序设计》读书笔记]

.net框架|笔记|程序|设计 第十五章 接口 摘要: 接口的应用及完全限定名方式定义接口的应用. 一. 接口与继承 l C#支持单实现继承和多接口继承 l 接口中可以定义:事件.无参属性(属性).含参属性(索引器):C#不允许接口定义任何静态成员(CLR却允许定义静态成员):CLR不允许接口定义实例字段和构造器. l 缺省为public abstract 方法,但不可用任何修饰符进行修饰(包括public) l 将值类型转换为接口类型(假设其实现了某个接口),则值类型被装箱为引用类型,以调用其

第十五章之(三)RTTI

前言:刚找到新工作,这两天忙着搬家,添加一些日用品,好方便日后使用,浪费了蛮多时间的.所以到现在才补上这一章节. 之前跳过了RTTI,去看下一部分的类型转换运算符,被dynamic_cast搞的很头晕(主要是因为没搞懂为什么用这个),只能回头补上这一节,这时才发现,这一节是不能跳过的. 另外,这小节说实话,蛮难理解的(主要是指其原理,和为什么要有dynamic_cast这个类型转换运算符),这里简单的来概括,就是让指针只有在能安全使用转换后的类方法的情况下,才会被强制转换. ----------

Flash基础理论课 第十五章 3D基础Ⅰ

返回"Flash基础理论课 - 目录" 前面我们做的一切都是二维的(有时只有一维),但是已经可以做出非常酷的东东了.现在,将它们带入到下一个等级. 创建 3D 图形总是那么另人兴奋.新加入的这个维度似乎将物体真正地带入到了生活中.如何在Flash 中实现 3D 在无数的书籍和教学软件中都有介绍.但是我不打算跳过这些内容,我们会很快地将所有基础的知识讲完.随后,将前面章节中讨论的运动效果放到三维空间中.说得详细些,将给大家介绍速度,加速度,摩擦力,反弹,屏幕环绕,缓动,弹性运动,坐标旋转

第十五章-数据访问部件的应用及编程(一)(1)

在这一章里我们主要介绍Delphi的数据访问部件的层次结构.多部件之间的关系.部件的属性.方法.事件以及各部件的应用.这些部件包括: ● TSession部件 ● 数据集部件(TTable和TQuery) ● TDatasource部件 ● 字段对象TField ● 字段编辑器的使用 ● TReport部件和TBatchMove部件 我们对这些部件的属性.方法和事件进行一般性的描述,读者在实际使用Delphi开发应用程序时,还可以通过联机帮助获得有关部件更详细的信息. 15.1 Delphi数据

WF从入门到精通(第十五章):工作流和事务

学习完本章,你将掌握: 1.了解传统的事务模型以及这种模型在哪些地方适合去使用,哪些地方不适合使用 2.懂得在哪些地方不适合传统的事务以及什么时候是补偿事务的恰当时机 3.看看怎样回滚或补偿事务 4.看看怎样修改默认的补偿顺序 如果你是写软件的,你迟早需要去理解事务处理.事务处理(transactional processing)在这个意义上是指写那些把信息记录到一个持久化资源的软件,这些持久化资源如数据库.Microsoft消息队列(它在底层使用了一个数据库).带事务文件系统的Windows

第十六章_动态注册和Servlet容器初始化

16.1.动态注册 为了使动态注册成为可能,ServletContext接口中还添加了以下方法,用来动态地创建Web对象: <T extends Filter>createFilter(Java.lang.Class<T> clazz) <T extends java.util.EventListener> createListener(java.lang.Class<T> clazz) <T extends Servlet> createSer

原子变量与非阻塞同步机制(第十五章)

原子变量与非阻塞同步机制 与基于锁的方案相比,非阻塞算法在设计和实现上都要负责得多,但它们在可伸缩性和活跃性上拥有巨大的优势. 原子变量提供了与volatile类型变量相同的内存语义,此外还支持原子的更新操作,从而使它们更加适用于实现计数器.序列发生器和统计数据收集等,同时还能比基于锁的方法提供更高的可伸缩性. 独占锁是一种悲观技术----它假设最坏的情况. 现在,几乎所有的现代处理器中都包含了某种形式的原子读-改-写指令,例如比较并交换(Compare-and-Swap)或者关联加载/条件存储

openstack 管理二十五 - rpm 方式部署 openstack(架构说明)

前提 1 暂不配置成高可用 openstack 2 利用 rpm 方法部署 openstack 3 使用平面网络 4 了解各个组件连接其他组件的配置 机器架构 参考下面服务器的 IP 地址及每个服务器安装对应的组件 +-------------------------------------+-----------------+---------------+-----------------------+--------------------------+ | 主机名 | ssh ip |

第十五章 动态规划——钢条切割

前言:动态规划的概念 动态规划(dynamic programming)是通过组合子问题的解而解决整个问题的.分治算法是指将问题划分为一些独立的子问题,递归的求解各个问题,然后合并子问题的解而得到原问题的解.例如归并排序,快速排序都是采用分治算法思想.本书在第二章介绍归并排序时,详细介绍了分治算法的操作步骤,详细的内容请参考:http://www.cnblogs.com/Anker/archive/2013/01/22/2871042.html.而动态规划与此不同,适用于子问题不是独立的情况,也