GWT ile url içeriği alın

2 Cevap php

I need to get the content from url (http://myweb.com/test.php) using Google Web Toolkit (GWT) I've tried this:

GWT:

    RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, 
"http://myweb.com/test.php?id=65472");
     try {
        rb.sendRequest(null, new RequestCallback() {
             public void onError(final Request request, final Throwable exception) {
                 Window.alert(exception.getMessage());
             }
             public void onResponseReceived(final Request request, final Response response) {
                 //do something
                 GWT.log("response: (" + response.getText() + ")", null);
             }
        });
     } catch (final Exception e) {
             Window.alert(e.getMessage());
     }

PHP:

<?php

$var1 = $_GET["id"];
echo "The id is: ".$var1;

?>

ama her zaman boş döner -> cevap ();

2 Cevap

Tamam, çözüldü. Bu, "Hosted Mode" üzerinde çalışmak sadece derlemek, sunucuya dosyaları taşımak ve çalışır değildir.

Siz barındırılan modunda bir proxy sunucu uygulamasını kullanabilirsiniz.

Eğer Web.xml doğru yolu altında verilen servlet kaydolun ve servlet'dir PHP sunucu doğru host / port kurarsanız, o zaman ev sahipliği modunda geliştirme sunucuya gönderebilirsiniz.

NOTE Sadece POST uygulanmaktadır .....

public class ProxyServlet extends HttpServlet {

    /**
     * 
     */
    private static final long	serialVersionUID	= 8L;

    private static final String	targetServer		= "localhost";
    private static final int	targetPort			= 80;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	System.err.println("GET NOT implemented!");
    	resp.sendError(HttpStatus.ORDINAL_501_Not_Implemented);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    	handleRequest(req, res);
    }

    @SuppressWarnings("unchecked")
    protected void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    	final StringBuffer file = new StringBuffer();

    	file.append(req.getRequestURI());
    	if (req.getQueryString() != null) {
    		file.append("?" + req.getQueryString());
    	}

    	HttpURLConnection conn = (HttpURLConnection) new URL("http", targetServer, targetPort, file.toString()).openConnection();

    	conn.setRequestMethod("POST");

    	// copy header
    	// copy headers
    	Enumeration headerNames = req.getHeaderNames();
    	while (headerNames.hasMoreElements()) {
    		String name = (String) headerNames.nextElement();
    		String value = req.getHeader(name);

    		value = value.replace(":8080", ":80");

    		conn.addRequestProperty(name, value);
    	}

    	conn.setDoOutput(true);

    	try {
    		OutputStream out = conn.getOutputStream();
    		fastStreamcopy(req.getInputStream(), out);
    	} catch (Exception e) {
    		resp.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "Server down");
    		return;
    	}

    	try {
    		int code = conn.getResponseCode();
    		String msg = conn.getResponseMessage();

    		System.out.println("code: " + code + ", msg: " + msg);
    		resp.setStatus(code, msg);
    		Map<String, List<String>> headerFields = conn.getHeaderFields();

    		for (Map.Entry<String, List<String>> e : headerFields.entrySet()) {
    			for (String val : e.getValue()) {
    				if (e.getKey() != null)
    					resp.addHeader(e.getKey(), val);
    			}
    		}

    		// Try normal stream, then error stream and accept if remote host says that there is no content.
    		try {
    			fastStreamcopy(conn.getInputStream(), resp.getOutputStream());
    		} catch (IOException e) {
    			try {
    				fastStreamcopy(conn.getErrorStream(), resp.getOutputStream());
    			} catch (Exception e1) {
    				if (conn.getContentLength() == 0) {
    					// That ok - nothing there
    				} else {
    					throw e;
    				}

    			}
    		}
    	} catch (IOException e) {
    		System.err.println(e.getMessage());
    		throw e;
    	}

    }

    public static void fastStreamcopy(InputStream input, OutputStream output) throws IOException {
    	final ReadableByteChannel inputChannel = Channels.newChannel(input);
    	final WritableByteChannel outputChannel = Channels.newChannel(output);
    	// copy the channels
    	fastChannelCopy(inputChannel, outputChannel);
    }

    public static void fastChannelCopy(final ReadableByteChannel src, final WritableByteChannel dest) throws IOException {
    	final ByteBuffer buffer = ByteBuffer.allocateDirect(16 * 1024);
    	while (src.read(buffer) != -1) {
    		// prepare the buffer to be drained
    		buffer.flip();
    		// write to the channel, may block
    		dest.write(buffer);
    		// If partial transfer, shift remainder down
    		// If buffer is empty, same as doing clear()
    		buffer.compact();
    	}
    	// EOF will leave buffer in fill state
    	buffer.flip();
    	// make sure the buffer is fully drained.
    	while (buffer.hasRemaining()) {
    		dest.write(buffer);
    	}
    }
}