HelloWorld 善戰者,求之于勢,不責于人;故能擇人而任勢。

          知止而后有定,定而后能靜,靜而后能安,安而后能慮,慮而后能得。物有本末,事有終始。知所先后,則近道矣。

            BlogJava :: 首頁 ::  :: 聯系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 40 評論 :: 0 Trackbacks

          src cod down  http://www.aygfsteel.com/Files/zhaochengming/servletInvoke.rar
          <1>先定義一些解析的方法,這里是處理接到請求后的處理

          package com.invoke.process;

          import java.lang.annotation.Retention;
          import java.lang.annotation.RetentionPolicy;

          @Retention(RetentionPolicy.RUNTIME)
          public @interface InvokeAnno {
          /**
             * 調用的函數名稱
             */
          String methodName();

          /**
             * 調用的類
             */
          Class invodeClass();

          /**
             * 調用的參數類型
             */
          Class[] paramClass();

          /**
             * 返回類型
             */
          Class returnClass() default Object.class;
          }

          package com.invoke.process;

          import java.lang.reflect.Field;
          import java.lang.reflect.Method;
          import java.util.List;

          public class InvokeBussiness {
          public static Object query(InvokeEnum enu,Object obj) {
             try {
              Field field = InvokeEnum.class.getField(enu.toString());
              InvokeAnno sa = field.getAnnotation(InvokeAnno.class);
              Class[] cs = sa.paramClass();
              Class invodeClass = sa.invodeClass();
              Method method = invodeClass.getMethod(sa.methodName(),cs);
              if (cs.length == 1) {
                obj = method.invoke(invodeClass.newInstance(), obj);     
              } else if (cs.length == 0) {
               obj = method.invoke(invodeClass.newInstance());
              } else {    
               obj = method.invoke(invodeClass.newInstance(), ((List)obj).toArray());
              }
             } catch (Exception e) {
              e.printStackTrace();
             }
             return obj;
          }
          }

          package com.invoke.process;

          import java.util.List;

          import com.invoke.bussiness.ValidateUser;

          public enum InvokeEnum {
          /**
             * 驗證用戶名密碼
             */
          @InvokeAnno(invodeClass=ValidateUser.class, methodName="isRightUser",
              paramClass={String.class,String.class},returnClass = boolean.class)
          ValidateUser,

          @InvokeAnno(invodeClass=ValidateUser.class, methodName="queryAllUser",
              paramClass={},returnClass = List.class)
          GetAllUser,
          }

          <2>服務端的業務

          package com.invoke.bussiness;

          import java.util.ArrayList;
          import java.util.List;

          /**
          * 驗證用戶信息
          * @author
          *
          */
          public class ValidateUser {
          public boolean isRightUser(String name, String pwd) {
             //經過驗證,這里假設一個
             if (name.equals("admin") && pwd.equals("123456"))
              return true;
             return false;
          }

          /**
             * 返回字符串
             * 用戶名,密碼,角色,部門,電話
             * @return
             */
          public List queryAllUser() {
             //假設查詢的用戶列表
             List<String> list = new ArrayList<String>();
             list.add("admin1,123456,組織管理員,技術,13917811682");
             list.add("admin2,123456,組織管理員,技術,13917811682");
             list.add("admin3,123456,組織管理員,技術,13917811682");
             list.add("admin4,123456,組織管理員,技術,13917811682");
             list.add("admin5,123456,組織管理員,技術,13917811682");
             return list;
          }
          }

          <3>服務端的Servlet
          package com.invoke;

          import java.io.ByteArrayOutputStream;
          import java.io.IOException;
          import java.io.ObjectInputStream;
          import java.io.ObjectOutputStream;
          import java.util.List;

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

          import com.invoke.process.InvokeBussiness;
          import com.invoke.process.InvokeEnum;

          public class InvokeServlet extends HttpServlet {

          private static final long serialVersionUID = 1L;

          @Override
          protected void service(HttpServletRequest request,
              HttpServletResponse response) throws ServletException, IOException {
             ObjectInputStream ois = new ObjectInputStream(request.getInputStream());
             response.setContentType("application/octest-stream");
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             ObjectOutputStream out = new ObjectOutputStream(baos);
             List reqList;
             try {
              reqList = (List) ois.readObject();
              // 開始分析傳入的List
              String enu = (String) reqList.get(1);
              Object params = reqList.get(2);
              out.writeObject(InvokeBussiness.query(InvokeEnum.valueOf(enu), params));
             } catch (Exception e) {
              e.printStackTrace();
             }
             byte buf[] = baos.toByteArray();
             response.setContentLength(buf.length);
             ServletOutputStream servletout = response.getOutputStream();
             servletout.write(buf);
             servletout.close();
          }

          }

          <4>客戶端

          package com.client;

          import java.util.List;

          public interface IRemote {
          /**
             * 調用遠處的Servlet
             * @param listObj 傳入的參數對象
             * 其中 listObj.get(0) 為 Servlet地址url 如 : http://192.168.253.254:8080/ibm/IbmServlet
             * listObj.get(1)為參數命令 ,如 GetAllUser,ValidateUser等,為事先約定好的命令
             * listObj.get(2)為調用的參數集合,是一個List對象
             * @return Object
             * @throws Exception
             */
          public Object inokeServlet(List listObj) throws Exception;
          }

          package com.client;

          import java.io.ObjectInputStream;
          import java.io.ObjectOutputStream;
          import java.net.URL;
          import java.net.URLConnection;
          import java.util.ArrayList;
          import java.util.List;

          public class Client implements IRemote {

          public Object inokeServlet(List listObj) throws Exception {
             URL url = new URL((String)listObj.get(0));
             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(listObj);
             dataout.flush();
             dataout.close();
             ObjectInputStream in = new ObjectInputStream(con.getInputStream());
             Object obj = in.readObject();
             in.close();
             return obj;
          }

          public boolean validateUser(String userName, String pwd) {
             List<Object> list = new ArrayList<Object>();
             list.add("http://localhost:8080/servletInvoke/InvokeServlet");
             list.add("ValidateUser");
             List<String> param = new ArrayList<String>();
             param.add(userName);
             param.add(pwd);
             list.add(param);
             try {
              Boolean bol = (Boolean)inokeServlet(list);
              if (bol)
               System.out.println("驗證成功!");
              else
               System.out.println("驗證失敗,清檢查你的用戶名密碼!");
              return bol;
             } catch (Exception e) {
              e.printStackTrace();
              System.out.println("調用服務器失敗!");
             }
             return false;
          }

          public List getAllUser() {
             List<Object> list = new ArrayList<Object>();
             list.add("http://localhost:8080/servletInvoke/InvokeServlet");
             list.add("GetAllUser");
             List<String> param = new ArrayList<String>();
             list.add(param);
             try {
              List res = (List)inokeServlet(list);
              return res;
             } catch (Exception e) {
              e.printStackTrace();
              System.out.println("獲得用戶列表時候,調用服務器失敗!");
             }
             return null;
          }


          public static void main(String args[]) {
             Client client = new Client();
             client.validateUser("admin", "123456");
             List list = client.getAllUser();
             for (int i = 0; i < list.size(); i++)
              System.out.println(list.get(i));
          }
          }



          </script>

          posted on 2007-08-13 18:45 helloworld2008 閱讀(2855) 評論(1)  編輯  收藏 所屬分類: java

          評論

          # re: java客戶端調用Servlet 2012-07-06 15:42 謝謝啊
          哥們,謝謝,啊
          你好強。  回復  更多評論
            

          主站蜘蛛池模板: 潜山县| 中方县| 辽中县| 瑞丽市| 珲春市| 岢岚县| 道孚县| 泸溪县| 怀集县| 遂溪县| 湘潭市| 清河县| 乌拉特前旗| 张家口市| 平陆县| 资阳市| 大石桥市| 阿克苏市| 通渭县| 木兰县| 昭通市| 马公市| 泉州市| 德阳市| 类乌齐县| 永吉县| 铜陵市| 庐江县| 金阳县| 德阳市| 西安市| 思茅市| 从江县| 岳阳县| 文昌市| 偃师市| 高碑店市| 东乡族自治县| 赤峰市| 班玛县| 安仁县|