The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks
          就是在前臺中調(diào)用proxy程序的servlet,設置參數(shù)servletName和其它參數(shù)。代理程序會將該請求發(fā)送到目的地址的名稱為servletName的servlet中去,并將其它參數(shù)作為請求的參數(shù),在得到結(jié)果后,將內(nèi)容原樣輸出到請求頁面。
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.OutputStream;
          import java.io.UnsupportedEncodingException;
          import java.net.HttpURLConnection;
          import java.net.MalformedURLException;
          import java.net.URL;
          import java.net.URLEncoder;
          import java.util.Iterator;
          import java.util.Map;
          import java.util.Map.Entry;
          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          public class ProxyServlet extends HttpServlet {
          private String url;
          /**
          * 對servlet進行請求處理,并將結(jié)果在指定輸出流中輸出
          * @param os
          * @param servletName
          * @param parm
          * @throws IOException
          * @throws MalformedURLException
          */
          private void process(HttpServletRequest req, HttpServletResponse resp,
          String[] target) throws MalformedURLException, IOException {
          // 取得連接
          HttpURLConnection huc = (HttpURLConnection) new URL(url + target[0])
          .openConnection();
          // 設置連接屬性
          huc.setDoOutput(true);
          huc.setRequestMethod("POST");
          huc.setUseCaches(false);
          huc.setInstanceFollowRedirects(true);
          huc.setRequestProperty("Content-Type",
          "application/x-www-form-urlencoded");
          huc.connect();
          // 往目標servlet中提供參數(shù)
          OutputStream targetOS = huc.getOutputStream();
          targetOS.write(target[1].getBytes());
          targetOS.flush();
          targetOS.close();
          // 取得頁面輸出,并設置頁面編碼及緩存設置
          resp.setContentType(huc.getContentType());
          resp.setHeader("Cache-Control", huc.getHeaderField("Cache-Control"));
          resp.setHeader("Pragma", huc.getHeaderField("Pragma"));
          resp.setHeader("Expires", huc.getHeaderField("Expires"));
          OutputStream os = resp.getOutputStream();
          // 將目標servlet的輸入流直接往頁面輸出
          InputStream targetIS = huc.getInputStream();
          int r;
          while ((r = targetIS.read()) != -1) {
          os.write(r);
          }
          targetIS.close();
          os.flush();
          os.close();
          huc.disconnect();
          }
          /**
          * 將參數(shù)中的目標分離成由目標servlet名稱和參數(shù)組成的數(shù)組
          * @param queryString
          * @return
          * @throws UnsupportedEncodingException
          */
          private String[] parse(Map map) throws UnsupportedEncodingException {
          String[] arr = { "", "" };
          Iterator iter = map.entrySet().iterator();
          while (iter.hasNext()) {
          Map.Entry me = (Entry) iter.next();
          String[] varr = (String[]) me.getValue();
          if ("servletName".equals(me.getKey())) {
          // 取出servlet名稱
          arr[0] = varr[0];
          } else {
          // 重新組裝參數(shù)字符串
          for (int i = 0; i < varr.length; i++) {
          // 參數(shù)需要進行轉(zhuǎn)碼,實現(xiàn)字符集的統(tǒng)一
          arr[1] += "&" + me.getKey() + "="
          + URLEncoder.encode(varr[i], "utf-8");
          }
          }
          }
          arr[1] = arr[1].replaceAll("^&", "");
          return arr;
          }
          @Override
          public void init() throws ServletException {
          // 設置目標服務器地址
          url = this.getInitParameter("url");
          if (!url.endsWith("/"))
          url = url + "/";
          }
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp)
          throws ServletException, IOException {
          this.doPost(req, resp);
          }
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp)
          throws ServletException, IOException {
          String[] target = parse(req.getParameterMap());
          process(req, resp, target);
          }
          }
          posted on 2015-01-26 17:32 Eric_jiang 閱讀(262) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 土默特右旗| 平昌县| 德兴市| 巴彦淖尔市| 苏尼特左旗| 福海县| 定南县| 南川市| 三都| 当雄县| 黄龙县| 阜新| 岳普湖县| 云南省| 贡嘎县| 阳东县| 平远县| 杨浦区| 大石桥市| 枣强县| 泌阳县| 江阴市| 遵义市| 泰和县| 崇信县| 佛冈县| 裕民县| 卢湾区| 大理市| 邯郸市| 莱芜市| 江城| 和平县| 洛川县| 静乐县| 增城市| 西峡县| 万宁市| 綦江县| 莒南县| 大余县|