﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-My Java Blog Park-随笔分类-Base Knowledge</title><link>http://www.blogjava.net/2195113/category/15533.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 05:00:32 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 05:00:32 GMT</pubDate><ttl>60</ttl><item><title>http学习笔记</title><link>http://www.blogjava.net/2195113/archive/2006/09/28/72603.html</link><dc:creator>2195113</dc:creator><author>2195113</author><pubDate>Thu, 28 Sep 2006 07:53:00 GMT</pubDate><guid>http://www.blogjava.net/2195113/archive/2006/09/28/72603.html</guid><wfw:comment>http://www.blogjava.net/2195113/comments/72603.html</wfw:comment><comments>http://www.blogjava.net/2195113/archive/2006/09/28/72603.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/2195113/comments/commentRss/72603.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/2195113/services/trackbacks/72603.html</trackback:ping><description><![CDATA[一.HTTP请求:<br />HTTP请求分为:<br />  1).请求行<br />  2).消息头<br />  3).空行<br />  4).正文<br /><br />1.请求行<br />  [方法 URI HTTP版本信息]<br />  如: GET /index.htm HTTP/1.0<br /><br />2.方法(全部大写):<br />  GET      请求URI标识的资源<br />  HEAD     请求获取响应消息头<br />  PUT      请求存储资源,并用URI作为其标识<br />  POST     请求服务器接收信息<br />  CONNECT  ?<br />  TRACE    <br />  DELETE<br />  OPTIONS<br /><br /><br />二.HTTP响应:<br />  1).状态行 <br />  2).消息头<br />  3).空行<br />  4).正文(资源的内容,比如index.htm文件的文本内容)<br /><br /><br />1.状态行<br />  HTTP版本信息 状态码 响应码描述<br />  例: HTTP/1.1 200 OK<br /><br />2.状态码(第一位表示响应的类别)<br />  1xx:<br />  2xx:<br />  3xx:<br />  4xx:<br />  5xx:<br />HTTP协议状态码具体意义<br />   100  :  Continue<br />   101  :  witchingProtocols<br />   200  :  OK<br />   201  :  Created<br />   202  :  Accepted<br />   203  :  Non-AuthoritativeInformation<br />   204  :  NoContent<br />   205  :  ResetContent<br />   206  :  PartialContent<br />   300  :  MultipleChoices<br />   301  :  MovedPermanently<br />   302  :  Found<br />   303  :  SeeOther<br />   304  :  NotModified<br />   305  :  UseProxy<br />   307  :  TemporaryRedirect<br />   400  :  BadRequest<br />   401  :  Unauthorized<br />   402  :  PaymentRequired<br />   403  :  Forbidden<br />   404  :  NotFound<br />   405  :  MethodNotAllowed<br />   406  :  NotAcceptable<br />   407  :  ProxyAuthenticationRequired<br />   408  :  RequestTime-out<br />   409  :  Conflict<br />   410  :  Gone<br />   411  :  LengthRequired<br />   412  :  PreconditionFailed<br />   413  :  RequestEntityTooLarge<br />   414  :  Request-URITooLarge<br />   415  :  UnsupportedMediaType<br />   416  :  Requestedrangenotsatisfiable<br />   417  :  ExpectationFailed<br />   500  :  InternalServerError<br />   501  :  NotImplemented<br />   502  :  BadGateway<br />   503  :  ServiceUnavailable<br />   504  :  GatewayTime-out<br />   505  :  HTTPVersionnotsupported<br /><br />三.HTTP消息头:<br />1. 普通<br />2. 请求头<br />3. 响应头<br />4. 实体头<br /><br />格式:(名字大小写无关)<br />&lt;名字&gt;:&lt;空格&gt;&lt;值&gt;<br /><br />1.普通头<br />  .Cache-Control  (HTTP1.1,  HTTP1.0:Pragma)<br />      缓存指令:<br />      请求时: no-cache,no-store,max-age,max-stale,min-fresh,only-if-cached<br />      响应时: public,private,no-cache,no-store,no-transform,must-revalidate,proxy-revalidate,max-age,s-maxage.<br />      例: Cache-Control: no-cache<br />  .Date<br />      客户端:在发送正文时要包含Date,<br />      服务器:在响应时包含Date.<br />  .Connection<br />  .Pragma(1.0用)<br /><br />2. 请求头<br />  .Accept<br />  .Accept-Charset<br />  .Accept-Encoding<br />  .Accept-Language<br />  .Authorization<br />  .Host(必须的)<br />  .User-agent<br /><br />3.响应头<br />  .Location<br />  .Server<br />  .WWW-Authenticate,要包含在401中.<br /><br />4.实体头<br />  .Content-Encoding<br />  .Content-Language<br />  .Content-Length<br />  .Content-Type<br />  .Last-Modified<br />  .Expires<br /><br />  <br /><img src ="http://www.blogjava.net/2195113/aggbug/72603.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/2195113/" target="_blank">2195113</a> 2006-09-28 15:53 <a href="http://www.blogjava.net/2195113/archive/2006/09/28/72603.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于ThreadLocal的使用</title><link>http://www.blogjava.net/2195113/archive/2006/09/25/71779.html</link><dc:creator>2195113</dc:creator><author>2195113</author><pubDate>Mon, 25 Sep 2006 08:18:00 GMT</pubDate><guid>http://www.blogjava.net/2195113/archive/2006/09/25/71779.html</guid><wfw:comment>http://www.blogjava.net/2195113/comments/71779.html</wfw:comment><comments>http://www.blogjava.net/2195113/archive/2006/09/25/71779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/2195113/comments/commentRss/71779.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/2195113/services/trackbacks/71779.html</trackback:ping><description><![CDATA[1.线程中要使用的类.各线程只有其一个引用.<br /><br />public class VarClass {<br />    <br />    private static ThreadLocal threadVar=new ThreadLocal(){<br />        protected synchronized Object initialValue(){<br />            System.out.println(Thread.currentThread().getName()+" initial value is 1");<br />            return new Integer(1);<br />        }};<br />    <br />    public int getValue(){<br />        return ((Integer)threadVar.get()).intValue();<br />    }<br />    <br />    public void setValue(){<br />        int a=getValue();<br />        a++;<br />        threadVar.set(new Integer(a));<br />    }<br />}<br /><br /><br />2.线程类<br /><br />public class Worker extends Thread {<br />    private long interval=0;<br />    private boolean isRun=true;<br />    private VarClass v=null;<br />    <br />    public Worker(String name,VarClass v,long interval){<br />        setName(name);<br />        this.v=v;<br />        this.interval=interval;<br />    }<br /><br />    public void run() {<br />        while(isRun){<br />            try{<br />                Thread.sleep(interval);<br />            }catch(InterruptedException e){<br />                e.printStackTrace();<br />            }<br />            v.setValue();<br />        }<br />        System.out.println(getName()+" is over at "+v.getValue());<br />    }<br />    <br />    public void stopThread(){<br />        isRun=false;<br />    }<br />}<br /><br /><br />3.测试类<br />public class TestThreadLocal {<br />   public static void main(String[] args){<br />       VarClass v=new VarClass();<br />       <br />       Worker w1=new Worker("Thread_A",v,100);<br />       Worker w2=new Worker("Thread_B",v,200);<br />       Worker w3=new Worker("Thread_C",v,300);<br />       Worker w4=new Worker("Thread_D",v,400);<br />       Worker w5=new Worker("Thread_E",v,500);<br />       <br />       w1.start();<br />       w2.start();<br />       w3.start();<br />       w4.start();<br />       w5.start();<br />                          <br />       System.out.println("All threads is over after 20 seconds"); <br />       <br />       //延时20秒后,终止5个线程<br />       try{<br />           Thread.sleep(20000);<br />       }catch(InterruptedException e){<br />           e.printStackTrace();<br />       }<br />       <br />       System.out.println("All threads will be overed");<br />       w1.stopThread();<br />       w2.stopThread();<br />       w3.stopThread();<br />       w4.stopThread();<br />       w5.stopThread();<br />  }<br />}<br /><br /><br />4.测试结果:<br />All threads is over after 20 seconds<br />Thread_A initial value is 1<br />Thread_B initial value is 1<br />Thread_C initial value is 1<br />Thread_D initial value is 1<br />Thread_E initial value is 1<br />All threads will be overed<br />Thread_A is over at 200<br />Thread_B is over at 101<br />Thread_D is over at 51<br />Thread_C is over at 68<br />Thread_E is over at 42<br /><br />5.结果说明:虽然各线程使用的是同一个对象的引用,但由于使用了ThreadLocal,实际上每个线程所操作的数据是不一样的.<br /><img src ="http://www.blogjava.net/2195113/aggbug/71779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/2195113/" target="_blank">2195113</a> 2006-09-25 16:18 <a href="http://www.blogjava.net/2195113/archive/2006/09/25/71779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Base64编码原理(随记)</title><link>http://www.blogjava.net/2195113/archive/2006/09/21/71148.html</link><dc:creator>2195113</dc:creator><author>2195113</author><pubDate>Thu, 21 Sep 2006 08:29:00 GMT</pubDate><guid>http://www.blogjava.net/2195113/archive/2006/09/21/71148.html</guid><wfw:comment>http://www.blogjava.net/2195113/comments/71148.html</wfw:comment><comments>http://www.blogjava.net/2195113/archive/2006/09/21/71148.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/2195113/comments/commentRss/71148.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/2195113/services/trackbacks/71148.html</trackback:ping><description><![CDATA[1. Base64使用A--Z,a--z,0--9,+,/ 这64个字符.<br />2. 编码原理:将3个字节转换成4个字节( (3 X 8) = 24 = (4 X 6) )<br />            先读入3个字节,每读一个字节,左移8位,再右移四次,每次6位,这样就有4个字节了.<br />3. 解码原理:将4个字节转换成3个字节.<br />            先读入4个6位(用或运算),每次左移6位,再右移3次,每次8位.这样就还原了.<br /><img src ="http://www.blogjava.net/2195113/aggbug/71148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/2195113/" target="_blank">2195113</a> 2006-09-21 16:29 <a href="http://www.blogjava.net/2195113/archive/2006/09/21/71148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>