黑马程序员_自定义浏览器访问tomcat
2012-01-29 16:11
78 查看
---------------------- android培训、java培训、期待与您交流! ----------------------
进入第24天的学习了,感觉挺有意思的,因为很多以前关于浏览器或者网络服务器的疑惑解开了不少,而且了解的比较透彻,当然本人的还是初级水平。通过这一整天的学习领略了自己做服务端,让浏览器访问,或者做一个“山寨”版的浏览器去访问tomcat服务器,真的是其乐无穷。现在我跟大家一起分享一下经验。
浏览器的界面需要用到gui章节的知识,幸亏还有存档,直接拿来用。网络编程这部分的知识需着重介绍,这里有两种方式可供参考:
第一种:
首先我们要考虑的是从文本框中获得url,其次要对url进行处理,具体代码如下:
String url=ta.getText();//http://192.168.1.254:8080/myweb/demo.html
int index1=url.indexOf("//")+2;
int index2=url.indexOf("/");
String str=url.substring(index1,index2);
String []arr=str.split(":");
String host=arr[0];
int port =Integer.parseInt(arr[1]);
String path=url.substring(index2);
上述代码完成的功能是获取主机名,端口号和资源路径。接下来就是定义Socket,完成浏览器提交访问请求的功能,具体代码如下:
Socket s=new Socket(host,port);
PrintWriter out=new PrintWriter(s.getOutputStream(),true);
out.println("GET"+ path+"HTTP/1.1");
out.println("Accept:*/*");
out.println("Accept-Language: zh-CN");
out.println("Host: 127.0.0.1:12000");
//out.println("Connection: Keep-Alive");
out.println("Connection: closed");//连接保持的方式,如果是keep-Alive则连接一直保持,如果是closed则表示为发完数据就结束
out.println("");//一定要空一行,区分消息头,和请求数据体
out.println("");
提交请求完成之后,就从流中读取服务器端反馈的数据,代码如下:
BufferedReader bufr=new BufferedReader(new InputStreamReader(s.getInputStream()));
String line=null;
while((line=bufr.readLine())!=null)
{
ta.append(line+"\r\n");
}
s.close();
上述所有的代码皆放在文本框监视器事件中。这种方法实现的浏览器功能其实是在传输层完成的,所以从服务端得到的数据包含消息报头和所请求的数据。
第二种方法则不然:
首先我们把从文本框中获得字符串封装成URL对象,然后调用openConnection()方法实现远程连接,但此方法会返回URLConnection对象,其功能就等同于Socket建立连接发送请求,因而URLConnection中也提供了获得读取流的方法getInputStream()方法供其对象调用,最后老生常谈的动作,定义缓冲区,读取数据并显示在文本域中,具体代码如下:
String urlpath=ta.getText();//http://192.168.1.254:8080/myweb/demo.html
URL url=new URL(urlpath);
URLConnection conn=url.openConnection();
//System.out.println(conn);
InputStream in=conn.getInputStream();//URLConnection类中有获得读取流的方法,本质是socket中的方法
byte []buf=new byte[1024];
int len=in.read(buf);
ta.setText(new String(buf,0,len));
在此,我想说明一下,URL类提供了很多很方便的方法供我们使用,不必再像第一种方式那样,苦苦寻找恰当的数据,譬如以下代码:
URL url=new URL("http://127.0.0.1/myweb/demo.html?name=wangwu&age=89");
System.out.println("Protocol:"+url.getProtocol());
System.out.println("Host:"+url.getHost());
System.out.println("Port :"+url.getPort());
System.out.println("Path :"+url.getPath());
System.out.println("File :"+url.getFile());
System.out.println("Query :"+url.getQuery());
这种方式很高效,而且使得代码变的清爽易懂,不过个人强调一点,上面中的getFile()方法返回的值是getPath()的返回值加上getQuery()的返回值,如果getQuery()的返回值为空,则其值则于getPath() 的值相同的,同时getQuery()的返回值是资源路径后面的查询部分。
---------------------- android培训、java培训、期待与您交流! ----------------------
进入第24天的学习了,感觉挺有意思的,因为很多以前关于浏览器或者网络服务器的疑惑解开了不少,而且了解的比较透彻,当然本人的还是初级水平。通过这一整天的学习领略了自己做服务端,让浏览器访问,或者做一个“山寨”版的浏览器去访问tomcat服务器,真的是其乐无穷。现在我跟大家一起分享一下经验。
浏览器的界面需要用到gui章节的知识,幸亏还有存档,直接拿来用。网络编程这部分的知识需着重介绍,这里有两种方式可供参考:
第一种:
首先我们要考虑的是从文本框中获得url,其次要对url进行处理,具体代码如下:
String url=ta.getText();//http://192.168.1.254:8080/myweb/demo.html
int index1=url.indexOf("//")+2;
int index2=url.indexOf("/");
String str=url.substring(index1,index2);
String []arr=str.split(":");
String host=arr[0];
int port =Integer.parseInt(arr[1]);
String path=url.substring(index2);
上述代码完成的功能是获取主机名,端口号和资源路径。接下来就是定义Socket,完成浏览器提交访问请求的功能,具体代码如下:
Socket s=new Socket(host,port);
PrintWriter out=new PrintWriter(s.getOutputStream(),true);
out.println("GET"+ path+"HTTP/1.1");
out.println("Accept:*/*");
out.println("Accept-Language: zh-CN");
out.println("Host: 127.0.0.1:12000");
//out.println("Connection: Keep-Alive");
out.println("Connection: closed");//连接保持的方式,如果是keep-Alive则连接一直保持,如果是closed则表示为发完数据就结束
out.println("");//一定要空一行,区分消息头,和请求数据体
out.println("");
提交请求完成之后,就从流中读取服务器端反馈的数据,代码如下:
BufferedReader bufr=new BufferedReader(new InputStreamReader(s.getInputStream()));
String line=null;
while((line=bufr.readLine())!=null)
{
ta.append(line+"\r\n");
}
s.close();
上述所有的代码皆放在文本框监视器事件中。这种方法实现的浏览器功能其实是在传输层完成的,所以从服务端得到的数据包含消息报头和所请求的数据。
第二种方法则不然:
首先我们把从文本框中获得字符串封装成URL对象,然后调用openConnection()方法实现远程连接,但此方法会返回URLConnection对象,其功能就等同于Socket建立连接发送请求,因而URLConnection中也提供了获得读取流的方法getInputStream()方法供其对象调用,最后老生常谈的动作,定义缓冲区,读取数据并显示在文本域中,具体代码如下:
String urlpath=ta.getText();//http://192.168.1.254:8080/myweb/demo.html
URL url=new URL(urlpath);
URLConnection conn=url.openConnection();
//System.out.println(conn);
InputStream in=conn.getInputStream();//URLConnection类中有获得读取流的方法,本质是socket中的方法
byte []buf=new byte[1024];
int len=in.read(buf);
ta.setText(new String(buf,0,len));
在此,我想说明一下,URL类提供了很多很方便的方法供我们使用,不必再像第一种方式那样,苦苦寻找恰当的数据,譬如以下代码:
URL url=new URL("http://127.0.0.1/myweb/demo.html?name=wangwu&age=89");
System.out.println("Protocol:"+url.getProtocol());
System.out.println("Host:"+url.getHost());
System.out.println("Port :"+url.getPort());
System.out.println("Path :"+url.getPath());
System.out.println("File :"+url.getFile());
System.out.println("Query :"+url.getQuery());
这种方式很高效,而且使得代码变的清爽易懂,不过个人强调一点,上面中的getFile()方法返回的值是getPath()的返回值加上getQuery()的返回值,如果getQuery()的返回值为空,则其值则于getPath() 的值相同的,同时getQuery()的返回值是资源路径后面的查询部分。
---------------------- android培训、java培训、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员 Java练习-自定义图形化界面模拟浏览器访问Tomcat服务器
- 黑马程序员-Java之自定义图形化界面的浏览器访问本地的Tomcat服务器
- TCP-自定义图形界面浏览器访问tomcat服务器
- TCP-URL对象方法替换split方法简化代码自定义图形界面浏览器访问tomcat服务器
- 黑马程序员——TCP并发,浏览器客户端与Tomcat服务器
- 浏览器访问web服务器的图解和tomcat体系结构图
- Eclipse 内部启动 Tomcat,浏览器访问出错的解决方法
- 5.Tomcat在Eclipse中正常启动,但是浏览器却访问不了 ̄□ ̄||
- 同一台服务器,安装两个Tomcat,同一路径不同端口号,同一浏览器下不能同时访问问题
- 网络编程(自定义浏览器-Tomcat服务器)
- linux新加坡专有网络部署tomcat以后外部浏览器无法访问--专线网络安全组策略
- 在wtp下通过外部浏览器访问tomcat
- 使用自定义服务器、浏览器作为客户端访问
- Linux下Tomcat启动正常,但浏览器无法访问
- 转:Linux中tomcat服务成功发布但局域网浏览器无法访问
- 问题:Tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误
- Linux下Tomcat启动正常,但浏览器无法访问
- 转 Eclipse中启动tomcat 浏览器无法访问8080端口
- eclipse中tomcat启动后浏览器访问不到
- linux中启动tomcat后浏览器无法访问的解决方法