小弟第一次在用NetBeans写一个小的桌面程序,想模拟一个打开网页的操作, 至于网页的内容可以不用显示出来, 只需要把这个url完全打开就行, 我前面用HttpClient去实现, 可以返回打开页面成功信息,但是现在页面存在有AJAX代码,打开这个页面用AJAX更新这个文章的点击次数, 用HttpClient方式后,去数据库查询,点击次数没有更新,测试失败,后来网上查询有JDIC的方式,但这种方式有几个dll文件需要拷贝,用户再操作的时候肯定不是特别的愿意,所以没有去测试。 不知道有那位兄弟解决过这方面的问题,请赐教一下。。谢谢。
我的理解是有一个网页,网页打开后,网页本身会使用ajax向后台发一个请求?
如果是这样,你用firebug之类的监控,先找出那个ajax请求,看一下带了哪些参数回去.哪些参数是cookie中取的,哪些是从当前页面获取的.然后使用HttpClient获取页面后,再自己拼装参数带上第一次模拟返回的cookie发过去就行了.
这说明服务器端计数不是根据页面请求计数的.这是很常见的技巧,常见的简易方式是根据页面上一个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>看上去就是用来统计的,不过真正原理就需要研究了.
FX是Adobe的FLEX的,,呵呵,这个问题和头像没有什么关系,,我现在用的是NetBeans开发J2SE呢。。
SWT模拟,,能给个例子吗?、不是很明白呢。。才接触1天J2SE
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();
}
}
});
}
}