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

解决方案 »

  1.   

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

  2.   

    就是打开一个页面,例如:http://cloud.csdn.net/a/20120312/313041.html你直接用浏览器打开,文章的阅读次数就会增加,但直接用HttpClient文章次数就无法增加,,就是用JAVA完全模拟打开这个页面的所有操作。。
      

  3.   


    这说明服务器端计数不是根据页面请求计数的.这是很常见的技巧,常见的简易方式是根据页面上一个img请求进行计数.也就是你除了取到页面数据,还给把页面相应的资源也请求一下才能计数.以你给的csdn的网页为例,我看了一下页面最下面有这样一段代码
    <script type="text/javascript" src="http://www.csdn.net/common/counter.js"></script><script>document.write("<img src=http://counter.csdn.net/pv.aspx?id=23 border=0 width=0 height=0>");</script> <script type="text/javascript" src="http://js.tongji.linezing.com/1273337/tongji.js"></script><noscript><a href="http://www.linezing.com"><img src="http://img.tongji.linezing.com/1273337/tongji.gif"/></a></noscript><script>document.write("<img src=http://counter.csdn.net/pv.aspx?id=476 border=0 width=0 height=0>");</script> <script language="JavaScript" type="text/javascript"> new Image().src ="http://dcgroup.csdn.net/UserInGroup.ashx?id=237" ;</script>看上去就是用来统计的,不过真正原理就需要研究了.
      

  4.   

    你这个需求有点意思,桌面程序看你头像应该是用JAVAFX,我不太了解,不过我用SWT模拟了一下用了Browser.setURL(""),这种方式是可以符合你的要求的,只是不知道是否还算JAVASE的范畴。FX中应该也有类似Browser的类吧
      

  5.   


    FX是Adobe的FLEX的,,呵呵,这个问题和头像没有什么关系,,我现在用的是NetBeans开发J2SE呢。。
      

  6.   


    SWT模拟,,能给个例子吗?、不是很明白呢。。才接触1天J2SE
      

  7.   

    既然是AJAX的话,实际上也是想服务器发送了一个URL请求的啊,你可以看下这个页面的源码,找到那个url,然后你直接用这个URL就可以了
      

  8.   

    一个方法是基于SWT重写你的程序.另外就是AWT嵌入SWT组件,很少有,稳定性未知.
    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();
    }
    }
    });
    }

    }
      

  9.   

    我的意思是看你是用什么做的桌面程序,应该也是有界面的吧,那种技术里面应该是有类似Browser功能的类的,Browser.setVisible(false)就行了,不会打开浏览器的,用纯javase的话不知道有没有办法解决