JSP的第2代开发技术:JSP+EJB
EJB是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。EJB (Enterprise JavaBean)是J2EE(javaEE)的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。 在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。在EJB3.0推出以后,实体Bean被单独分了出来,形成了新的规范JPA。
一个技术规范:EJB 从技术上而言不是一种”产品”
EJB
EJB
,EJB 是一种描述了构建应用组件要解决的标准:
可扩展 (Scalable)
分布式 (Distributed)
事务处理(Transactional)
数据存储(Persistent)
安全性 (Secure)
创建(声明)JavaBean,,id为我们理解的对象名
package cn.hncu.jspV2.domain;
import java.util.List;
//EJB
public class Person {
private String name="abc";
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Person() {
super();
}
public Person(String name, String pwd) {
super();
this.name = name;
this.pwd = pwd;
}
////////////////业务逻辑方法//////////////////////////
//用this对象中的信息访问dao层,进行登录
public boolean login(){
if(name!=null && name.startsWith("hncu")&&
pwd!=null && pwd.length()>5){
return true;
}
return false;
}
public boolean save(){
//把this对象中的信息进行保存(注册)
//略...
return true;
}
public List<Person> getAll(){
//调用dao
return null;
}
}
声明一个bean
<jsp:useBean id="p" class="cn.hncu.jspV2.domain.Person"></jsp:useBean>
下一行的作用:给名为p的JavaBean设置name属性为:张三 ,, name为我们理解的对象名
<jsp:setProperty property="name" value="张三" name="p"/>
JavaBean中Integer类型的属性,直接用字符串格式去赋值,内部会自动帮我们转换成Integer的
<jsp:setProperty property="age" name="u1" value="30"/>
String与基本数据类型的属性赋值,我们只要给字符串格式就行,jsp标签会帮我们自动转换的。
其它的复杂类型如Date,不行!,对这种情况,我们得在javaBean自己手写代码转换,把对应属性的setter-getter方式写成面向String处理
<jsp:setProperty property="birthday" name="u1" value="2008-07-08"/>
<form action="<%=request.getContextPath()%>/jsps/v2/login2.jsp" method="post">
Name:<input type="text" name="name"/><br/>
Pwd:<input type="password" name="pwd"/><br/>
<input type="submit" value="登录"/>
</form>
<%@page import="cn.hncu.jspV2.domain.Person"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<!-- 声明一个bean -->
<jsp:useBean id="p0" class="cn.hncu.jspV2.domain.Person"></jsp:useBean>
<!-- 读取表单参数给bean设置属性:把表单中的pwd参数值读取过来,赋给p0-bean的pwd属性 -->
<jsp:setProperty property="pwd" name="p0" param="pwd"/>
<!-- 自动匹配,读取表单参数给bean设置属性:把表单中的所有参数值读取过来,赋给名字相同的属性 -->
<jsp:setProperty property="*" name="p0"/>
<%
Person p =(Person) pageContext.findAttribute("p0");//按从小到大依次到4个容器中查找属性,若小的找到则就返回,若4个都没找到则返回null
//调用EJB中的业务方法以决定是否登录成功
if(p.login()){
request.setAttribute("person", p);
request.getRequestDispatcher("welcome.jsp").forward(request, response);
}else{
request.getRequestDispatcher("/jsps/index2.jsp").forward(request, response);
}
%>
</body>
</html>