一个简单的回调(例子)

1.声明一个回调Interface:

public interface CallBack {

     /** 

     * 执行回调方法 

     * @param objects   将处理后的结果作为参数返回给回调方法 

     */  

    public void execute(Object... objects ); 

}

 

2.回调的地方继承回调,实现回调的方法:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLConnection;



import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.xml.ws.spi.http.HttpContext;









public class testServlet extends HttpServlet implements CallBack{



    NetTool netTool;

    HttpServletResponse globalResponse;

    String netResult;

    /**

     * Constructor of the object.

     */

    public testServlet() {

        super();

    }



    /**

     * Destruction of the servlet. <br>

     */

    public void destroy() {

        super.destroy(); // Just puts "destroy" string in log

        // Put your code here

    }



    /**

     * The doGet method of the servlet. <br>

     *

     * This method is called when a form has its tag value method equals to get.

     * 

     * @param request the request send by the client to the server

     * @param response the response send by the server to the client

     * @throws ServletException if an error occurred

     * @throws IOException if an error occurred

     */

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {



        globalResponse = response;

        netTool = new NetTool();



        netTool.sendGet("", this);

    }



    public void outPut(HttpServletResponse response){

        response.setContentType("text/html");

        response.setHeader("content-type", "text/html;charset=UTF-8");

        PrintWriter out;

        try {

            out = response.getWriter();

            out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");

            out.println("<HTML>");

            out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");

            out.println("  <BODY>");

            out.print("  ");

            out.print(this.getClass()+" : \n");

            out.print(netResult);

            out.println("  </BODY>");

            out.println("</HTML>");

            out.flush();

            out.close();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        

    }

    

    

    /**

     * The doPost method of the servlet. <br>

     *

     * This method is called when a form has its tag value method equals to post.

     * 

     * @param request the request send by the client to the server

     * @param response the response send by the server to the client

     * @throws ServletException if an error occurred

     * @throws IOException if an error occurred

     */

    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {



        response.setContentType("text/html");

        PrintWriter out = response.getWriter();

        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");

        out.println("<HTML>");

        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");

        out.println("  <BODY>");

        out.print("    This is ");

        out.print(this.getClass());

        out.println(", using the POST method");

        out.println("  </BODY>");

        out.println("</HTML>");

        out.flush();

        out.close();

    }



    @Override

    public void execute(Object... objects) {

        // TODO Auto-generated method stub

        try {

            String result = (String)objects[0];

            netResult = new String(result.getBytes(), "UTF-8");

        } catch (UnsupportedEncodingException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        outPut(globalResponse);

    }



}

 

3.回调自己:

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.URL;

import java.net.URLConnection;





public class NetTool {

    

    public NetTool(){

        super();

    }

    

    public void sendGet(String url, CallBack callBack) {

        String result = "";

        BufferedReader in = null;

        try {

            String urlNameString = "http://m.weather.com.cn/data/101010100.html";

            URL realUrl = new URL(urlNameString);

            // 打开和URL之间的连接

            URLConnection connection = realUrl.openConnection();

            // 设置通用的请求属性

//            connection.setRequestProperty("accept", "*/*");

//            connection.setRequestProperty("connection", "Keep-Alive");

//            connection.setRequestProperty("user-agent",

//                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

            // 建立实际的连接

            connection.connect();

            // 获取所有响应头字段

            /*

             * Map<String, List<String>> map = connection.getHeaderFields(); //

             * 遍历所有的响应头字段 for (String key : map.keySet()) {

             * System.out.println(key + "--->" + map.get(key)); }

             */

            // 定义 BufferedReader输入流来读取URL的响应

            in = new BufferedReader(new InputStreamReader(

                    connection.getInputStream()));

            String line;

            while ((line = in.readLine()) != null) {

                result += line;

            }

        } catch (Exception e) {

            System.out.println("发送GET请求出现异常!" + e);

            e.printStackTrace();

        }

        // 使用finally块来关闭输入流

        finally {

            try {

                if (in != null) {

                    in.close();

                }

            } catch (Exception e2) {

                e2.printStackTrace();

            }

        }

        callBack.execute(result);

    }

}

 

 

你可能感兴趣的:(例子)