stateful session bean 学习笔记

[b]
利用stateful session bean 完成一个简单的购物车
[/b]
1、建立ejbProject将要完成的业务抽象到远程接口中CartRemote:

package net.hnspi.ejb;
import java.util.Map;

import javax.ejb.Remote;

@Remote
public interface CartRemote {
public ShopItem addCart(ShopItem si) ;
public Map<ShopItem,Integer> itemInCart() ;
}

2、远程接口的实现类CartBean:

package net.hnspi.ejb;

import java.util.HashMap;
import java.util.Map;

import javax.ejb.Stateful;

@Stateful
public class CartBean implements CartRemote {
public CartBean(){}
//private Map<ShopItem,Integer> items = new HashMap<ShopItem,Integer>() ;
private Map<ShopItem,Integer> items ;
@Override
public ShopItem addCart(ShopItem si) {
if(itemInCart()==null){
items = new HashMap<ShopItem,Integer>() ;
}
int temp = 0 ;
if(items.containsKey(si)){
temp = items.get(si) ;
items.put(si, ++temp) ;
}else{
items.put(si, 1) ;
}
return si;
}

@Override
public Map<ShopItem,Integer> itemInCart() {
return this.items;
}

}

3、商品的pojo类ShopItem:

package net.hnspi.ejb;

import java.io.Serializable;

public class ShopItem implements Serializable{
private static final long serialVersionUID = 1L;
private int id ;
private String name ;
private double price ;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
/**
* 复写equals约定名称相同就为同一件商品
*/
@Override
public boolean equals(Object obj) {
if(this==obj){
return true ;
}
if(!(obj instanceof ShopItem)){
return false ;
}
ShopItem s = (ShopItem)obj ;
if(this.name.equals(s.name)){
return true ;
}else{
return false ;
}
}
@Override
public int hashCode() {
return this.name.hashCode()+5 ;
}
}


4、建立要访问ejb组件的web项目,在项目建立一个区的同一个ejb代理对象的工具类ContextManager:

package net.hnspi.util;

import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import net.hnspi.ejb.CartRemote;


public class ContextManager {
/*
public static void main(String[] args) {
Context cxt = getJbossContext() ;
CartRemote cr = null;
try {
cr = (CartRemote)cxt.lookup("Shop/CartBean/remote");
} catch (NamingException e) {
e.printStackTrace();
}

System.out.println(cr);
}
*/
private static CartRemote cr ;
public static Context getJbossContext(){
Properties pro = new Properties() ;

pro.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory") ;
pro.put(Context.PROVIDER_URL, "localhost:1099") ;

Context cxt = null;
try {
cxt = new InitialContext(pro);
} catch (NamingException e) {
e.printStackTrace();
}
return cxt ;
}

public static CartRemote getInstance(){
if(cr==null){
try {
cr = (CartRemote)getJbossContext().lookup("Shop/CartBean/remote");
} catch (NamingException e) {
e.printStackTrace();
}
}
return cr ;
}
}


5、对请求购买的商品进行处理的servlet ShopServlet:

package net.hnspi.servlet;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.hnspi.ejb.CartRemote;
import net.hnspi.ejb.ShopItem;
import net.hnspi.util.ContextManager;
public class ShopServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response) ;
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

CartRemote cr = ContextManager.getInstance() ;
ShopItem si = null ;
String[] items = request.getParameterValues("item") ;
for(String s : items){
si = new ShopItem() ;
si.setName(s) ;
cr.addCart(si) ;
}
Map<ShopItem,Integer> map = cr.itemInCart();
request.setAttribute("items", map) ;
request.getRequestDispatcher("display.jsp").forward(request, response) ;
}

}//不要忘了在web.xml中进行servlet的配置

6、进行商品购买的jsp页面shopitem_list.jsp

<?xml version="1.0" encoding="UTF-8" ?>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<base href="<%=basePath%>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>shopItem_list</title>
</head>
<body>
<fieldset>
<legend>商品列表</legend>
<form action="shopServlet.do">
<input type="checkbox" name="item" value="struts" />Struts<br />
<input type="checkbox" name="item" value="hibernate" />Hibernate<br />
<input type="checkbox" name="item" value="spring" />Spring<br />
<input type="submit" value="提交" />
</form>
</fieldset>
</body>
</html>

7、进行商品显示的页面display.jsp

<?xml version="1.0" encoding="UTF-8" ?>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*,net.hnspi.ejb.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<base href="<%=basePath%>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>title</title>
</head>
<body>
<%
Map<ShopItem,Integer> items = (Map<ShopItem,Integer>)request.getAttribute("items") ;
for(Map.Entry<ShopItem,Integer> me : items.entrySet()){
%>
商品名称:<%=me.getKey().getName() %>----数量:<%=me.getValue() %><br />
<%
}
%>
</body>
</html>



学习书籍:经典java ee企业应用实战
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值