⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webclientui.java

📁 一个简单的HTTP服务器和HTTP客户端程序 HTTP客户端(即浏览器)只支持显示标准HTML
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            {
                try
                {
                    taContent.setPage(url);
                }catch(IOException ioe)
                {
                    error("发送IO错误:"+url);
                    labStatus.setText("浏览页面" + urlSite.getText() + "失败"); 
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
                labStatus.setText("浏览页面" + urlSite.getText() + "失败");
            }
            
            curPositon=(curPositon+1)%10;
            urlList[curPositon]=url;//在循环队列中保存URL地址
            labStatus.setText("浏览页面" + urlSite.getText());
        }
    }

    /**
     * 访问网页
     *
     */
    public void access()
    {
        access(this.urlSite.getText().trim());
    }
    /**
     * 访问网页
     * 通过构造一个线程AccessInternet显示页面
     * @param url
     */
    public void access(String url)
    {
        try
        {
            if (url.trim().equals(""))
            {
                error("您没有输入URL地址");
                return;
            }
            if(url.length()<4||url.substring(0,3).equalsIgnoreCase("www"))
                url="http://"+url;//如果没有加上协议
            new AccessInternet(url).start();//开启线程访问页面
        }
        catch (Exception e)
        {
            e.printStackTrace();
            this.labStatus.setText("浏览页面" + this.urlSite.getText() + "失败");
        }
    }
    /**
     * 错误页面
     * 显示出错信息errorInfo
     * @param errorInfo
     */
    public void error(String errorInfo)
    {
        String htmlError="<html><title></title><body>无法浏览页面,错误原因如下:<li><font color=red>"+errorInfo+"</font></li></body></html>";
        this.taContent.setText(htmlError);
    }
    public void actionPerformed(ActionEvent e)
    {
        //在响应当前事件之前,保存当前的显示页面
        if(flag==1&&curPositon>=0)
            contentList[curPositon]=taContent.getText();
        
        if (e.getSource().equals(this.bAccess))
        {
            this.access();
            flag=1;
        } else if (e.getSource().equals(this.mOpen))
        {
            this.openFile();
            flag=2;
        } else if (e.getSource().equals(this.mSave))
        {
            this.saveFile();
            flag=2;
        } else if (e.getSource().equals(this.mSaveAs))
        {
            this.saveFileAs();
            flag=2;
        } else if (e.getSource().equals(this.mExit))
        {
            this.exit();
            flag=2;
        } else if (e.getSource().equals(this.mBack))
        {
            this.back();
            flag=2;
        } else if (e.getSource().equals(this.mPrevious))
        {
            this.privous();
            flag=2;
        } else if (e.getSource().equals(this.mFind))
        {
            this.find();
            flag=2;
        } else if (e.getSource().equals(this.mAddFavorites))
        {
            this.addFavorites();
            flag=2;
        } else if (e.getSource().equals(this.mRefresh))
        {
            this.refresh();
            flag=1;
        }
        else//浏览收藏夹页面
        {
            this.labStatus.setText("收藏夹:"+e.getActionCommand());
            gotoFavorites(e.getActionCommand());
            flag=1;
        }
    }

    /**
     * 打开文件
     *
     */
    public void openFile()
    {
        FileDialog fd = new FileDialog(this, "打开文件", FileDialog.LOAD);
        fd.setVisible(true);
        if ((fd.getDirectory() != null) && (fd.getFile() != null))
        {
            this.taContent.setText("");
            try
            {
                File file1 = new File(fd.getDirectory(), fd.getFile());
                this.urlSite.setText(file1.toString());
                FileReader fr = new FileReader(file1);
                BufferedReader br = new BufferedReader(fr);
                String content = "";
                String aline;
                while ((aline = br.readLine()) != null)
                    content += (aline + '\n');
                taContent.setText(content);
                br.close();
                fr.close();
                br = null;
                fr = null;
                fd = null;
            } catch (Exception ee)
            {
                System.err.println(ee);
            }
        }
        this.labStatus.setText("打开文件" + urlSite.getText() + "");
    }

    /**
     * 保存文件至本地磁盘
     *
     */
    public void saveFile()
    {
        FileDialog fd = new FileDialog(this, "保存internet网页", FileDialog.SAVE);
        fd.setVisible(true);
        if ((fd.getDirectory() != null) & (fd.getFile() != null))
        {
            File file1 = new File(fd.getDirectory(), fd.getFile());
            try
            {
                FileWriter fw = new FileWriter(file1);
                fw.write(this.taContent.getText());
                fw.close();
                this.labStatus.setText("保存文件成功");
            } catch (IOException ioe)
            {
                System.err.println(ioe);
                this.labStatus.setText("保存文件失败");
            }
        }
    }

    /**
     * 另存文件
     *
     */
    public void saveFileAs()
    {
        this.saveFile();
    }

    /**
     * 退出系统
     *
     */
    public void exit()
    {
        System.exit(0);
    }

    /**
     * 页面后退
     *
     */
    public void back()
    {
        this.labStatus.setText("后退");
        if(backPositon>=accseTime) 
        {
            this.labStatus.setText("无法后退");
            return ;//后退次数不能超过访问页面的次数
        }
        if((this.curPositon<=0)&&(this.backPositon==0)) 
        {
            this.labStatus.setText("无法后退");
            return ;//没有访问页面时,无法后退
        }
        this.backPositon=(this.backPositon+1)%10;

        this.curPositon--;//页面后退
        
        //当访问页面超过缓存大小10个,将两个缓存区看做循环队列
        if(this.curPositon==-1) this.curPositon=9;
        
        this.urlSite.setText(urlList[curPositon]);
        this.taContent.setText(contentList[curPositon]);
    }

    /**
     * 页面前进
     *
     */
    public void privous()
    {
        if(this.backPositon>=1)
        {
            this.backPositon--;
            
            this.curPositon=(this.curPositon+1)%10;//页面前进
            
            this.urlSite.setText(urlList[curPositon]);
            this.taContent.setText(contentList[curPositon]);
            this.labStatus.setText("前进");
        }
        else
            this.labStatus.setText("无法前进");
    }

    /**
     * 页面刷新
     *
     */
    public void refresh()
    {
        this.access();
        this.labStatus.setText("刷新页面");
    }

    /**
     * 添加到收藏夹
     *
     */
    public void addFavorites()
    {
        AddFavoritesUI add = new AddFavoritesUI();
        add.setURL(this.urlSite.getText().trim());
        add.validate();
        add = null;
        initMenuItem();
    }

    public void find()
    {
        if(this.searchUI==null)
        {
            searchUI=new SearchInfoUI();
            searchUI.setBrowser(this);
        }
        searchUI.setVisible(true);
    }
    /**
     * 通过收藏夹上的名称,寻找对应的URL地址,并访问该URL地址
     * 
     * 收藏夹项上面的名字不能重复,否则会出现混乱
     * @param name
     */
    private void gotoFavorites(String name)
    {
        for(Enumeration eee=favorites.keys();eee.hasMoreElements();)
        {
            String saveName=(String)eee.nextElement();
            if(saveName.equals(name))
            {
                String url=(String)favorites.get(saveName);
                access(url);
                break;
            }
   	    }
    }
    /**
     * 通过读取文件favorites.dat
     * 
     * 获取保存的收藏夹地址,并显示出来
     * 并将 名称与地址 的对应关系保存到哈希表中
     */
    public void addFavoritesItem()
    {
        try
        {
            File nowdir=new File(".").getAbsoluteFile();
            String dirString=nowdir.toString();
            String subs=dirString.substring(0,dirString.length()-1);
            File fileInfo=new File(subs+"info/");
            if(!fileInfo.exists())  fileInfo.mkdir();	
         
            File serverInfo=new File(fileInfo,"favorites.dat");
      	 	FileReader fr=new FileReader(serverInfo);
      	 	BufferedReader br=new BufferedReader(fr);
      	 	
      	 	this.mFavorites.removeAll();
      	 	this.mFavorites.add(this.mAddFavorites);
      	 	favorites.clear();
      	 	while(true)
      	 	{
      	 	    String name=br.readLine();
      	 	    if(name==null||name.trim().equals("")) break;
      	 	    String url=br.readLine();
      	 	    if(url==null||url.trim().equals("")) break;
      	 	         	 	    
      	 	    JMenuItem item=new JMenuItem(name);
      	 	    item.addActionListener(this);
      	 	    this.mFavorites.add(item);
      	 	    favorites.put(name,url);
      	 	}
      	 	br.close();
      	 	fr.close();
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    public void keyPressed(KeyEvent e)
    {
        if ((byte) e.getKeyChar() == KeyEvent.VK_ENTER)
        {
            access();
        } 
    }

    public void keyReleased(KeyEvent e)
    {
    }

    public void keyTyped(KeyEvent e)
    {
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -