java之初識服務器跨域獲取數據


當一個項目膨大到無法進行整理時,而作為新負責維護的團隊是非常苦惱的。對於想實現兩個系統的數據訪問,使用Ajax數據請求方式獲取jsonp格式的數據

需要有前端jquery庫文件。

前端代碼通過jquery的處理方式如下:

$.ajax({
        type : "get", //jquey是不支持post方式跨域的
        async:false,
        url : "http://192.168.0.113:8080/test/", //跨域請求的URL
        dataType : "jsonp",
        //傳遞給請求處理程序,用以獲得jsonp回調函數名的參數名(默認為:callback)
        jsonp: "callback",
        //自定義的jsonp回調函數名稱,默認為jQuery自動生成的隨機函數名
        jsonpCallback:"success_jsonpCallback",
        //成功獲取跨域服務器上的json數據后,會動態執行這個callback函數
        success : function(json){ 
          alert(json.name); 
        } 
    }); 

這時候,我是通過原生servlet進行測試的,通過獲取jsonp的參數callback就可以拿到這個方法名字。

public class ServletTest extends HttpServlet {

    private final String gdtcUrl = "http://www.xxxxx
.cn/"; /** * 毫秒 */ private final long delayTime = 60 * 1000; /** * 定時器 */ private Timer mTimer = null; /** * 緩存json */ private String cashJson = null; @Override public void init() throws ServletException { String params = getInitParameter("iniParam"); System.out.println(params); mTimer = new Timer(); mTimer.schedule(new TimerTask() { @Override public void run() { List<ModuleBean> datas = JdbcConnection.getFast5Hm(); cashJson = JSON.toJSONString(datas); System.out.println("數據定時來了:" + cashJson); } }, 0, delayTime); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setCharacterEncoding("GBK"); resp.setContentType("text/plain;charset=UTF-8"); String referer = req.getHeader("Referer"); System.out.println("來訪地址:" + referer); if (referer != null && referer.startsWith(gdtcUrl)) { // 當緩存為空時,請求一次數據庫 if (cashJson == null) { cashJson = JSON.toJSONString(JdbcConnection.getFast5Hm()); }
         String renderStr
= req.getParameter("callback") + "(" + cashJson + ")"; resp.getWriter().write(renderStr); } else { resp.getWriter().write("error of no authority"); } resp.getWriter().flush(); } }

上面這種方式利用了緩存策略,把查詢的數據緩存下來,緩解了服務器壓力

通過referer對訪問地址進行安全限制。重要的是把json數據拼接成jsonp格式返回給了前端ajax那個callback回調方法

初次在項目上着手后台,希望以后能有更大的進步

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM