以前写的:- package whois;
- import java.awt.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.net.URL;
- import java.net.URLConnection;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import javax.swing.*;
- public class Frame1 extends JFrame {
- JPanel contentPane;
- BorderLayout borderLayout1 = new BorderLayout();
- JSplitPane jSplitPane1 = new JSplitPane();
- JPanel jPanel1 = new JPanel();
- BorderLayout borderLayout2 = new BorderLayout();
- JTextField txtip = new JTextField();
- JButton btnok = new JButton();
- JPanel jPanel2 = new JPanel();
- BorderLayout borderLayout3 = new BorderLayout();
- JScrollPane jsc = new JScrollPane();
- JLabel lab = new JLabel();
- JList lst = new JList();
- JLabel jLabel1 = new JLabel();
- public Frame1() {
- try {
- setDefaultCloseOperation(EXIT_ON_CLOSE);
- jbInit();
- } catch (Exception exception) {
- exception.printStackTrace();
- }
- }
- /**
- * Component initialization.
- *
- * @throws java.lang.Exception
- */
- private void jbInit() throws Exception {
- contentPane = (JPanel) getContentPane();
- contentPane.setLayout(borderLayout1);
- setSize(new Dimension(413, 442));
- setTitle("WHOIS 查 询 JAVA 版");
- jSplitPane1.setOrientation(JSplitPane.VERTICAL_SPLIT);
- jSplitPane1.setDividerSize(1);
- jPanel1.setLayout(borderLayout2);
- btnok.setText("查询");
- btnok.addActionListener(new Frame1_btnok_actionAdapter(this));
- jPanel2.setLayout(borderLayout3);
- lab.setBackground(Color.white);
- lab.setBorder(null);
- lab.setText("Code By NinTy");
- jLabel1.setText("域名:");
- contentPane.add(jSplitPane1, java.awt.BorderLayout.CENTER);
- jSplitPane1.add(jPanel1, JSplitPane.TOP);
- jPanel1.add(txtip, java.awt.BorderLayout.CENTER);
- jSplitPane1.add(jPanel2, JSplitPane.BOTTOM);
- jPanel2.add(jsc, java.awt.BorderLayout.CENTER);
- jsc.getViewport().add(lst);
- jPanel2.add(lab, java.awt.BorderLayout.SOUTH);
- jPanel1.add(jLabel1, java.awt.BorderLayout.WEST);
- jPanel1.add(btnok, java.awt.BorderLayout.EAST);
- jSplitPane1.setDividerLocation(30);
- }
- public void btnok_actionPerformed(ActionEvent e) {
- String ip = txtip.getText(); //得到输入的域名
- if (ip.equals("")) { ///非空验证
- javax.swing.JOptionPane.showMessageDialog(this, "请输入域名!");
- return;
- }
- if (ip.matches("http://.+/")) { //检测是不是以http:// 或者以/结束 如果是 提示错误
- javax.swing.JOptionPane.showMessageDialog(this,
- "域名不能以http://开头或者以/结束!");
- return;
- }
- try {
- URL url = new URL( //新建url类对象 用得到的域名构造一个url
- "http://www.seologs.com/ip-domains.html?domainname=" + ip);
- URLConnection connection = url.openConnection(); //得到这个url的连接
- lab.setText("正在查询。。。");
- BufferedReader reader = new BufferedReader(new InputStreamReader( //用这个url连接的getInputStream方法得到一个读取服务端响应的输入流! 用InputStreamReader把字节流转换成字符流 用BufferedReader读取!
- connection.getInputStream()));
- StringBuffer sb = new StringBuffer(); ///构造可变字符串,存储读取到的第一行信息
- String str = reader.readLine(); /////循环读取服务端发来的响应
- while (str != null) {
- sb.append(str); //把读到的第一行都添加到可变字符串中!
- str = reader.readLine();
- }
- DefaultListModel model = new DefaultListModel(); ///// 构造一个JList模型对象 用来存储JList显示的数据
- Pattern pattern = Pattern.compile("\\d+\\)(.+?)
- "); //构造正则表达式对象
- Matcher matcher = pattern.matcher(sb.toString()); //// 构造刚才的正则表达式对象的匹配器对象 用sb.toString() 得到sb的字符串
- int i = 0; //// 声明一个计数变量,因为上面那个正则不太准确 查出来的网址第一行总是多出来的 懒的改正则了 就声明这个i用来检测是不是第一行 如果是 就不加到JList模型中
- int nums = 1; ///计数变量 表示网址数量
- while (matcher.find()) { //用匹配器对象对sb的字符串进行匹配 如果匹配成功 进入循环
- if (i == 0) { ///// 如果是第一次匹配成功
- i++; ///把i的值改成1 不把第一次匹配成功的数据加到JList模型中
- } else if (i != 0) { ///如果i不等于0 就把查到的网址加到模型中
- model.addElement("" + nums + "." + matcher.group(1));
- nums++;
- }
- }
- if (model.size() == 0) { /////检测模型里的数据量 如果是0 提示没有记录
- javax.swing.JOptionPane.showMessageDialog(this, "没有查询到任何记录");
- } else {
- lst.setModel(model); ////如果不是0 设置JList的模型 让它把数据显示出来
- }
- lab.setText("查询完成!");
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- public static void main(String[] args) {
- new Frame1().setVisible(true);
- }
- }
- class Frame1_btnok_actionAdapter implements ActionListener {
- private Frame1 adaptee;
- Frame1_btnok_actionAdapter(Frame1 adaptee) {
- this.adaptee = adaptee;
- }
- public void actionPerformed(ActionEvent e) {
- adaptee.btnok_actionPerformed(e);
- }
- }
复制代码 |