当前位置: 首页 > news >正文

电商网站建设意义企业网站seo诊断

电商网站建设意义,企业网站seo诊断,目前有哪些跨境电商平台,河源市住房和城乡规划建设局网站没有借助任何第三方库#xff0c;完全基于JAVA Socket实现一个最小化的HTTP文件下载客户端。完整的演示如何通过Socket实现下载文件的HTTP请求(request header)发送如何从Socket中接受HTTP响应(Response header, Response body)报文并解析与保存文件内容。如何通过SwingWork实…没有借助任何第三方库完全基于JAVA Socket实现一个最小化的HTTP文件下载客户端。完整的演示如何通过Socket实现下载文件的HTTP请求(request header)发送如何从Socket中接受HTTP响应(Response header, Response body)报文并解析与保存文件内容。如何通过SwingWork实现UI刷新实时显示下载进度。首先看一下UI部分【添加下载】按钮点击弹出URL输入框用户Copy要下载文件URL到输入框以后点击[OK]按钮即开始下载【清除完成】按钮清除所有已经下载完成的文件列表文件下载状态分为以下几种package com.gloomyfish.socket.tutorial.http.download;public enum DownLoadStatus {NOT_STARTED,IN_PROCESS,COMPLETED,ERROR}UI部分主要是利用Swing组件完成。点击【添加下载】执行的代码如下final JDialog dialog new JDialog(this,Add File Link,true);dialog.getContentPane().setLayout(new BorderLayout());// dialog.setSize(new Dimension(400,200));final URLFilePanel panel new URLFilePanel();panel.setUpListener(new ActionListener(){Overridepublic void actionPerformed(ActionEvent e) {if(OK.equals(e.getActionCommand())){if(panel.validateInput()) {DownloadDetailStatusInfoModel data new DownloadDetailStatusInfoModel(panel.getValidFileURL());tableModel.getData().add(data);startDownlaod();refreshUI();}dialog.setVisible(false);dialog.dispose();} else if(Cancel.equals(e.getActionCommand())) {dialog.setVisible(false);dialog.dispose();}}});dialog.getContentPane().add(panel, BorderLayout.CENTER);dialog.pack();centre(dialog);dialog.setVisible(true);【清除完成】按钮执行的代码如下private void clearDownloaded() {List downloadedList new ArrayList();for(DownloadDetailStatusInfoModel fileStatus : tableModel.getData()) {if(fileStatus.getStatus().toString().equals(DownLoadStatus.COMPLETED.toString())) {downloadedList.add(fileStatus);}}tableModel.getData().removeAll(downloadedList);refreshUI();}让JFrame组件居中显示的代码如下public static void centre(Window w) {Dimension us w.getSize();Dimension them Toolkit.getDefaultToolkit().getScreenSize();int newX (them.width - us.width) / 2;int newY (them.height - us.height) / 2;w.setLocation(newX, newY);}HTTP协议实现部分概述HTTP请求头与相应头报文基本结构与解释HTTP请求一个标准的HTTP请求报文如其中请求头可以有多个message-body可以没有不是必须的。请求行的格式如下Request-Line Method SP Request-URI SPHTTP-Version CRLF 举例说明如下Request-Line GET http://www.w3.org/pub/WWW/TheProject.htmlHTTP/1.1\r\n其中SP表示空格 CRLF表示回车换行符\r\n当你想要上传文件时候使用Post方式来填写数据到message-body中即可。发送一个简单的HTTP请求报文如下GET /pub/WWW/TheProject.html HTTP/1.1\r\n\r\nHTTP响应一个标准的HTTP响应报文如下最先得到是状态行其格式如下Status-Line HTTP-Version SP Status-CodeSP Reason-Phrase CRLF, 一个状态行的简单例子如下Status-Line HTTP/1.1 200 OK一般大家最喜欢的就是Status-Code会给你很多提示最常见的就是404500等状态码。状态码的意思可以参考RFC2616中的解释。下载文件最要紧是的检查HTTP响应头中的Content-Length与Content-Type两个中分别声明了文件的长度与文件的类型。其它如Accept-Ranges表示接受多少到多少的字节。可能在多线程下载中使用。搞清楚了HTTP请求与响应的报文格式以后我们就可以通过Socket按照报文格式解析内容发送与读取HTTP请求与响应。具体步骤如下一根据用户输入的文件URL建立Socket连接URL url new URL(fileInfo.getFileURL());String host url.getHost();int port (url.getPort() -1) ? url.getDefaultPort():url.getPort();System.out.println(Host Name host);System.out.println(port port);System.out.println(File URI url.getFile());// create socket and start to construct the request lineSocket socket new Socket();SocketAddress address new InetSocketAddress(host, port);socket.connect(address);用了URL类来把用户输入的url string变成容易解析一点的URL。二构造HTTP请求BufferedWriter bufferedWriter new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), UTF8));String requestStr GET url.getFile() HTTP/1.1\r\n; // request line// construct the request header - 构造HTTP请求头(request header)String hostHeader Host: host \r\n;String acceptHeader Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8\r\n;String charsetHeader Accept-Charset: GBK,utf-8;q0.7,*;q0.3\r\n;String languageHeader Accept-Language: zh-CN,zh;q0.8\r\n;String keepHeader Connection: close\r\n;三发送HTTP请求// 发送HTTP请求bufferedWriter.write(requestStr);bufferedWriter.write(hostHeader);bufferedWriter.write(acceptHeader);bufferedWriter.write(charsetHeader);bufferedWriter.write(languageHeader);bufferedWriter.write(keepHeader);bufferedWriter.write(\r\n); // 请求头信息发送结束标志bufferedWriter.flush();四接受HTTP响应并解析内容写入创建好的文件// 准备接受HTTP响应头并解析CustomDataInputStream input new CustomDataInputStream(socket.getInputStream());File myFile new File(fileInfo.getStoreLocation() File.separator fileInfo.getFileName());String content null;HttpResponseHeaderParser responseHeader new HttpResponseHeaderParser();BufferedOutputStream output new BufferedOutputStream(new FileOutputStream(myFile));boolean hasData false;while((content input.readHttpResponseHeaderLine()) ! null) {System.out.println(response header contect -- content);responseHeader.addResponseHeaderLine(content);if(content.length() 0) {hasData true;}if(hasData) {int totalBytes responseHeader.getFileLength();if(totalBytes 0) break; // no response body and dataint offset 0;byte[] myData null;if(totalBytes 2048) {myData new byte[2048];} else {myData new byte[totalBytes];}int numOfBytes 0;while((numOfBytes input.read(myData, 0, myData.length)) 0 offset totalBytes) {offset numOfBytes;float p ((float)offset) / ((float)totalBytes) * 100.0f;if(offset totalBytes) {numOfBytes numOfBytes totalBytes - offset;p 100.0f;}output.write(myData, 0, numOfBytes);updateStatus(p);}hasData false;break;}}简单的HTTP响应头解析类HttpResponseHeaderParser代码如下package com.gloomyfish.socket.tutorial.http.download;import java.util.HashMap;import java.util.Map;/*** it can parse entity header, response head* and response line * refer to RFC2616关于HTTP响应头请看RFC文档描写的很详细啊** author fish**/public class HttpResponseHeaderParser {public final static String CONTENT_LENGTH Content-Length;public final static String CONTENT_TYPE Content-Type;public final static String ACCEPT_RANGES Accetp-Ranges;private Map headerMap;public HttpResponseHeaderParser() {headerMap new HashMap();}/*** get the response header key value pair * param responseHeaderLine*/public void addResponseHeaderLine(String responseHeaderLine) {if(responseHeaderLine.contains(:)) {String[] keyValue responseHeaderLine.split(: );if(keyValue[0].equalsIgnoreCase(CONTENT_LENGTH)) {headerMap.put(CONTENT_LENGTH, keyValue[1]);} else if(keyValue[0].equalsIgnoreCase(CONTENT_TYPE)) {headerMap.put(CONTENT_TYPE, keyValue[1]);} else {headerMap.put(keyValue[0], keyValue[1]);}}}public int getFileLength() {if(headerMap.get(CONTENT_LENGTH) null){return 0;}return Integer.parseInt(headerMap.get(CONTENT_LENGTH));}public String getFileType() {return headerMap.get(CONTENT_TYPE);}public Map getAllHeaders() {return headerMap;}}可执行的Jar文件下载地址(这次我要点分)http://download.csdn.net/detail/jia20003/4862076转载请务必注明
http://www.zqtcl.cn/news/674986/

