首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有办法在每次web数据更改时都解析Java web,而无需用户干预?

有没有办法在每次web数据更改时都解析Java web,而无需用户干预?
EN

Stack Overflow用户
提问于 2019-03-31 23:37:19
回答 1查看 98关注 0票数 0

我创建了一个Arduino设备,可以在每次收到邮件时转换数据。Arduino使用Wi-Fi将数据发送到下面的Web服务器。

代码语言:javascript
复制
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<%@ page import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Mail Log</title>
</head>
<body>
	<table id="mail" align="center" border="0" cellspacing="1" cellpadding="3">
		<tr align="center">
			<td>&nbsp;<strong>Time</strong>&nbsp;</td><td>&nbsp;<strong>Mail</strong>&nbsp;</td>
		</tr>
	<%
		Connection conn=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		try{
			Class.forName("com.mysql.jdbc.Driver");
			conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/STACK","root","mingky1218");
			ps=conn.prepareStatement("SELECT * FROM MESSAGE ORDER BY TIMESTAMP DESC");
			rs=ps.executeQuery();
			while(rs.next()){
				String time=rs.getString("timeStamp");
				String stack=rs.getString("STACK");
				out.println("<tr><td>&nbsp;"+time+"&nbsp;</td><td>&nbsp;Letter: "+stack+"&nbsp;</td></tr>");
			}
		}catch(SQLException e){
			e.printStackTrace();
		}
	%>
	</table>
</body>
</html>

无论何时将数据输入到Web服务器上的表中,Java Fx GUI都会出现,它必须实时更改该值,但它不会更改。

代码语言:javascript
复制
    public class Mail {
String mail;
public Mail() {
    try {
        Document doc = Jsoup.connect("http://localhost14999/stackserver/index.jsp").get();
        Element table = doc.select("table").get(0);
        Elements rows = table.select("tr");

        Element row = rows.get(1);
        Elements cols = row.select("td");

        mail=cols.get(1).text();
        }catch(IOException e) {
            System.out.println(e.getMessage());
            System.out.println(e.toString());
        }
}

    public String getMail() {
        return mail;
    }
    }

上面是解析类Jsoup,下面是Java fx的控件。

代码语言:javascript
复制
public class Controller implements Initializable {
    @FXML private Label mail;
    private Mail mt=new Mail();

    @Override
    public void initialize(URL location, ResourceBundle resources) {

        Thread thread = new Thread() {
            @Override
            public void run() {                     
                while(true) {
                    String wfmail = mt.getMail();
                    Platform.runLater(()->{         
                        mail.setText(wfmail);
                    });
                    try {Thread.sleep(1000);}catch(InterruptedException e) {}
                }
            }
        };
        thread.setDaemon(true);
        thread.start();
    };
}

我也尝试过使用selenium进行解析,但结果是一样的。某些数据解析成功,但数值没有实时变化。有什么好办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-01 02:18:29

我不确定Java fx控制器是如何工作的,但我假设只会创建一个controller的实例,如果这是正确的,那么您只需要创建一次Mail对象。因此,您每次都试图在同一对象上调用getMail()对象。由于您在对象构造期间(即在Mail构造器中)从Mail类请求index.jsp,因此真正从index.jsp读取数据的唯一时刻是在创建Mail对象时。从上面的假设来看,它只发生一次,当fx控制器被加载时。因此,实现所需功能的最简单方法是将代码从Mail构造函数移动到getMail()方法。

代码语言:javascript
复制
public String getMail() {    
    try {
        Document doc = Jsoup.connect("http://localhost14999/stackserver/index.jsp").get();
        Element table = doc.select("table").get(0);
        Elements rows = table.select("tr");

        Element row = rows.get(1);
        Elements cols = row.select("td");

        return cols.get(1).text();
    }catch(IOException e) {
        System.out.println(e.getMessage());
        System.out.println(e.toString());
        return "";
    }
}

但请注意,整个代码看起来丑陋且不明显,因此可以仅用于快速尝试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55442533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档