二:服务器端实现
服务器端架构采用TomCat+JAVA+hessian接口来实现
1:TomCat采用apache-tomcat-6.0.20免安装版。
2:hessian包:包括hessian-3.1.5.jar、gson-2.2.1.jar两个包,在Eclipse中导入即可。
3:实体类的实现,以客户为例,实现Serializable接口,并实现变量的get和set。实体类的作用,是用来在数据传输过程中对数据的包装,只包含数据库表中需要传输的字段。
public class CustomerHessian implements Serializable {
private static final long serialVersionUID = 201307091929L;
// 客户编码
protected String cCusCode = "";
public String getCCusCode() { return cCusCode; }
public void setCCusCode(String aCCusCode) { cCusCode = aCCusCode; }
// 客户名称
protected String cCusName = "";
public String getCCusName() { return cCusName; }
public void setCCusName(String aCCusName) { cCusName = aCCusName; }
}
4:接口类,包含所有服务器端接口的定义
public abstract interface HessianAPI {
public abstract String UFuserLogin(String paramString1, String paramString2);//用户登录验证
public abstract String CustomerList(String cPersonCode,String search,int pagecurrent,int pagesize);//客户列表
}
5:实现类,以客户和登录为例,由于客户表没有自增的ID号,分页采用sql2005的RowNumber,每次只取当前页的数据。。
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.caucho.hessian.server.HessianServlet;
import com.google.gson.Gson;
import com.uf.hessian.CustomerHessian;
import com.uf.hessian.DispatchListHessian;
import com.uf.hessian.DispatchListsHessian;
import com.uf.hessian.InventoryHessian;
import com.uf.hessian.SendOrderHessian;
import com.uf.software.util.Tool;
public class HessianApiImpl extends HessianServlet implements HessianAPI {
private static final long serialVersionUID = 20130814132348L;
public String UFuserLogin(String paramString1, String paramString2) {
String resultStr = "";
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=UFMobile";
String userName = "sa";
String userPwd = "";
Connection dbConn=null;
Statement stmt=null;
ResultSet rs;
try {
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL,userName,userPwd);
String sql = "Select * From Person where cPersonCode='" + paramString1 + "' and cPersonPwd='" + Tool.getDigestMD5(paramString2) + "'";
stmt = dbConn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()) {
//System.out.println(rs.getString("cPersonCode") + ", " + rs.getString("cPersonPwd"));
resultStr=rs.getString("cPersonCode")+","+rs.getString("cPersonName")+","+rs.getString("cPosition")+","+rs.getString("cUpPerson")+","+rs.getString("cDepCode");
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if (dbConn != null) {
try { dbConn.close(); }
catch (Exception e) { e.printStackTrace(); }
}
if (stmt != null) {
try { stmt.close(); }
catch (Exception e) { e.printStackTrace(); }
}
}
return resultStr;
}
//客户列表
public String CustomerList(String cPersonCode,String search,int pagecurrent,int pagesize) {
String str = "";
int total_recorder=0;
Gson gson = new Gson();
List<CustomerHessian> list = new ArrayList<CustomerHessian>();
UserCode pv= new UserCode();
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=UFDATA_001_2013";
String userName = "sa";
String userPwd = "";
Connection dbConn=null;
Statement stmt=null;
ResultSet rs;
try {
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL,userName,userPwd);
String sql = "Select count(*) From Customer where cCusPPerson='"+cPersonCode+"'";
stmt = dbConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
while(rs.next()) {
total_recorder=rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if (dbConn != null) {
try { dbConn.close(); }
catch (Exception e) { e.printStackTrace(); }
}
if (stmt != null) {
try { stmt.close(); }
catch (Exception e) { e.printStackTrace(); }
}
}
//当前页
int currpage;
if(Integer.toString(pagecurrent).length()<1){
currpage = 1;
}else{
currpage = pagecurrent;
}
//每页显示条数
int offset = 0;//当前页面显示从第几条开始的数据
int shownum = 0;//当前页面显示数据数量
int lastpage = 0;//最后一页
int perNo = 6;//每页显示页数
int pagecurrentize=perNo;
//总页数
int total_page = (int)Math.ceil((double)total_recorder / (double)pagesize);
lastpage = total_page;
offset = pagesize * (currpage - 1);
if(currpage >= lastpage) {
shownum = total_recorder - offset;
} else {
shownum = pagesize;
}
try {
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL,userName,userPwd);
String sql = "SELECT * FROM (SELECT *,ROW_NUMBER() OVER (ORDER BY a.cCusCode ASC) AS RowNumber FROM Customer AS a) AS b where cCusPPerson='"+cPersonCode+"'";
if (search.trim().length() > 0) {
sql=sql+" and cCusName like '%" + search + "%'";
}
sql=sql+" and RowNumber BETWEEN " + (offset+1) + " AND " + (offset + pagesize);
stmt = dbConn.createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()) {
CustomerHessian vh = new CustomerHessian();
vh.setCCusCode(rs.getString("cCusCode"));
vh.setCCusName(rs.getString("cCusName"));
list.add(vh);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if (dbConn != null) {
try { dbConn.close(); }
catch (Exception e) { e.printStackTrace(); }
}
if (stmt != null) {
try { stmt.close(); }
catch (Exception e) { e.printStackTrace(); }
}
}
java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<CustomerHessian>>(){}.getType();
str = gson.toJson(list, type);
return str;
}
}
6:价格计算,采用JAVA的BigDecimal计算,四舍五入一律先计算结果最后后四舍五入。不能一个结果四舍五入后再计算。
String iUnitPrice=Double.toString(new BigDecimal(iQuotedPrice).divide(new BigDecimal("1.17"),2,BigDecimal.ROUND_HALF_UP).doubleValue());//原币无税单价
7:Servlet配置:
<servlet>
<servlet-name>HessianInterface</servlet-name>
<servlet-class>com.company.HessianApiImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HessianInterface</servlet-name>
<url-pattern>/Hessian/HessianApiImpl</url-pattern>
</servlet-mapping>