J2EE与中间件技术-J2EE应用
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
</body>
</html>
AdderServlet.java
调用Stateful Session Bean的业务方法
Session Bean:把用户提交的数字加到它的 状态变量中
把业务方法的返回值返回给浏览器客户端
AdderServlet
public class AdderServlet extends HttpServlet {
Adder adder; public void init() throws ServletException {……} public void doGet (HttpServletRequest req,
HttpServletResponse res) throws ServletException, IOException {……}
generatePage()
private void generatePage(PrintWriter out, int total) {
out.println("<html>"); out.println("<head>"); out.println("<title>Input for AdderServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("The running total is: " + String.valueOf(total)); out.println("<p>");
out.println("<form method = get action=\" AdderAlias \">");
out.println("Please enter an integer:"); out.println("<input type=text name=\"inputString\">"); out.println("<p>"); out.println("<input type=submit>"); out.println("</form>"); out.println("</body>"); out.println("</html>");
}
返回
Session Bean
AdderEJB
Local 接口——AdderLocal Local Home接口——AdderLocalHome Bean类——AdderBean
Remote接口
客户端采用Remote接口来调用 Enterprise Bean:
Stub、Skeleton、网络、参数整理/再整理 生成Bean是非常慢的、效率不高
}
init()
try {
InitialContext ic = new InitialContext(); Object objref = ic.lookup("Adder"); AdderHome home =
(AdderHome)PortableRemoteObject.narrow(objref, AdderHome.class); adder = home.create(0);
Local 接口
快速、高效 客户端是运行在同一个EJB容器中的其 他Enterprise Bean:采用Local接口来 调用Enterprise Bean
没有Stub、Skeleton代理,以更快的方式 生成Bean
Local接口和LocalHome接口
Local接口扩展 javax.ejb.EJBLocalObject接口,不抛 出远程异常
public interface AdderHome extends
EJBLocalHome{
Adder create() throws CreateException; Adder create(int initial) throws CreateException;
}
Bean类
import javax.ejb.*; public class AdderBean implements SessionBean{
</web-app>
ejb-jar.xml
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>AdderEJB</ejb-name> <home>AdderHome</home> <remote>Adder</remote> <ejb-class>AdderBean</ejb-class> <session-type>Stateful</session-type> <transaction-type>Container</transaction-type>
int total; public void ejbCreate() { total = 0; } public void ejbCreate(int initial) { total = initial; } public void add(int number) {total += number; } public int getTotal() { return total; } public AdderBean() {} public void setSessionContext(SessionContext sc) {} public void ejbRemove() {} public void ejbActivate() {} public void ejbPassivate() {}
Adder_ejb.JAR文件
Ejb ——build.xml —— AdderLocal.class —— AdderLocalHome.class —— AdderBean.class META-INF —jar.xml
EAR文件
Adder_web.WAR Adder_ejb.JAR application.xml build.xml
}
web.xml
<web-app>
<servlet> <servlet-name> AdderAlias </servlet-name>
<servlet-class>AdderServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name> AdderAlias </servlet-name> <url-pattern>/AdderAlias </url-pattern> </servlet-mapping>
application.xml
<application>
<display-name>AdderApp</display-name> <description>Adder Application</description> <module>
<web>
<web-uri>Adder_web.war</web-uri> <context-root>Adder</context-root>
void add(int number); int getTotal();
}
LocalHome接口
import java.io.Serializable; //import java.rmi.RemoteException; import javax.ejb.CreateException;
import javax.ejb.EJBLocalHome;
</head> <body>
<form method = get action=" AdderAlias ">
Please enter an integer: <input type=text name="inputString"> <p> <input type=submit>
</form>
</session>
</enterprise-beans> ……
</ejb-jar>
weblogic-ejb-jar.xml
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>AdderEJB</ejb-name> <jndi-name>Adder</jndi-name>
} catch(Exception e) {
e.printStackTrace();
}
doGet()
String inputString = req.getParameter("inputString");
Integer inputNumber = new Integer(inputString); adder.add(inputNumber.intValue()); //调用Session Bean的业务方法 int total = adder.getTotal(); res.setContentType("text/html"); PrintWriter out = res.getWriter(); generatePage(out,total);
然后: Servlet容器自动的调用Servlet中的某个 适当的方法处理该请求(doGet()方法:调用EJB 远程方法)
adder.jsp
浏览器客户端:输入一个数字,提交给 AdderServlet;
adder.jsp
<html>
<head>
<title>Initial Page for AdderServlet</title>
Servlet/JSP+EJB
MVC
JSP+Servlet+EJB
Servlet作为EJB的客户端,访问EJB Servlet:服务器端的Java代码,用于响应客 户机的请求,由Servlet容器进行管理
首先: Servlet容器调用Servlet的init()方法,对 Servlet进行初始化(获取Home对象和EJB对象的 引用)
<ant dir="web"/>
</target> <target name="package" depends="ejb,web">
<ear destfile="${ear-name}.ear" appxml="application.xml">
<fileset dir="ejb" includes="*.jar"/> <fileset dir="web" includes="*.war"/>
LocalHome接口扩展 javax.ejb.EJBLocalHome接口,不抛 出远程异常
Local接口
import javax.ejb. EJBLocalObject; //import java.rmi.RemoteException; public interface Adder extends EJBLocalObject{
</web>
</module> <module>
<ejb>Adder_ejb.jar</ejb>
</module>
</application>
build.xml
<target name="ejb">
<ant dir="ejb"/>
</target> <target name="web">
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
J2EE Application
*.EAR
*.WAR *.JAR META-INF
Adder_web.WAR
Web ——build.xml —— adder.jsp —— WEB-INF ————classes ——————AdderServlet.class ——————AdderLocal.class ——————AdderLocalHome.class ————web.xml
</ear>
</target>
build.xml (cont.)
<target name="deploy" depends="package">
</html>
AdderServlet.java
调用Stateful Session Bean的业务方法
Session Bean:把用户提交的数字加到它的 状态变量中
把业务方法的返回值返回给浏览器客户端
AdderServlet
public class AdderServlet extends HttpServlet {
Adder adder; public void init() throws ServletException {……} public void doGet (HttpServletRequest req,
HttpServletResponse res) throws ServletException, IOException {……}
generatePage()
private void generatePage(PrintWriter out, int total) {
out.println("<html>"); out.println("<head>"); out.println("<title>Input for AdderServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("The running total is: " + String.valueOf(total)); out.println("<p>");
out.println("<form method = get action=\" AdderAlias \">");
out.println("Please enter an integer:"); out.println("<input type=text name=\"inputString\">"); out.println("<p>"); out.println("<input type=submit>"); out.println("</form>"); out.println("</body>"); out.println("</html>");
}
返回
Session Bean
AdderEJB
Local 接口——AdderLocal Local Home接口——AdderLocalHome Bean类——AdderBean
Remote接口
客户端采用Remote接口来调用 Enterprise Bean:
Stub、Skeleton、网络、参数整理/再整理 生成Bean是非常慢的、效率不高
}
init()
try {
InitialContext ic = new InitialContext(); Object objref = ic.lookup("Adder"); AdderHome home =
(AdderHome)PortableRemoteObject.narrow(objref, AdderHome.class); adder = home.create(0);
Local 接口
快速、高效 客户端是运行在同一个EJB容器中的其 他Enterprise Bean:采用Local接口来 调用Enterprise Bean
没有Stub、Skeleton代理,以更快的方式 生成Bean
Local接口和LocalHome接口
Local接口扩展 javax.ejb.EJBLocalObject接口,不抛 出远程异常
public interface AdderHome extends
EJBLocalHome{
Adder create() throws CreateException; Adder create(int initial) throws CreateException;
}
Bean类
import javax.ejb.*; public class AdderBean implements SessionBean{
</web-app>
ejb-jar.xml
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>AdderEJB</ejb-name> <home>AdderHome</home> <remote>Adder</remote> <ejb-class>AdderBean</ejb-class> <session-type>Stateful</session-type> <transaction-type>Container</transaction-type>
int total; public void ejbCreate() { total = 0; } public void ejbCreate(int initial) { total = initial; } public void add(int number) {total += number; } public int getTotal() { return total; } public AdderBean() {} public void setSessionContext(SessionContext sc) {} public void ejbRemove() {} public void ejbActivate() {} public void ejbPassivate() {}
Adder_ejb.JAR文件
Ejb ——build.xml —— AdderLocal.class —— AdderLocalHome.class —— AdderBean.class META-INF —jar.xml
EAR文件
Adder_web.WAR Adder_ejb.JAR application.xml build.xml
}
web.xml
<web-app>
<servlet> <servlet-name> AdderAlias </servlet-name>
<servlet-class>AdderServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name> AdderAlias </servlet-name> <url-pattern>/AdderAlias </url-pattern> </servlet-mapping>
application.xml
<application>
<display-name>AdderApp</display-name> <description>Adder Application</description> <module>
<web>
<web-uri>Adder_web.war</web-uri> <context-root>Adder</context-root>
void add(int number); int getTotal();
}
LocalHome接口
import java.io.Serializable; //import java.rmi.RemoteException; import javax.ejb.CreateException;
import javax.ejb.EJBLocalHome;
</head> <body>
<form method = get action=" AdderAlias ">
Please enter an integer: <input type=text name="inputString"> <p> <input type=submit>
</form>
</session>
</enterprise-beans> ……
</ejb-jar>
weblogic-ejb-jar.xml
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>AdderEJB</ejb-name> <jndi-name>Adder</jndi-name>
} catch(Exception e) {
e.printStackTrace();
}
doGet()
String inputString = req.getParameter("inputString");
Integer inputNumber = new Integer(inputString); adder.add(inputNumber.intValue()); //调用Session Bean的业务方法 int total = adder.getTotal(); res.setContentType("text/html"); PrintWriter out = res.getWriter(); generatePage(out,total);
然后: Servlet容器自动的调用Servlet中的某个 适当的方法处理该请求(doGet()方法:调用EJB 远程方法)
adder.jsp
浏览器客户端:输入一个数字,提交给 AdderServlet;
adder.jsp
<html>
<head>
<title>Initial Page for AdderServlet</title>
Servlet/JSP+EJB
MVC
JSP+Servlet+EJB
Servlet作为EJB的客户端,访问EJB Servlet:服务器端的Java代码,用于响应客 户机的请求,由Servlet容器进行管理
首先: Servlet容器调用Servlet的init()方法,对 Servlet进行初始化(获取Home对象和EJB对象的 引用)
<ant dir="web"/>
</target> <target name="package" depends="ejb,web">
<ear destfile="${ear-name}.ear" appxml="application.xml">
<fileset dir="ejb" includes="*.jar"/> <fileset dir="web" includes="*.war"/>
LocalHome接口扩展 javax.ejb.EJBLocalHome接口,不抛 出远程异常
Local接口
import javax.ejb. EJBLocalObject; //import java.rmi.RemoteException; public interface Adder extends EJBLocalObject{
</web>
</module> <module>
<ejb>Adder_ejb.jar</ejb>
</module>
</application>
build.xml
<target name="ejb">
<ant dir="ejb"/>
</target> <target name="web">
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
J2EE Application
*.EAR
*.WAR *.JAR META-INF
Adder_web.WAR
Web ——build.xml —— adder.jsp —— WEB-INF ————classes ——————AdderServlet.class ——————AdderLocal.class ——————AdderLocalHome.class ————web.xml
</ear>
</target>
build.xml (cont.)
<target name="deploy" depends="package">