当前位置: 代码迷 >> J2SE >> 在j2se中怎么模拟的打开一个网页
  详细解决方案

在j2se中怎么模拟的打开一个网页

热度:246   发布时间:2016-04-24 01:31:35.0
在j2se中如何模拟的打开一个网页
小弟第一次在用NetBeans写一个小的桌面程序,想模拟一个打开网页的操作, 至于网页的内容可以不用显示出来, 只需要把这个url完全打开就行, 我前面用HttpClient去实现, 可以返回打开页面成功信息,但是现在页面存在有AJAX代码,打开这个页面用AJAX更新这个文章的点击次数, 用HttpClient方式后,去数据库查询,点击次数没有更新,测试失败,后来网上查询有JDIC的方式,但这种方式有几个dll文件需要拷贝,用户再操作的时候肯定不是特别的愿意,所以没有去测试。 不知道有那位兄弟解决过这方面的问题,请赐教一下。。谢谢。

------解决方案--------------------
你问题描述的很不清楚.
我的理解是有一个网页,网页打开后,网页本身会使用ajax向后台发一个请求?
如果是这样,你用firebug之类的监控,先找出那个ajax请求,看一下带了哪些参数回去.哪些参数是cookie中取的,哪些是从当前页面获取的.然后使用HttpClient获取页面后,再自己拼装参数带上第一次模拟返回的cookie发过去就行了.


------解决方案--------------------
探讨

就是打开一个页面,例如:http://cloud.csdn.net/a/20120312/313041.html

你直接用浏览器打开,文章的阅读次数就会增加,

但直接用HttpClient文章次数就无法增加,,就是用JAVA完全模拟打开这个页面的所有操作。。

------解决方案--------------------
你这个需求有点意思,桌面程序看你头像应该是用JAVAFX,我不太了解,不过我用SWT模拟了一下用了Browser.setURL(""),这种方式是可以符合你的要求的,只是不知道是否还算JAVASE的范畴。FX中应该也有类似Browser的类吧
------解决方案--------------------
既然是AJAX的话,实际上也是想服务器发送了一个URL请求的啊,你可以看下这个页面的源码,找到那个url,然后你直接用这个URL就可以了
------解决方案--------------------
一个方法是基于SWT重写你的程序.

另外就是AWT嵌入SWT组件,很少有,稳定性未知.

Java code
import java.awt.Canvas;import java.awt.Dimension;import org.eclipse.swt.SWT;import org.eclipse.swt.awt.SWT_AWT;import org.eclipse.swt.browser.Browser;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Shell;public class SWTBrowser implements Runnable{        private Canvas canvas;    private Display display;    private Browser browser;         public SWTBrowser(Canvas canvas) {        this.canvas = canvas;    }        public  void run(){                display = Display.getDefault();        Shell shell = SWT_AWT.new_Shell(display, canvas);        Dimension dim = canvas.getSize ();        shell.setSize (dim.width, dim.height);                shell.setLayout(new FillLayout());                browser = new Browser(shell,SWT.NONE);                shell.layout();        while(!browser.isDisposed()){            if(!display.readAndDispatch()){                display.sleep();            }        }    }    public boolean setUrl(final String url) {        if(display==null) return false;        ReturnableRunnable rb = new ReturnableRunnable(url);        display.syncExec(new Runnable() {                        public void run() {                browser.setUrl(url);            }        });        return rb.reuslt;    }        class ReturnableRunnable implements Runnable{                boolean reuslt;        String url;                ReturnableRunnable(String u){            this.url = u;        }                public void run() {            reuslt = browser.setUrl(url);        }    }    }import java.awt.BorderLayout;import java.awt.Button;import java.awt.Canvas;import java.awt.EventQueue;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;public class TestSwtBrowser extends JFrame {    private static final long serialVersionUID = 1L;    private JPanel contentPane;    private SWTBrowser swtBrowse;    public TestSwtBrowser() {        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        setBounds(100, 100, 715, 516);        contentPane = new JPanel();        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));        setContentPane(contentPane);        contentPane.setLayout(new BorderLayout(0, 0));                        Button textField = new Button();        textField.setLabel("goto");        textField.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                boolean b = swtBrowse.setUrl("www.baidu.com");                System.out.println(b);            }        });        contentPane.add(textField, BorderLayout.NORTH);                Canvas canvas = new Canvas();        contentPane.add(canvas, BorderLayout.CENTER);                swtBrowse = new SWTBrowser(canvas);        new Thread(swtBrowse,"SWT-UI-Thread").start();        }    public static void main(String[] args) {        EventQueue.invokeLater(new Runnable() {            public void run() {                try {                    TestSwtBrowser frame = new TestSwtBrowser();                    frame.setVisible(true);                } catch (Exception e) {                    e.printStackTrace();                }            }        });    }    }