介绍
JSF(Java Server Faces), JSF是一个框架标准,但不是具体实现(有JSF的标准实现)。其实JSF差不多就是Spring MVC的前身。JSF是一个基于组件的MVC架构的WEB框架。
案例
可以看到Spring MVC的身影
1. 依赖
和slf4j的接口门面实现分开一样。JSF本身是一个标准。对应的是 jsf-api.jar
而 jsf-impl.jar是Sun提供的JSF框架标准的实现。
2. 模型组件(M)
前面说过了,JSF是一个基于MVC的架构标准,其M模型组件其实就是一个JavaBean。所有的业务逻辑全部封装在JavaBean中。当然和普通的JavaBean的一点点区别就是多了 @ManagedBean 注解。
package xxx;
import javax.faces.bean.ManagedBean;
@ManagedBean
public class Message {
private String word = "JSF";
/** getter and setter **/
}
@ManagedBean表示将自己注册到JSF框架,让JSF框架管理自己的生命周期。
类似Spring MVC将@Bean(value = “”)注入到容器,这里也可以命名,默认也是类名首小写。
3. 视图组件(V)
JSF的视图都是使用XHTML文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>JSF</title>
</head>
<body>
<div>#{message.word}</div>
</body>
</html>
上面代码中,通过使用 “#” 表达式语言直接引用之前创建的ManagedBean(message)属性,但是并没有像JSP一样要先通过<jsp:useBean>来声明引入JavaBean实例。
因为当视图被执行时,JSF将检查当前是否有可用的对应Bean实例(这里是message)。如果没有,JSF框架将自动创建ManagedBean的实例并在视图中引用它
和Spring MVC一样,Bean都托管给框架(容器)了,其创建销毁等生命周期都不用自己操劳了。
4. 控制组件(C)
- JSF应用的控制功能由JSF框架自身来实现。
- 为了确保JSF应用运行,在Web应用的配置文件web.xml中对JSF框架的核心控制组件javax.faces.webapp.FacesServlet进行配置。
- 所有JSF请求都传入Faces Servlet中,该Servlet是JSF实现代码的一部分。
<?xml version="1.0" encoding="UTF-8"?>
<web-app ....>
<servlet>
<servlet-name>FacesServelt</servlet-name>
<servlet-class>javax.faces.webapp.FacesServelt</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FacesServelt</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mappring>
</web-app>
FacesServlet 负责处理所有 /faces/* 的JSF请求。
Spring MVC则是DispatchServlet,当然也可以选择性拦截,不拦截静态资源等。
如果有更多的配置,也可以像spring-mvc.xml一样增加一个配置文件face-config.xml
5.部署运行
部署到Servlet容器即可运行,就输出 “JSF”