相关文章:

  • 清远网站建设自学网站开发要多久
  • 可信网站 quot 验证能防范哪些安全.教育类app开发价格表
  • 网站设计服务流程深圳网站设计公司费用大概多少
  • 邮件网站怎么做的本地计算机做网站服务器
  • 自己建的网站打不开html5 手机网站 模版
  • 网站建设跟网站结构如何提高网站排名的方法
  • 网站模板 缓存商标网上开店创业计划书
  • 沧州网站建设微艾薇怎样给企业做网站
  • 如何做淘宝客的网站个人网站设计与制作代码
  • 信用门户网站建设观摩惠州专业做网站
  • wordpress打开网站前广告佛山百度推广seo服务
  • 松北建设局网站vps 用ip可以访问网站么
  • 网站图片内容免费开源crm
  • wordpress调用分类栏目wordpress文章优化
  • 建站公司上海企业官网模板下载
  • 网站建设推广话术wordpress 不显示缩略图
  • 企业电子商务网站建设和一般百拓公司做网站怎么样
  • 吉林网站建设司上海什么做网站的公司比较好
  • 吉安市建设规划局网站jsp wordpress
  • 建设银行贵金属网站微信小程序注册后怎么使用
  • 如何做律师网站河南建网站 优帮云
  • 云阳如何做网站网站建设旅游
  • 推荐一个简单的网站制作单位网站服务的建设及维护
  • tp5网站文档归档怎么做网站 信用卡支付接口
  • phpcms 企业网站网站建设中单页代码
  • 坑梓网站建设方案网络编程技术及应用
  • 电子商务网站建设 价格新媒体运营需要具备哪些能力
  • 做生存分析的网站电商网站运营建设的目标
  • 佛山 做网站邮箱官方网站注册
  • 生成flash的网站源码表白二维码制作网站