what&introduction
1、Annotation,是Java5的新特性,JDK5引入了Metadata()很容易的就能够调用Annotations。Annotations提供一些本来不属于程序的数据,比如:一段代码的作者或者告诉禁止一些特殊的错误。Anannotation对代码的执行没有什么影响。Annotations使用@annotation的形式应用于代码:类(class),属性(),方法(method)等等。一个Annotation出现在上面提到的开始位置,而且一般只有一行,也可以包含有任意的参数。用于简化Bean的配置,某些场合可以取代XML配置文件。
@Named注解
要注入接口,我们使用@Inject注释。注释基本上做了它说的。它注入应用程序中可用的组件。容器有我们支付接口的两种实现,所以他不知道注入哪一种。所以我们需要CDI提供@Named注释,允许为实现指定名称。根据Spring文档,“JSR 330的@Named注释可以用来检测组件并为它们提供名称。@Named注释的主要角色是定义一个bean,用于解析应用程序中的EL语句,通常是通过JSF EL解析器。可以使用名称执行注入,但这不是CDI中的注入的工作方式,因为CDI为我们提供了更丰富的方式来表示注入点和要注入到其中的bean。
@Named("cash")public class CashPaymentImpl implements Payment { private static final Logger LOGGER = Logger.getLogger(CashPaymentImpl.class.toString()); @Override public void pay(BigDecimal amount) { LOGGER.log(Level.INFO, "payed {0} cash", amount.toString()); }}
@Named("visa")public class VisaPaymentImpl implements Payment { private static final Logger LOGGER = Logger.getLogger(VisaPaymentImpl.class.toString()); @Override public void pay(BigDecimal amount) { LOGGER.log(Level.INFO, "payed {0} with visa", amount.toString()); }}
@RequestScoped
public @ interface requestscope,指定bean的请求范围:
- 在web应用程序中任何servlet的service()方法期间,在任何servlet过滤器的doFilter()方法期间,以及当容器调用任何ServletRequestListener或AsyncListener时。
- 在任何Java EE web服务调用期间,
- 在任何EJB的任何远程方法调用期间、在任何EJB的任何异步方法调用期间、在对EJB超时方法的任何调用期间以及在向任何EJB消息驱动bean传递消息期间
- 在为从Java EE组件环境获得的JMS主题或队列向MessageListener传递任何消息期间。
请求上下文被销毁:
- 在servlet请求结束时,在service()方法、所有doFilter()方法以及所有requestDestroyed()和onComplete()通知返回之后,
- 在web服务调用完成之后,在EJB远程方法调用、异步方法调用、超时或消息传递完成之后,
- 或者在消息传递到MessageListener之后返回。
Analysis of Web.xml in Hello1 project
javax.faces.PROJECT_STAGE Development Faces Servlet javax.faces.webapp.FacesServlet 1 Faces Servlet *.xhtml 30 index.xhtml
xmlns:xmlns 属性可以在文档中定义一个或多个可供选择的命名空间。该属性可以放置在文档内任何元素的开始标签中。该属性的值类似于 URL,它定义了一个命名空间,浏览器会将此命名空间用于该属性所在元素内的所有内容。
xsi:schemaLocation属性其实是Namespace为http://www.w3.org/2001/XMLSchema-instance里的schemaLocation属性,定义了XML Namespace和对应的XSD(Xml Schema Definition)文档的位置的关系。它的值由一个或多个URI引用对组成,两个URI之间以空白符分隔(空格和换行均可)。第一个URI是定义的XML Namespace的值,第二个URI给出Schema文档的位置,Schema处理器将从这个位置读取Schema文档,该文档的targetNamespace必须与第一个URI相匹配。
javax.faces.PROJECT_STAGE Development
1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param>
Faces Servlet #servlet名javax.faces.webapp.FacesServlet #设置servlet类1 #启动的时候实例化并调用其init()方法的优先级
Java servlet是扩展服务器功能的Java程序,servlet可以响应任何类型的请求,但它们通常实现驻留在Web服务器上的应用程序,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
load-on-startup标记容器是否在启动的时候实例化并调用其init()方法的优先级。它的值表示servlet应该被载入的顺序当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;如果值小于0或未指定时,则表示只有在第一次请求的容器才在该servlet调用初始化函数正值越小,servlet的优先级越高,应用启动时就越先加载。值相同时,容器就会自己选择顺序来加载。
Faces Servlet #Servlet的名字,唯一性和一致性,与元素中声明的名字一致。 *.xhtml #指定相对于Servlet的URL的路径。该路径相对于web应用程序上下文的根路径。将URL模式映射到某个Servlet,即该Servlet处理的URL。
加载Servlet的过程
容器的Context对象对请求路径(URL)做出处理,去掉请求URL的上下文路径后,按路径映射规则和Servlet映射路径(<url- pattern>)做匹配,如果匹配成功,则调用这个Servlet处理请求。
30
session-timeout元素用来指定默认的会话超时时间间隔,以分钟为单位,session.timeout只能在1~1440(也就是24小时内)的整数范围内选取,其他都是超出范围报错的,上述为设置三十分钟不操作session,session既失效。
index.xhtml
当用户在浏览器中输入的URL不包含某个servlet名或JSP页面时,welcome-file-list元素可指定显示的默认文件。