java基础--网络编程之 自定义浏览器和URL类的使用
来源:互联网 发布:淘宝上的翡翠是真的吗 编辑:程序博客网 时间:2024/06/18 17:10
笔记摘要:
本篇文章主要介绍了浏览器的工作原理,然后通过自定义的浏览器发送请求来模拟,并介绍了URL类,该类将Socket对象封装,使用起来
更为方便,同时将使用URL对象的自定义浏览器和图形化界面相结合,实现了一个简易的图形化浏览器功能。
最后对于浏览器访问网址时的域名解析进行了解释。
一、自定义浏览器
现实中的浏览器在输入网址后,通常是发送一系列的请求消息,以便服务端识别,服务器在处理客户端的请求之后返回资源文件。
示例说明:
这里主要模拟真实浏览器发送请求,并获取返回的数据,但是并不能对服务端反馈的信息进行解析格式上的解析,因为Socket是在传输层,
可以使用下面的URL封装的对象实现信息的拆包,URL的使用在应用层
自定义浏览器代码:
import java.io.*;import java.net.*;class MyIE {public static void main(String[] args)throws Exception {Socket s = new Socket("192.168.1.254",8080);PrintWriter out = new PrintWriter(s.getOutputStream(),true);//向服务端发送请求消息out.println("GET /myweb/demo.html HTTP/1.1");out.println("Accept: */*");out.println("Accept-Language: zh-cn");out.println("Host: 192.168.1.254:11000");out.println("Connection: closed");BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = null;//读取反馈消息while((line=bufr.readLine())!=null){System.out.println(line);}s.close();}}
二、URL类
URL类
代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,
例如对数据库或搜索引擎的查询。
URL对象的方法示例代码
import java.net.*;class URLDemo {public static void main(String[] args) throws MalformedURLException{//根据 String 表示形式创建 URL 对象URL url = new URL("http://192.168.1.254/myweb/demo.html?name=haha&age=30");System.out.println("getProtocol() :"+url.getProtocol()); //获取此 URL 的协议名称System.out.println("getHost() :"+url.getHost()); //获取此 URL 的主机名(如果适用)System.out.println("getPort() :"+url.getPort()); //获取此 URL 的端口号。System.out.println("getPath() :"+url.getPath());//获取此 URL 的路径部分。System.out.println("getFile() :"+url.getFile());//获取此 URL 的文件名。System.out.println("getQuery() :"+url.getQuery());//获取此 URL 的查询部/*当访问时没有指定端口,就默认访问80端口的原因:当没有指定端口号时getPort()==-1int port = getPort();if(port==-1)port = 80;getPort()==-1*/}}
三、使用URL进行网络连接
package cn.xushuai.test;import java.io.InputStream;import java.net.URL;import java.net.URLConnection;public class URLTest {public static void main(String[] args) throws Exception{//根据 String 表示形式创建 URL 对象URL url = new URL("http://192.168.1.254:8080/myweb/demo.html");// 获取一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接//内部封装了socket,所以直接就可以连接,这里是在应用层URLConnection conn = url.openConnection();//System.out.println(conn);//读取服务端反馈的信息InputStream in = conn.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);System.out.println(new String(buf,0,len));}}
四、自定义图形界面浏览器
这里我们需要建立一个Web应用。在C:\apache-tomcat-6.0.35\webapps 下建立一个文件夹myweb并新建一个html文件
作为资源文件
<html><body><h1>我的主页</h1><font size=5 color = red>欢迎你的到来!</font><div>春天花会开,鸟儿自由自在!</br>春天花会开,鸟儿自由自在!</br>春天花会开,鸟儿自由自在!</br>春天花会开,鸟儿自由自在!</br>春天花会开,鸟儿自由自在!</br></div></body></html>
简易的图形化界面浏览器效果图
import java.awt.*;import java.awt.event.*;import java.io.*;import java.net.*;class MyIEByGUI2{private Frame f;private TextField tf;private Button but;private TextArea ta;private Dialog d;private Label lab;private Button okBut;//创建图形化界面MyIEByGUI2(){init();}public void init(){f = new Frame("my window");f.setBounds(300,100,600,500);f.setLayout(new FlowLayout());tf = new TextField(60);but = new Button("转到");ta = new TextArea(25,70);d = new Dialog(f,"提示信息-self",true);d.setBounds(400,200,240,150);d.setLayout(new FlowLayout());lab = new Label();okBut = new Button("确定");d.add(lab);d.add(okBut);f.add(tf);f.add(but);f.add(ta);myEvent();f.setVisible(true);}//事件监听器private void myEvent(){okBut.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){d.setVisible(false);}});d.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){d.setVisible(false);}});tf.addKeyListener(new KeyAdapter(){public void keyPressed(KeyEvent e){try{if(e.getKeyCode()==KeyEvent.VK_ENTER)showDir();}catch (Exception ex){}}});but.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){try{showDir();}catch (Exception ex){}}});f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}//显示网页内容private void showDir()throws Exception{ta.setText("");String urlPath = tf.getText();//http://192.168.1.254:8080/myweb/demo.htmlURL url = new URL(urlPath);//获取一个网络连接对象URLConnection conn = url.openConnection();//读取服务端反馈的信息InputStream in = conn.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);ta.setText(new String(buf,0,len));}public static void main(String[] args) {new MyIEByGUI2();}}
五、小知识点:
1、当使用Socket
()
空构造函数
时,我们要通过connect
(SocketAddress endpoint)
来连接。
SocketAddress为抽象类,其子类为InetSocketAddress
子类的构造函数:
InetSocketAddress(InetAddress addr,int port),它与InetAddress的区别是多封装了一个端口号
2.ServerSocket(int port ,int backlog)
backlog:闯入连接指示(对连接的请求)的最大队列长度被设置为backlog参数,即最大连接数
六、域名解析
客户机使用浏览器访问主机名:www.sina.com.cn时都做了什么?
首先需要将主机名翻译成IP地址,才能访问,这就是我们需要域名解析
解析过程:
1、 先找本地的hosts文件中的映射关系,本地有,走本地。
本地没有,到公网去找DNS服务器(该服务器记录的是主机名和IP地址的映射关系)
2、 将主机名翻译成IP地址,获取IP地址之后再次向该IP地址发送请求,即向sina主机(服务器)发送请求。
3、有的话就走本地,没有走公网上的地址,
- java基础--网络编程之 自定义浏览器和URL类的使用
- Java网络编程之URL和URI
- 【java编程】TCP_Socket网络编程之用URL类创建浏览器
- Java基础-网络编程(浏览器客户端-自定义服务端)
- Java基础-网络编程(自定义浏览器-Tomcat服务端)
- Java基础-网络编程(自定义图形界面浏览器-Tomcat服务端)
- Java网络编程之URL
- Java网络编程之URL
- Java网络编程之URL
- Java笔记6 网络编程<2>TCP、自定义图形界面浏览器、URL
- Java 网络编程(三) 创建和使用URL访问网络上的资源
- 读书笔记-java网络编程-5URL和URI-URL类
- 网络编程URL类的使用
- Android之使用TCP和URL协议进行网络编程
- Java基础--网络编程02(URL)
- Java网络编程之URL编程
- java网络编程之URL编程
- 网络编程--自定义浏览器
- 23种设计模式(1):单例模式
- struts2 ChainingInterceptor AliasInterceptor
- linux中 likely与unlikely
- Amazon工作环境恶劣员工高流失率 为何却依然能持续成功和创新?
- VC中.rc文件的作用,和MFC有关系吗?新建的mfc工作区中各文件的后缀名与作用。
- java基础--网络编程之 自定义浏览器和URL类的使用
- 用iBator工具生成Ibatis相关类包,其中Example类文件的Criteria类无法使用的问题
- Oracle PSU 补丁号
- Ubuntu 中获得root用户权限
- sqlite数据库的操作
- 鸡兔同笼
- Nor和Nand
- linux增加系统最大文件打开数量
- C++ vector容器类型