分享
 
 
 

" + ex + "

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

开发一个支持 SSL 的网页浏览器

我们开发一个支持 SSL 的网页浏览器作为一个完整的例子。该浏览器要做下面的工作:

1. 用户输入 URL,浏览器能接收它。

2. 浏览器能打开到 URL 指定主机的连接。

3. 浏览器能发送 HTTP 命令。

4. 浏览器会等待 HTTP/HTTPS 服务器的回应。

5. 浏览器能接收 Html 回应。

6. 浏览器能解析 HTML 并显示出页面。

我们创建的浏览器要能处理任何 URL 如 HTTP、HTTPS、FTP 等。注重我使用工具类 Javax.swing.text.html.HTMLEditorKit 来解析 HTML,它提供了对 HTML 3.2 的支持。

示例代码 3 中展示了这个浏览器,QBrowser,的代码。注重 QBrowser 实现了 Runnable 接口。我这样做是因为这个浏览器没有提供“停止”按钮。

示例代码 3:QBrowser.java

import java.io.*;

import java.net.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class QBrowser implements ActionListener, Runnable {

private JFrame frame;

private JButton go;

private JEditorPane content;

private JTextField url;

private JLabel statusLine;

// default constrUCtor

public QBrowser () {

buildBrowserInterface();

}

private void buildBrowserInterface() {

frame = new JFrame("Q's Browser");

// on close, exit the application using System.exit(0);

frame.setDefaultCloseOperation (3);

url = new JTextField("", 25);

go = new JButton("Go Get It");

go.addActionListener(this);

JPanel controls = new JPanel(new FlowLayout ());

controls.add(new JLabel("URL:"));

controls.add(url);

controls.add(go);

content = new JEditorPane();

content.setEditable(false);

// HTML text. Use the kit in the class javax.swing.text.html.HTMLEditorKit, which

// provides support for HTML 3.2

content.setContentType("text/html");

content.setText("Q's Browser Copyright (c) 2002 Qusay H. Mahmoud");

statusLine = new JLabel("Initialization Complete");

JPanel panel = new JPanel(new BorderLayout (0, 2));

frame.setContentPane(panel);

panel.add(controls, "North");

panel.add(new JScrollPane (content), "Center");

panel.add(statusLine, "South");

frame.pack();

frame.setVisible(true);

}

/**

* You cannot stop a download with QBrowser

* The thread allows multiple downloads to start

* concurrently in case a download freezes

*/

public void actionPerformed (ActionEvent event) {

Thread thread = new Thread(this);

thread.start();

}

// this is the Thread's run method

public void run () {

try {

String str = url.getText();

URL url = new URL(str);

readURL(url);

} catch (IOException ioe) {

statusLine.setText("Error: "+ioe.getMessage());

showException(ioe);

}

}

private void showException(Exception ex) {

StringWriter trace = new StringWriter ();

ex.printStackTrace (new PrintWriter (trace));

content.setContentType ("text/html");

content.setText ("" + ex + "" + trace + "

");

}

/**

* The URL class is capable of handling http:// and https:// URLs

*/

private void readURL(URL url) throws IOException {

statusLine.setText("Opening " + url.toExternalForm());

URLConnection connection = url.openConnection();

StringBuffer buffer = new StringBuffer();

BufferedReader in=null;

try {

in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

String line;

while ((line = in.readLine()) != null) {

buffer.append(line).append('\n');

statusLine.setText("Read " + buffer.length () + " bytes...");

}

} finally {

if(in != null) in.close();

}

String type = connection.getContentType();

if(type == null) type = "text/plain";

statusLine.setText("Content type " + type);

content.setContentType(type);

content.setText(buffer.toString());

statusLine.setText("Done");

}

public static void main (String[] args) {

QBrowser browser = new QBrowser();

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有