如题所述
å¨J2EEä¸çä¸è¦å®ç°è¿ç¨æ¹æ³è°ç¨çæ段å¾å¤ï¼å¦Springï¼Hessian/Burlap, RMI, and JAX-RPC,
JMS
,webserviceãççï¼ä½ å¯è½æè¿ç¼åEJBçç»éªæ对RMIææäºè§£ï¼å¦æä½ ä½¿ç¨è¿Springæ¡æ¶çè¿ç¨è°ç¨ï¼ä½ å¯è½ä½ åç§è¿ç¨è°ç¨æ¹æ³å°±æ¯è¾æ¸ æ¥åäºè§£ï¼å¯æ¯ä½ æªå¿ å°è¯è¿ä¸åé½æ¯èªå·±æé æ¥å®ç°è¿ç¨è°ç¨ï¼è¿éæ们å°è¯åè¿ç¼åä¸ä¸ªç®åçServletï¼æå ¶ç®åï¼éè¿httpå®ç°è¿ç¨æ¹æ³è°ç¨ãå¸æ对äºservletä½ æä¸ä¸ªæ°ç认è¯ï¼å¨ä¸ä¸ç¯æç« ä¸ï¼æä¼å°è¯ç»ä½ å¦ä¸ä¸ªservletçæ°çåºç¨ã[@more@]让æ们å ä»è¿ä¸ªservletå¼å§ï¼
public class RemoteServlet extends HttpServlet {
public
void service(HttpServletRequest req,
HttpServletResponse resp) throws ServletException
,java.io.IOException{
System.out.print("BaseDataServlet
service received a remote request");
ObjectInputStream in = new
ObjectInputStream(req.getInputStream());
resp.setContentType("application/octest-stream");
ByteArrayOutputStream
byteout = new
ByteArrayOutputStream();
ObjectOutputStream out = new
ObjectOutputStream(byteout);
Request request;
try {
request = (Request)in.readObject();//读åè¿ç¨è°ç¨è¯·æ±çå°è£ 对象
//System.out.println(":n"+request.toString());
RequestProcessor processor=new
RequestProcessor();//请æ±è§£æ对象
out.writeObject(processor.processorLocalhost(request));//æ§è¡è¯·æ±å¹¶ååç»æ out.flush();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
byte buf[]=
byteout.toByteArray();
resp.setContentLength(buf.length);
ServletOutputStream
servletout =
resp.getOutputStream();
servletout.write(buf);
servletout.close();
}
}
è¿ä¸ªservleä»è¾å ¥æµè¯»åè¿ç¨è°ç¨ç请æ±ï¼Request对象ï¼ï¼request =
(Request)in.readObject();åç±è§£æå¨RequestProcessorè°ç¨è¯·æ±ç对象ï¼ç¶åå°ç»æåä¼ ç»è¯·æ±å®¢æ·ç«¯ãRequestå°è£ äºè¯·æ±çä¿¡æ¯ï¼
/**
* 对è¿ç¨è°ç¨è¯·æ±çå°è£
* @author wuxinyang
*/
public class Request implements
java.io.Serializable{
//ç®æ å°åï¼å¦æ为localhostå为æ¬å°æ¹æ³è°ç¨ã
private String server;
//spring
beançé ç½®å称ï¼å¦æé ç½®äºè¯¥å¼åéè¿springé ç½®è£ è½½serviceã private String serviceBeanName;
//æå¡çæ¥å£classå称ï¼å¿ 须带å å private String serviceInterface; //è¦è°ç¨çæ¹æ³å称
private String methodName;
//è¿åç±»åï¼è¯¥å¼ä¸æ¯å¿ é¡»çã private String returnType="void";
//ä¼ å ¥çåæ°å表 private java.util.List arguments=new java.util.ArrayList();
/**
* æé æ¹æ³
*
@param server ç®æ å°å
* @param serviceInterface spring beançé ç½®å称
* @param
methodName æ¹æ³å称
*/
public Request(String server, String serviceInterface,
String methodName) {
super();
this.server =
server;
this.serviceInterface = serviceInterface;
this.methodName =
methodName;
}
/**
* æ·»å è°ç¨åæ°
* @param arg è°ç¨åæ°
*/
public void
addArgument(Object arg){
arguments.add(arg);
}
public java.util.List
getArguments() {
return arguments;
}
public void
setArguments(java.util.List arguments) {
this.arguments =
arguments;
}
public String getMethodName() {
return
methodName;
}
public void setMethodName(String methodName)
{
this.methodName = methodName;
}
public String getReturnType()
{
return returnType;
}
public void setReturnType(String returnType)
{
this.returnType = returnType;
}
public String getServer() {
return
server;
}
public void setServer(String server) {
this.server =
server;
}
public String getServiceInterface() {
return
serviceInterface;
}
public void setServiceInterface(String
serviceInterface) {
this.serviceInterface = serviceInterface;
}
public
String getServiceBeanName() {
return serviceBeanName;
}
public void
setServiceBeanName(String serviceBeanName) {
this.serviceBeanName =
serviceBeanName;
}
/**
* @see
java.lang.Object#toString()
*/
public String
toString() {
return new
ToStringBuilder(this).append("serviceInterface",
this.serviceInterface).append("serviceBeanName",
this.serviceBeanName).append("returnType",
this.returnType)
.append("arguments",
this.arguments).append("server",
this.server).append("methodName",
this.methodName)
.toString();
}
}
RequestProcessorç±»æå¦ä¸æ¹æ³ï¼
public Object processorLocalhost(Request request) {
String
serviceInterface = request.getServiceInterface();//æå¡çæ¥å£classå称(被è°ç¨è çæ¥å£)
try
{
Object
service;
if(request.getServiceBeanName()!=null){
//éè¿Springåå§å
service=com.westerasoft.common.SpringBeanFactory.getBean(request.getServiceBeanName());
}
else{
//åå§å
service
= Class.forName(serviceInterface).newInstance();
}
Method method =
null;
BeanInfo beanInfo =
Introspector.getBeanInfo(service.getClass());
MethodDescriptor[]
methodDescriptors = beanInfo.getMethodDescriptors();
for (int i = 0; i <
methodDescriptors.length; i++) {
MethodDescriptor descriptor =
methodDescriptors[i];
method = descriptor.getMethod();
if
(method.getName().equalsIgnoreCase(request.getMethodName()))
break;
method
= null;
}
if (method != null) {
//è°ç¨è¯·æ±çæ¹æ³
return
method.invoke(service, request.getArguments().toArray());
}
} catch
(Exception e) {
e.printStackTrace();
}
return null;
}
客æ·ç«¯ç±»å¦ä¸ï¼
public class RequestProcessorTest {
public static void main(String[] args)
{
String urlString = "http://localhost:8080/wcommons/servlet/BaseDataServlet";
//urlString="localhost";
//请æ±è°ç¨è¿ç¨æ¥å£com.westerasoft.common.dnet.RemoteServiceçæ¹æ³gbToUtf8(String
src)
Request request = new
Request(urlString,
"com.westerasoft.common.dnet.RemoteService",
"gbToUtf81");
request.addArgument("ä¸å½äººæ°è§£æ¾åABC");//æ·»å è°ç¨åæ°å³æ¹æ³gbToUtf81çåæ°
Object answer = (Object) processor(request
);
System.out.println(answer);
request = new
Request(urlString,null,"findUsers");
//请æ±è°ç¨è¿ç¨æ¥å£userManager(Springé ç½®çbean
name)çfindUsers()æ¹æ³
request.setServiceBeanName("userManager"); answer =
(Object) processor(request );
System.out.println(answer);
}
private Object processor(Request request) {
try {
URL url = new
URL(request.getServer());
java.net.URLConnection con =
url.openConnection();
con.setUseCaches(true);
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestProperty("Content-type",
"application/octest-stream");
con.setRequestProperty("Content-length", "" +
-1);
ObjectOutputStream dataout = new
ObjectOutputStream(con
.getOutputStream());
dataout.writeObject(request);
dataout.flush();
dataout.close();
ObjectInputStream
in = new ObjectInputStream(con.getInputStream());
Object obj =
in.readObject();
in.close();
return obj;
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}
æ¯ä¸æ¯æå ¶ç®åï¼^_^ï¼ï¼å¯ä»¥å®ç°è¿ç¨æ¥å£è°ç¨ãè®°ä½ä½ æ¯éè¿servletæå¡æä¾çï¼æä»¥ä½ ä¹å¯ä»¥å¾å®¹æçæ§å¶åªå¯¹ç»è¿ææçç¨æ·è½å¤è¿ç¨è°ç¨ãå®é åºç¨ä¸ä½ ä¹è®¸éè¦æ´å®åå强大çè¿ç¨è°ç¨æ¡æ¶ï¼æ¯å¦æ¯æhibernateç延è¿å è½½ç¹æ§ï¼åå¼æç³»ç»ççï¼é£ä¹æå¾å¤å¥½ç解å³æ¹æ¡ä¾ä½ éæ©ï¼å·²ç¥çEJBï¼Springï¼Webserviceççï¼é½æ¯ä½ å¯ä»¥èèç好ä¸ä¸ã
转载ï¼ä» ä¾åèï¼ç¥ä½ æå¿«ï¼æ»¡æ请é纳ã
JMS
,webserviceãççï¼ä½ å¯è½æè¿ç¼åEJBçç»éªæ对RMIææäºè§£ï¼å¦æä½ ä½¿ç¨è¿Springæ¡æ¶çè¿ç¨è°ç¨ï¼ä½ å¯è½ä½ åç§è¿ç¨è°ç¨æ¹æ³å°±æ¯è¾æ¸ æ¥åäºè§£ï¼å¯æ¯ä½ æªå¿ å°è¯è¿ä¸åé½æ¯èªå·±æé æ¥å®ç°è¿ç¨è°ç¨ï¼è¿éæ们å°è¯åè¿ç¼åä¸ä¸ªç®åçServletï¼æå ¶ç®åï¼éè¿httpå®ç°è¿ç¨æ¹æ³è°ç¨ãå¸æ对äºservletä½ æä¸ä¸ªæ°ç认è¯ï¼å¨ä¸ä¸ç¯æç« ä¸ï¼æä¼å°è¯ç»ä½ å¦ä¸ä¸ªservletçæ°çåºç¨ã[@more@]让æ们å ä»è¿ä¸ªservletå¼å§ï¼
public class RemoteServlet extends HttpServlet {
public
void service(HttpServletRequest req,
HttpServletResponse resp) throws ServletException
,java.io.IOException{
System.out.print("BaseDataServlet
service received a remote request");
ObjectInputStream in = new
ObjectInputStream(req.getInputStream());
resp.setContentType("application/octest-stream");
ByteArrayOutputStream
byteout = new
ByteArrayOutputStream();
ObjectOutputStream out = new
ObjectOutputStream(byteout);
Request request;
try {
request = (Request)in.readObject();//读åè¿ç¨è°ç¨è¯·æ±çå°è£ 对象
//System.out.println(":n"+request.toString());
RequestProcessor processor=new
RequestProcessor();//请æ±è§£æ对象
out.writeObject(processor.processorLocalhost(request));//æ§è¡è¯·æ±å¹¶ååç»æ out.flush();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
byte buf[]=
byteout.toByteArray();
resp.setContentLength(buf.length);
ServletOutputStream
servletout =
resp.getOutputStream();
servletout.write(buf);
servletout.close();
}
}
è¿ä¸ªservleä»è¾å ¥æµè¯»åè¿ç¨è°ç¨ç请æ±ï¼Request对象ï¼ï¼request =
(Request)in.readObject();åç±è§£æå¨RequestProcessorè°ç¨è¯·æ±ç对象ï¼ç¶åå°ç»æåä¼ ç»è¯·æ±å®¢æ·ç«¯ãRequestå°è£ äºè¯·æ±çä¿¡æ¯ï¼
/**
* 对è¿ç¨è°ç¨è¯·æ±çå°è£
* @author wuxinyang
*/
public class Request implements
java.io.Serializable{
//ç®æ å°åï¼å¦æ为localhostå为æ¬å°æ¹æ³è°ç¨ã
private String server;
//spring
beançé ç½®å称ï¼å¦æé ç½®äºè¯¥å¼åéè¿springé ç½®è£ è½½serviceã private String serviceBeanName;
//æå¡çæ¥å£classå称ï¼å¿ 须带å å private String serviceInterface; //è¦è°ç¨çæ¹æ³å称
private String methodName;
//è¿åç±»åï¼è¯¥å¼ä¸æ¯å¿ é¡»çã private String returnType="void";
//ä¼ å ¥çåæ°å表 private java.util.List arguments=new java.util.ArrayList();
/**
* æé æ¹æ³
*
@param server ç®æ å°å
* @param serviceInterface spring beançé ç½®å称
* @param
methodName æ¹æ³å称
*/
public Request(String server, String serviceInterface,
String methodName) {
super();
this.server =
server;
this.serviceInterface = serviceInterface;
this.methodName =
methodName;
}
/**
* æ·»å è°ç¨åæ°
* @param arg è°ç¨åæ°
*/
public void
addArgument(Object arg){
arguments.add(arg);
}
public java.util.List
getArguments() {
return arguments;
}
public void
setArguments(java.util.List arguments) {
this.arguments =
arguments;
}
public String getMethodName() {
return
methodName;
}
public void setMethodName(String methodName)
{
this.methodName = methodName;
}
public String getReturnType()
{
return returnType;
}
public void setReturnType(String returnType)
{
this.returnType = returnType;
}
public String getServer() {
return
server;
}
public void setServer(String server) {
this.server =
server;
}
public String getServiceInterface() {
return
serviceInterface;
}
public void setServiceInterface(String
serviceInterface) {
this.serviceInterface = serviceInterface;
}
public
String getServiceBeanName() {
return serviceBeanName;
}
public void
setServiceBeanName(String serviceBeanName) {
this.serviceBeanName =
serviceBeanName;
}
/**
* @see
java.lang.Object#toString()
*/
public String
toString() {
return new
ToStringBuilder(this).append("serviceInterface",
this.serviceInterface).append("serviceBeanName",
this.serviceBeanName).append("returnType",
this.returnType)
.append("arguments",
this.arguments).append("server",
this.server).append("methodName",
this.methodName)
.toString();
}
}
RequestProcessorç±»æå¦ä¸æ¹æ³ï¼
public Object processorLocalhost(Request request) {
String
serviceInterface = request.getServiceInterface();//æå¡çæ¥å£classå称(被è°ç¨è çæ¥å£)
try
{
Object
service;
if(request.getServiceBeanName()!=null){
//éè¿Springåå§å
service=com.westerasoft.common.SpringBeanFactory.getBean(request.getServiceBeanName());
}
else{
//åå§å
service
= Class.forName(serviceInterface).newInstance();
}
Method method =
null;
BeanInfo beanInfo =
Introspector.getBeanInfo(service.getClass());
MethodDescriptor[]
methodDescriptors = beanInfo.getMethodDescriptors();
for (int i = 0; i <
methodDescriptors.length; i++) {
MethodDescriptor descriptor =
methodDescriptors[i];
method = descriptor.getMethod();
if
(method.getName().equalsIgnoreCase(request.getMethodName()))
break;
method
= null;
}
if (method != null) {
//è°ç¨è¯·æ±çæ¹æ³
return
method.invoke(service, request.getArguments().toArray());
}
} catch
(Exception e) {
e.printStackTrace();
}
return null;
}
客æ·ç«¯ç±»å¦ä¸ï¼
public class RequestProcessorTest {
public static void main(String[] args)
{
String urlString = "http://localhost:8080/wcommons/servlet/BaseDataServlet";
//urlString="localhost";
//请æ±è°ç¨è¿ç¨æ¥å£com.westerasoft.common.dnet.RemoteServiceçæ¹æ³gbToUtf8(String
src)
Request request = new
Request(urlString,
"com.westerasoft.common.dnet.RemoteService",
"gbToUtf81");
request.addArgument("ä¸å½äººæ°è§£æ¾åABC");//æ·»å è°ç¨åæ°å³æ¹æ³gbToUtf81çåæ°
Object answer = (Object) processor(request
);
System.out.println(answer);
request = new
Request(urlString,null,"findUsers");
//请æ±è°ç¨è¿ç¨æ¥å£userManager(Springé ç½®çbean
name)çfindUsers()æ¹æ³
request.setServiceBeanName("userManager"); answer =
(Object) processor(request );
System.out.println(answer);
}
private Object processor(Request request) {
try {
URL url = new
URL(request.getServer());
java.net.URLConnection con =
url.openConnection();
con.setUseCaches(true);
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestProperty("Content-type",
"application/octest-stream");
con.setRequestProperty("Content-length", "" +
-1);
ObjectOutputStream dataout = new
ObjectOutputStream(con
.getOutputStream());
dataout.writeObject(request);
dataout.flush();
dataout.close();
ObjectInputStream
in = new ObjectInputStream(con.getInputStream());
Object obj =
in.readObject();
in.close();
return obj;
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}
æ¯ä¸æ¯æå ¶ç®åï¼^_^ï¼ï¼å¯ä»¥å®ç°è¿ç¨æ¥å£è°ç¨ãè®°ä½ä½ æ¯éè¿servletæå¡æä¾çï¼æä»¥ä½ ä¹å¯ä»¥å¾å®¹æçæ§å¶åªå¯¹ç»è¿ææçç¨æ·è½å¤è¿ç¨è°ç¨ãå®é åºç¨ä¸ä½ ä¹è®¸éè¦æ´å®åå强大çè¿ç¨è°ç¨æ¡æ¶ï¼æ¯å¦æ¯æhibernateç延è¿å è½½ç¹æ§ï¼åå¼æç³»ç»ççï¼é£ä¹æå¾å¤å¥½ç解å³æ¹æ¡ä¾ä½ éæ©ï¼å·²ç¥çEJBï¼Springï¼Webserviceççï¼é½æ¯ä½ å¯ä»¥èèç好ä¸ä¸ã
转载ï¼ä» ä¾åèï¼ç¥ä½ æå¿«ï¼æ»¡æ请é纳ã
温馨提示:答案为网友推荐,仅供参考