Gavin King在开发 Seam框架的过程当中,为了弥补EJB3和JSF框架当中的裂缝,便引入了Web Beans的概念,将EJB3和JSF无缝的整合了起来。
WebBeans(JSR-299)根据 JBoss 提交的 WebBean
规范文档,WebBean定义是:
1. Web Bean
引用
Chapter 2. Web Bean definition
A Web Bean is a Java EE component that bears additional metadata defining its lifecycle and interactions with other components
according to the Web Beans context model.
WebBean 是一个 JavaEE 组件,它定义了额外的元数据信息,用于控制自己的生命周期以及与WebBeans上下文中其他组件之间的交互。
WebBean 定义了应用的状态(State)和逻辑(Logic);WebBean 以多实例方式运行。
2. Web Bean Manager
Web规范中另一个重要的组件是 Web Bean Manager 。 与以往的EJB规范类似,它是一个容器组件,用来管理WebBean实例。包括:
- 创建(create)和销毁(destroy) WebBean 实例;
- 与适当的上下文(Context)相关联;
- WebBean 之间的注入;
- 为 EL(Expression Language)等其他组件提供对 WebBean 的取值访问等。
3. WebBean 构成
每个 WebBean 构成包括以下元素:
- 一套API (必须)
- 一套绑定注解(Binding Annotation)
- 范围(Scope)
- 部署类型(Deployment Type)
- WebBean 名称(name,可选)
- 拦截器绑定
- WebBean 实现
4. WebBean 例子
以上是WebBean 规范文档中对WebBean定义的基本描述,看起来还是比较抽象。 下面我们通过一个例子看看WebBean到底长什么样子。
JSF Example (摘自WebBean规范)
1) 一个JSF 登录页
<f:view>
<f:form>
<h:panelGrid columns="2" rendered="#{!login.loggedIn}">
<h:outputLabel for="username">Username:</h:outputLabel>
<h:inputText id="username" value="#{credentials.username}"/>
<h:outputLabel for="password">Password:</h:outputLabel>
<h:inputText id="password" value="#{credentials.password}"/>
</h:panelGrid>
<h:commandButton value="Login" action="#{login.login}" rendered="#{!login.loggedIn}"/>
<h:commandButton value="Logout" acion="#{login.logout}" rendered="#{login.loggedIn}"/>
</f:form>
</f:view>
2) 其中,credentials 在JSF中称为 ManagedBean。在新规范中它称为一个 WebBean,仍是MVC中的Model,生命周期为request绑定,定义:
@Model
public class Credentials {
private String username;
private String password;
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
}
其中Web Bean的 @Model 注解表明它是一个数据模型。
3) 其中 Login 在JSF中称为 ManagedBean。在新规范中也是一个WebBean,作为MVC中的Control,完成登录的逻辑处理。
@SessionScoped @Model
public class Login {
@Current Credentials credentials;
@PersistenceContext EntityManager userDatabase;
private User user;
public void login() {
List<User> results = userDatabase.createQuery(
"select u from User u where u.username=:username and u.password=:password")
.setParameter("username", credentials.getUserName())
.setParameter("password", credentials.getPassword())
.getResultList();
if ( !results.isEmpty() ) {
user = results.get(0);
}
}
public void logout() {
user = null;
public boolean isLoggedIn() {
return user!=null;
}
@Produces @LoggedIn User getCurrentUser() {
if (user==null) {
throw new NotLoggedInException();
}
else {
return user;
}
}
}
其中,@SessionScoped 注解标明 Login 的生命周期是 HTTP Session;
@Current 绑定注解标明需要容器将另一个WebBEan credentials 注入给 Login Bean;
@PersistenceContext 注解标明需要使用 JPA EntityManager。
规范文档第一章还介绍了 EJB Example,Interceptor Example,Decorator Example,可以更进一一览 Web Bean 的容貌。
5. 总结
从以上简单介绍和例子我们可以看出, WebBean 规范是对现有MVC架构及JSF等规范的一个补充和明确,将以前停留在通行的设计惯例进一步形成明确的规范,并与JSF,Seam,JEE6等Gavin King,Sun,Jboss主推的规范充分融合。 它仍然在MVC设计架构之下。
分享到:
相关推荐
SpringBoot是Java领域...总的来说,"springboot-web-demo"是一个很好的起点,可以帮助初学者逐步掌握SpringBoot的精髓,并建立起对Java web开发的整体认识。通过实际操作,理论与实践相结合,能有效提升你的编程技能。
- **跨多个@Configuration类分区Bean定义**:可以将Bean定义分散到不同的@Configuration类中,便于管理和维护。 - **使用@ExternalBean引用外部定义的Bean**:允许在一个配置类中引用另一个配置类中定义的Bean。 ...
JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring(Ioc容器、装配Java Bean...
JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring(Ioc容器、装配Java Bean...
- **内部Bean**:在某个 Bean 内部定义另一个 Bean。 - **null值**:注入 null 值。 - **级联属性**:处理复杂的对象图注入。 这些知识点覆盖了 Spring 框架的基础概念、新功能、项目搭建、快速入门案例、IoC ...
通过深入学习以上知识点,初学者可以建立起对JSP技术的初步认识,并具备开发基础Web应用的能力。随着实践的积累,可以进一步探索更高级的主题,如MVC设计模式、Spring框架与JSP的整合,以及使用JSP进行复杂业务逻辑...
最后,XML常用于配置JavaBean,特别是在Spring框架中,XML配置文件可以用来定义bean的实例化、依赖注入和其他设置。而HTML则是构建Web页面的基础,与JavaBean结合使用,可以构建动态、数据驱动的Web应用程序。 总的...
- **示例代码**:提供了具体的实体Bean定义代码示例,如`META-INF/persistence.xml`中的配置。 - **2.2.3 业务逻辑层:EJB 3 Bean** - **会话Bean**:介绍了无状态会话Bean的使用方法,包括业务接口和服务实现。 ...
当`DispatcherServlet`初始化时,它会在Web应用程序的WEB-INF目录下查找名为`servlet-name-servlet.xml`的文件(这里的`servlet-name`是我们在`web.xml`中定义的Servlet名称),并创建该文件中定义的bean。...
- **定义FormBean**:使用`form-beans`标签定义表单Bean(FormBean),如`UserForm`,这有助于封装用户提交的数据。 - **全局转发**:使用`global-forwards`标签定义全局转发配置,如失败时转到`failed.cool`页面...
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> </bean> ``` 通过以上介绍,我们对Shiro有了初步的认识。在实际项目中,可以根据需求定制 Realm、配置 ...
8. **学习价值**:通过这个项目,学生可以深入理解SSM框架的工作原理,提升Web开发技能,同时对数据库管理和项目实践有更直观的认识。此外,还可以学习如何结合前端技术(如HTML、CSS、JavaScript)实现动态交互界面...
这是一个基于Java SpringBoot框架开发的小型Web商城系统,适合初学者和在校大学生进行...通过这个项目,开发者可以深入理解SpringBoot的特性和Web开发的流程,同时对数据库操作、安全性以及微服务架构有初步的认识。
- 例如,定义表单Bean: ```xml <form-beans> <form-bean name="loginForm" type="com.login.struts.form.LoginForm"/> </form-beans> ``` #### 总结 通过上述介绍,我们可以看出Struts1框架的主要工作流程...
- 配置文件:通常在web.xml中配置DispatcherServlet,初始化相关的Bean。 - 定义处理器:编写@Controller注解的类,以及对应的方法(@RequestMapping等)。 - 配置视图解析器:例如,我们可以配置...
通过以上内容的学习,初学者可以对EJB 3.0的基本概念、开发流程和技术细节有一个全面的认识。无论是对于理论学习还是实践开发都具有重要的指导意义。希望本文能帮助读者更好地理解和掌握EJB 3.0的相关知识。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> </bean> ``` 然后,创建一个简单的Controller类,例如`...
2. `src/main/resources`:存放配置文件,如Spring的bean配置、MyBatis的映射文件等。 3. `src/main/webapp`:如果是Web应用,这里会有静态资源、视图模板以及WEB-INF目录,后者包含web.xml等配置。 在实际开发中,...
- 定义bean的生命周期,例如通过`@Scope("singleton")`控制单例模式等。 - 实现工厂模式,通过Spring的`ApplicationContext`来创建和管理bean。 **AOP**的应用则体现在: - 定义切入点(Pointcut),确定哪些连接...