简单的用 Java Socket 编写的 HTTP 服务器应用,帮助学习HTTP协议

/**
 * SimpleHttpServer.java
 
*/

import  java.io. * ;
import  java.net. * ;
import  java.util.StringTokenizer;

/**
 * 一个简单的用 Java Socket 编写的 HTTP 服务器应用, 演示了请求和应答的协议通信内容以及
 * 给客户端返回 HTML 文本和二进制数据文件(一个图片), 同时展示了 404, 200 等状态码.
 * 首先运行这个程序,然后打开Web浏览器,键入http://localhost,则这个程序能够显示出浏览器发送了那些信息
 * 并且向浏览器返回一个网页和一副图片, 并测试同浏览器对话.
 * 当浏览器看到 HTML 中带有图片地址时, 则会发出第二次连接来请求图片等资源.
 * 这个例子可以帮您理解 Java 的 HTTP 服务器软件是基于 J2SE 的 Socket 等软件编写的概念, 并熟悉
 * HTTP 协议.
 * 相反的用 Telnet 连接到已有的服务器则可以帮忙理解浏览器的运行过程和服务器端的返回内容.
 *
 * 

 *       当用户在Web浏览器地址栏中输入一个带有http://前缀的URL并按下Enter后,或者在Web页面中某个以http://开头的超链接上单击鼠标,HTTP事务处理的第一个阶段--建立连接阶段就开始了.HTTP的默认端口是80.
 *    随着连接的建立,HTTP就进入了客户向服务器发送请求的阶段.客户向服务器发送的请求是一个有特定格式的ASCII消息,其语法规则为:
 * < Method > < URL > < HTTP Version > 
 * { 
: }*
 * 
 * { Entity Body }
 *    请求消息的顶端是请求行,用于指定方法,URL和HTTP协议的版本,请求行的最后是回车换行.方法有GET,POST,HEAD,PUT,DELETE等.
 * 在请求行之后是若干个报头(Header)行.每个报头行都是由一个报头和一个取值构成的二元对,报头和取值之间以":"分隔;报头行的最后是回车换行.常见的报头有Accept(指定MIME媒体类型),Accept_Charset(响应消息的编码方式),Accept_Encoding(响应消息的字符集),User_Agent(用户的浏览器信息)等.
 *    在请求消息的报头行之后是一个回车换行,表明请求消息的报头部分结束.在这个/n之后是请求消息的消息实体(Entity Body).具体的例子参看httpRequest.txt.
 *     Web服务器在收到客户请求并作出处理之后,要向客户发送应答消息.与请求消息一样,应答消息的语法规则为:
 * < HTTP Version>  []
 * { 
:  } *
 * 
 * { Entity Body }
 *    应答消息的第一行为状态行,其中包括了HTTP版本号,状态码和对状态码进行简短解释的消息;状态行的最后是回车换行.状态码由3位数字组成,有5类: 
 * 参看:HTTP应答码及其意义 
 * 
 * 1XX 保留 
 * 2XX 表示成功 
 * 3XX 表示URL已经被移走 
 * 4XX 表示客户错误 
 * 5XX 表示服务器错误 
 * 例如:415,表示不支持改媒体类型;503,表示服务器不能访问.最常见的是200,表示成功.常见的报头有:Last_Modified(最后修改时间),Content_Type(消息内容的MIME类型),Content_Length(内容长度)等.
 *    在报头行之后也是一个回车换行,用以表示应答消息的报头部分的结束,以及应答消息实体的开始.
 *    下面是一个应答消息的例子:
 * HTTP/1.0 200 OK
 * Date: Moday,07-Apr-97 21:13:02 GMT
 * Server:NCSA/1.1
 * MIME_Version:1.0
 * Content_Type:text/html
 * Last_Modified:Thu Dec 5 09:28:01 1996
 * Coentent_Length:3107
 * 
 * <img src="http://img.e-com-net.com/image/info8/cf2297c5d37a4a768ec1be02efd856dd.gif" alt="" width="0" height="0"></HTML><br> * <br> * 在用Java语言实现HTTP服务器时,首先启动一个java.net.ServerSocket在提供服务的端口上监听连接.向客户返回文本时,可以用PrintWriter,但是如果返回二进制数据,则必须使用OutputStream.write(byte[])方法,返回的应答消息字符串可以使用String.getBytes()方法转换为字节数组返回,或者使用PrintStream的print()方法写入文本,用write(byte[])方法写入二进制数据.<br> * <br> * </pre><br> * </span> <span style="color:#808080;">@author</span> <span style="color:#008000;"> 刘长炯<br> * </span> <span style="color:#808080;">@version</span> <span style="color:#008000;"> 1.0 2007-07-24 Sunday<br> </span> <span style="color:#008000;">*/</span> <span style="color:#000000;"><br></span> <span style="color:#0000ff;">public</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">class</span> <span style="color:#000000;"> SimpleHttpServer </span> <span style="color:#0000ff;">implements</span> <span style="color:#000000;"> Runnable {<br>    </span> <span style="color:#008000;">/**</span> <span style="color:#008000;"><br>     * <br>     </span> <span style="color:#008000;">*/</span> <span style="color:#000000;"><br>    ServerSocket serverSocket;</span> <span style="color:#008000;">//</span> <span style="color:#008000;">服务器Socket</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">    <br>    </span> <span style="color:#008000;">/**</span> <span style="color:#008000;"><br>     * 服务器监听端口, 默认为 80.<br>     </span> <span style="color:#008000;">*/</span> <span style="color:#000000;"><br>    </span> <span style="color:#0000ff;">public</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">static</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">int</span> <span style="color:#000000;"> PORT</span> <span style="color:#000000;">=</span> <span style="color:#000000;">80</span> <span style="color:#000000;">;</span> <span style="color:#008000;">//</span> <span style="color:#008000;">标准HTTP端口</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">    <br>    </span> <span style="color:#008000;">/**</span> <span style="color:#008000;"><br>     * 开始服务器 Socket 线程.<br>     </span> <span style="color:#008000;">*/</span> <span style="color:#000000;"><br>    </span> <span style="color:#0000ff;">public</span> <span style="color:#000000;"> SimpleHttpServer() {<br>        </span> <span style="color:#0000ff;">try</span> <span style="color:#000000;"> {<br>            serverSocket</span> <span style="color:#000000;">=</span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> ServerSocket(PORT);<br>        } </span> <span style="color:#0000ff;">catch</span> <span style="color:#000000;">(Exception e) {<br>            System.out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">无法启动HTTP服务器:</span> <span style="color:#000000;">"</span> <span style="color:#000000;">+</span> <span style="color:#000000;">e.getLocalizedMessage());<br>        }<br>        </span> <span style="color:#0000ff;">if</span> <span style="color:#000000;">(serverSocket</span> <span style="color:#000000;">==</span> <span style="color:#0000ff;">null</span> <span style="color:#000000;">)  System.exit(</span> <span style="color:#000000;">1</span> <span style="color:#000000;">);</span> <span style="color:#008000;">//</span> <span style="color:#008000;">无法开始服务器</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">        </span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> Thread(</span> <span style="color:#0000ff;">this</span> <span style="color:#000000;">).start();<br>        System.out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">HTTP服务器正在运行,端口:</span> <span style="color:#000000;">"</span> <span style="color:#000000;">+</span> <span style="color:#000000;">PORT);<br>    }<br>    <br>    </span> <span style="color:#008000;">/**</span> <span style="color:#008000;"><br>     * 运行服务器主线程, 监听客户端请求并返回响应.<br>     </span> <span style="color:#008000;">*/</span> <span style="color:#000000;"><br>    </span> <span style="color:#0000ff;">public</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">void</span> <span style="color:#000000;"> run() {<br>        </span> <span style="color:#0000ff;">while</span> <span style="color:#000000;">(</span> <span style="color:#0000ff;">true</span> <span style="color:#000000;">) {<br>            </span> <span style="color:#0000ff;">try</span> <span style="color:#000000;"> {<br>                Socket client</span> <span style="color:#000000;">=</span> <span style="color:#0000ff;">null</span> <span style="color:#000000;">;</span> <span style="color:#008000;">//</span> <span style="color:#008000;">客户Socket</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                client</span> <span style="color:#000000;">=</span> <span style="color:#000000;">serverSocket.accept();</span> <span style="color:#008000;">//</span> <span style="color:#008000;">客户机(这里是 IE 等浏览器)已经连接到当前服务器</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                </span> <span style="color:#0000ff;">if</span> <span style="color:#000000;">(client</span> <span style="color:#000000;">!=</span> <span style="color:#0000ff;">null</span> <span style="color:#000000;">) {<br>                    System.out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">连接到服务器的用户:</span> <span style="color:#000000;">"</span> <span style="color:#000000;">+</span> <span style="color:#000000;">client);<br>                    </span> <span style="color:#0000ff;">try</span> <span style="color:#000000;"> {<br>                        </span> <span style="color:#008000;">//</span> <span style="color:#008000;"> 第一阶段: 打开输入流</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                        BufferedReader in</span> <span style="color:#000000;">=</span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> BufferedReader(</span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> InputStreamReader(<br>                                client.getInputStream()));<br>                        <br>                        System.out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">客户端发送的请求信息:/n***************</span> <span style="color:#000000;">"</span> <span style="color:#000000;">);<br>                        </span> <span style="color:#008000;">//</span> <span style="color:#008000;"> 读取第一行, 请求地址</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                        String line</span> <span style="color:#000000;">=</span> <span style="color:#000000;">in.readLine();<br>                        System.out.println(line);<br>                        String resource</span> <span style="color:#000000;">=</span> <span style="color:#000000;">line.substring(line.indexOf(</span> <span style="color:#000000;">'</span> <span style="color:#000000;">/</span> <span style="color:#000000;">'</span> <span style="color:#000000;">),line.lastIndexOf(</span> <span style="color:#000000;">'</span> <span style="color:#000000;">/</span> <span style="color:#000000;">'</span> <span style="color:#000000;">)</span> <span style="color:#000000;">-</span> <span style="color:#000000;">5</span> <span style="color:#000000;">);<br>                        </span> <span style="color:#008000;">//</span> <span style="color:#008000;">获得请求的资源的地址</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                        resource</span> <span style="color:#000000;">=</span> <span style="color:#000000;">URLDecoder.decode(resource, </span> <span style="color:#000000;">"</span> <span style="color:#000000;">UTF-8</span> <span style="color:#000000;">"</span> <span style="color:#000000;">);</span> <span style="color:#008000;">//</span> <span style="color:#008000;">反编码 URL 地址</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                        String method </span> <span style="color:#000000;">=</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> StringTokenizer(line).nextElement().toString();</span> <span style="color:#008000;">//</span> <span style="color:#008000;"> 获取请求方法, GET 或者 POST<br><br>                        </span> <span style="color:#008000;">//</span> <span style="color:#008000;"> 读取所有浏览器发送过来的请求参数头部信息</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                        </span> <span style="color:#0000ff;">while</span> <span style="color:#000000;">( (line </span> <span style="color:#000000;">=</span> <span style="color:#000000;"> in.readLine()) </span> <span style="color:#000000;">!=</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">null</span> <span style="color:#000000;">) {<br>                            System.out.println(line);<br>                            <br>                            </span> <span style="color:#0000ff;">if</span> <span style="color:#000000;">(line.equals(</span> <span style="color:#000000;">""</span> <span style="color:#000000;">)) </span> <span style="color:#0000ff;">break</span> <span style="color:#000000;">;<br>                        }<br>                        <br>                        </span> <span style="color:#008000;">//</span> <span style="color:#008000;"> 显示 POST 表单提交的内容, 这个内容位于请求的主体部分</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                        </span> <span style="color:#0000ff;">if</span> <span style="color:#000000;">(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">POST</span> <span style="color:#000000;">"</span> <span style="color:#000000;">.equalsIgnoreCase(method)) {<br>                            System.out.println(in.readLine());<br>                        }<br>                        <br>                        System.out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">请求信息结束/n***************</span> <span style="color:#000000;">"</span> <span style="color:#000000;">);<br>                        System.out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">用户请求的资源是:</span> <span style="color:#000000;">"</span> <span style="color:#000000;">+</span> <span style="color:#000000;">resource);<br>                        System.out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">请求的类型是: </span> <span style="color:#000000;">"</span> <span style="color:#000000;"> </span> <span style="color:#000000;">+</span> <span style="color:#000000;"> method);<br><br>                        </span> <span style="color:#008000;">//</span> <span style="color:#008000;"> GIF 图片就读取一个真实的图片数据并返回给客户端</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                        </span> <span style="color:#0000ff;">if</span> <span style="color:#000000;">(resource.endsWith(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">.gif</span> <span style="color:#000000;">"</span> <span style="color:#000000;">)) {<br>                            fileService(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">images/test.gif</span> <span style="color:#000000;">"</span> <span style="color:#000000;">, client);<br>                            closeSocket(client);<br>                            </span> <span style="color:#0000ff;">continue</span> <span style="color:#000000;">;<br>                        }<br>                        <br>                        </span> <span style="color:#008000;">//</span> <span style="color:#008000;"> 请求 JPG 格式就报错 404</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                        </span> <span style="color:#0000ff;">if</span> <span style="color:#000000;">(resource.endsWith(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">.jpg</span> <span style="color:#000000;">"</span> <span style="color:#000000;">)) {<br>                                                    PrintWriter out</span> <span style="color:#000000;">=</span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> PrintWriter(client.getOutputStream(),</span> <span style="color:#0000ff;">true</span> <span style="color:#000000;">);<br>                        out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">HTTP/1.0 404 Not found</span> <span style="color:#000000;">"</span> <span style="color:#000000;">);</span> <span style="color:#008000;">//</span> <span style="color:#008000;">返回应答消息,并结束应答</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                        out.println();</span> <span style="color:#008000;">//</span> <span style="color:#008000;"> 根据 HTTP 协议, 空行将结束头信息</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                        out.close();<br>                        closeSocket(client);<br>                        </span> <span style="color:#0000ff;">continue</span> <span style="color:#000000;">;<br>                        } </span> <span style="color:#0000ff;">else</span> <span style="color:#000000;"> {<br>                            </span> <span style="color:#008000;">//</span> <span style="color:#008000;"> 用 writer 对客户端 socket 输出一段 HTML 代码</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                            PrintWriter out</span> <span style="color:#000000;">=</span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> PrintWriter(client.getOutputStream(),</span> <span style="color:#0000ff;">true</span> <span style="color:#000000;">);<br>                            out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">HTTP/1.0 200 OK</span> <span style="color:#000000;">"</span> <span style="color:#000000;">);</span> <span style="color:#008000;">//</span> <span style="color:#008000;">返回应答消息,并结束应答</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                            out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">Content-Type:text/html;charset=GBK</span> <span style="color:#000000;">"</span> <span style="color:#000000;">);<br>                            out.println();</span> <span style="color:#008000;">//</span> <span style="color:#008000;"> 根据 HTTP 协议, 空行将结束头信息</span> <span style="color:#008000;"><br></span> <span style="color:#000000;"><br>                            out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;"><h1> Hello Http Server</h1></span> <span style="color:#000000;">"</span> <span style="color:#000000;">);<br>                            out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">你好, 这是一个 Java HTTP 服务器 demo 应用.<br></span> <span style="color:#000000;">"</span> <span style="color:#000000;">);<br>                            out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">您请求的路径是: </span> <span style="color:#000000;">"</span> <span style="color:#000000;"> </span> <span style="color:#000000;">+</span> <span style="color:#000000;"> resource </span> <span style="color:#000000;">+</span> <span style="color:#000000;"> </span> <span style="color:#000000;">"</span> <span style="color:#000000;"><br></span> <span style="color:#000000;">"</span> <span style="color:#000000;">);<br>                            out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">这是一个支持虚拟路径的图片:<img src='abc.gif'><br></span> <span style="color:#000000;">"</span> <span style="color:#000000;"> </span> <span style="color:#000000;">+</span> <span style="color:#000000;"><br>                                    </span> <span style="color:#000000;">"</span> <span style="color:#000000;"><a href='abc.gif'>点击打开abc.gif, 是个服务器虚拟路径的图片文件.</a></span> <span style="color:#000000;">"</span> <span style="color:#000000;">);<br>                            out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;"><br>这是个会反馈 404 错误的的图片:<img src='test.jpg'><br><a href='test.jpg'>点击打开test.jpg</a><br></span> <span style="color:#000000;">"</span> <span style="color:#000000;">);<br>                            out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;"><form method=post action='/'>POST 表单 <input name=username value='用户'> <input name=submit type=submit value=submit></form></span> <span style="color:#000000;">"</span> <span style="color:#000000;">);<br>                            out.close();<br><br>                            closeSocket(client);<br>                        }<br>                    } </span> <span style="color:#0000ff;">catch</span> <span style="color:#000000;">(Exception e) {<br>                        System.out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">HTTP服务器错误:</span> <span style="color:#000000;">"</span> <span style="color:#000000;">+</span> <span style="color:#000000;">e.getLocalizedMessage());<br>                    }<br>                }<br>                </span> <span style="color:#008000;">//</span> <span style="color:#008000;">System.out.println(client+"连接到HTTP服务器");</span> <span style="color:#008000;">//</span> <span style="color:#008000;">如果加入这一句,服务器响应速度会很慢</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">            } </span> <span style="color:#0000ff;">catch</span> <span style="color:#000000;">(Exception e) {<br>                System.out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">HTTP服务器错误:</span> <span style="color:#000000;">"</span> <span style="color:#000000;">+</span> <span style="color:#000000;">e.getLocalizedMessage());<br>            }<br>        }<br>    }<br>    <br>    </span> <span style="color:#008000;">/**</span> <span style="color:#008000;"><br>     * 关闭客户端 socket 并打印一条调试信息.<br>     * </span> <span style="color:#808080;">@param</span> <span style="color:#008000;"> socket 客户端 socket.<br>     </span> <span style="color:#008000;">*/</span> <span style="color:#000000;"><br>    </span> <span style="color:#0000ff;">void</span> <span style="color:#000000;"> closeSocket(Socket socket) {<br>        </span> <span style="color:#0000ff;">try</span> <span style="color:#000000;"> {<br>            socket.close();<br>        } </span> <span style="color:#0000ff;">catch</span> <span style="color:#000000;"> (IOException ex) {<br>            ex.printStackTrace();<br>        }<br>                            System.out.println(socket </span> <span style="color:#000000;">+</span> <span style="color:#000000;"> </span> <span style="color:#000000;">"</span> <span style="color:#000000;">离开了HTTP服务器</span> <span style="color:#000000;">"</span> <span style="color:#000000;">);        <br>    }<br>    <br>    </span> <span style="color:#008000;">/**</span> <span style="color:#008000;"><br>     * 读取一个文件的内容并返回给浏览器端.<br>     * </span> <span style="color:#808080;">@param</span> <span style="color:#008000;"> fileName 文件名<br>     * </span> <span style="color:#808080;">@param</span> <span style="color:#008000;"> socket 客户端 socket.<br>     </span> <span style="color:#008000;">*/</span> <span style="color:#000000;"><br>        </span> <span style="color:#0000ff;">void</span> <span style="color:#000000;"> fileService(String fileName, Socket socket)<br>    {<br>            <br>        </span> <span style="color:#0000ff;">try</span> <span style="color:#000000;"><br>        {<br>            PrintStream out </span> <span style="color:#000000;">=</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> PrintStream(socket.getOutputStream(), </span> <span style="color:#0000ff;">true</span> <span style="color:#000000;">);<br>            File fileToSend </span> <span style="color:#000000;">=</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> File(fileName);<br>            </span> <span style="color:#0000ff;">if</span> <span style="color:#000000;">(fileToSend.exists() </span> <span style="color:#000000;">&&</span> <span style="color:#000000;"> </span> <span style="color:#000000;">!</span> <span style="color:#000000;">fileToSend.isDirectory())<br>            {<br>                out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">HTTP/1.0 200 OK</span> <span style="color:#000000;">"</span> <span style="color:#000000;">);</span> <span style="color:#008000;">//</span> <span style="color:#008000;">返回应答消息,并结束应答</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">Content-Type:application/binary</span> <span style="color:#000000;">"</span> <span style="color:#000000;">);<br>                out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">Content-Length:</span> <span style="color:#000000;">"</span> <span style="color:#000000;"> </span> <span style="color:#000000;">+</span> <span style="color:#000000;"> fileToSend.length());</span> <span style="color:#008000;">//</span> <span style="color:#008000;"> 返回内容字节数</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                out.println();</span> <span style="color:#008000;">//</span> <span style="color:#008000;"> 根据 HTTP 协议, 空行将结束头信息</span> <span style="color:#008000;"><br></span> <span style="color:#000000;">                <br>                FileInputStream fis </span> <span style="color:#000000;">=</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> FileInputStream(fileToSend);<br>                </span> <span style="color:#0000ff;">byte</span> <span style="color:#000000;"> data[] </span> <span style="color:#000000;">=</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">byte</span> <span style="color:#000000;">[fis.available()];<br>                fis.read(data);<br>                out.write(data);<br>                out.close();<br>                fis.close();<br>            }<br>        }<br>        </span> <span style="color:#0000ff;">catch</span> <span style="color:#000000;">(Exception e)<br>        {<br>            System.out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">传送文件时出错:</span> <span style="color:#000000;">"</span> <span style="color:#000000;"> </span> <span style="color:#000000;">+</span> <span style="color:#000000;"> e.getLocalizedMessage());<br>        }<br>    }<br>    <br>    </span> <span style="color:#008000;">/**</span> <span style="color:#008000;"><br>     * 打印用途说明.<br>     </span> <span style="color:#008000;">*/</span> <span style="color:#000000;"><br>    </span> <span style="color:#0000ff;">private</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">static</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">void</span> <span style="color:#000000;"> usage() {<br>        System.out.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">Usage: java HTTPServer <port>/nDefault port is 80.</span> <span style="color:#000000;">"</span> <span style="color:#000000;">);<br>    }<br>    <br>    <br>    </span> <span style="color:#008000;">/**</span> <span style="color:#008000;"><br>     * 启动简易 HTTP 服务器<br>     * </span> <span style="color:#808080;">@param</span> <span style="color:#008000;"> args <br>     </span> <span style="color:#008000;">*/</span> <span style="color:#000000;"><br>    </span> <span style="color:#0000ff;">public</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">static</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">void</span> <span style="color:#000000;"> main(String[] args) {<br>        </span> <span style="color:#0000ff;">try</span> <span style="color:#000000;"> {<br>            </span> <span style="color:#0000ff;">if</span> <span style="color:#000000;">(args.length </span> <span style="color:#000000;">!=</span> <span style="color:#000000;"> </span> <span style="color:#000000;">1</span> <span style="color:#000000;">) {<br>                usage();<br>            } </span> <span style="color:#0000ff;">else</span> <span style="color:#000000;"> </span> <span style="color:#0000ff;">if</span> <span style="color:#000000;">(args.length </span> <span style="color:#000000;">==</span> <span style="color:#000000;"> </span> <span style="color:#000000;">1</span> <span style="color:#000000;">) {<br>                PORT </span> <span style="color:#000000;">=</span> <span style="color:#000000;"> Integer.parseInt(args[</span> <span style="color:#000000;">0</span> <span style="color:#000000;">]);<br>            }<br>        } </span> <span style="color:#0000ff;">catch</span> <span style="color:#000000;"> (Exception ex) {<br>            System.err.println(</span> <span style="color:#000000;">"</span> <span style="color:#000000;">Invalid port arguments. It must be a integer that greater than 0</span> <span style="color:#000000;">"</span> <span style="color:#000000;">);<br>        }<br>        <br>        </span> <span style="color:#0000ff;">new</span> <span style="color:#000000;"> SimpleHttpServer();<br>    }<br>    <br>}</span>  </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1291227611636244480"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(java)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1901926316379271168.htm" title="前端框架革命:React与Vue对比与解析" target="_blank">前端框架革命:React与Vue对比与解析</a> <span class="text-muted">WHCIS</span> <a class="tag" taget="_blank" href="/search/Web%E5%BC%80%E5%8F%91%E6%8A%80%E6%9C%AF/1.htm">Web开发技术</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a> <div>一、框架设计哲学的本质差异1.1React:以JavaScript为核心的函数式哲学React的核心思想可以概括为**“UI即函数”**,其设计遵循以下原则:React核心声明式编程组件即函数单向数据流JSX描述UI函数组件+Hook状态提升模式声明式编程:开发者只需描述界面应该呈现的最终状态,无需关心具体DOM操作细节不可变数据流:通过setState触发组件树更新,保持数据流向的可预测性虚拟D</div> </li> <li><a href="/article/1901924167956099072.htm" title="【玩转正则表达式】Python、Go、Java正则表达式解释器的差异解析(附示例)" target="_blank">【玩转正则表达式】Python、Go、Java正则表达式解释器的差异解析(附示例)</a> <span class="text-muted">ThisIsClark</span> <a class="tag" taget="_blank" href="/search/%E7%8E%A9%E8%BD%AC%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">玩转正则表达式</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a> <div>正则表达式作为文本处理的利器,在不同编程语言中的实现却暗藏玄机。Python、Go和Java作为主流开发语言,其正则引擎在语法支持、功能完整性和性能表现上存在显著差异。本文通过具体示例,揭示这些差异及应对策略。一、原始字符串与转义差异Python使用r""定义原始字符串,避免转义:importrere.findall(r'\d+','123a456')#输出['123','456']Go和Java</div> </li> <li><a href="/article/1901917609503289344.htm" title="Java面试常见的面试题(持续更新版)" target="_blank">Java面试常见的面试题(持续更新版)</a> <span class="text-muted">Java进阶八股文</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a> <div>一丶基础知识1.面向对象(工作时间不是很长的出现频率)什么是面向对象?什么是面向过程?面向过程:例子:我要洗衣服把衣服放进洗衣机→加入洗衣液→关上洗衣机门→按下启动按钮面向对象:例子:我要洗衣服对象有我洗衣机我要做的事:把衣服放进去加入洗衣液关门按启动按钮洗衣机要做的事:清洗以上可以看出,面向过程比较高效比较直接,面向对象更易于扩展丶维护和复用封装明确标识出允许外部使用的所有成员函数和数据项,内部</div> </li> <li><a href="/article/1901917105561858048.htm" title="Java Web开发核心内容全解析(上)" target="_blank">Java Web开发核心内容全解析(上)</a> <span class="text-muted">风铃儿~</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a> <div>一、JavaWeb概述JavaWeb是指使用Java技术来解决相关web互联网领域的技术总和。在当今数字化时代,JavaWeb在构建企业级应用、电子商务平台、社交网络等方面发挥着至关重要的作用。(一)JavaWeb的体系结构JavaWeb应用的体系结构主要分为客户端层、表示层、业务逻辑层和数据访问层。1.客户端层-这是用户与Web应用交互的最前端。主要包括用户浏览器,它可以接收并显示从服务器端发送</div> </li> <li><a href="/article/1901916599753961472.htm" title="前端面试:ajax 和 xhr 是什么关系?" target="_blank">前端面试:ajax 和 xhr 是什么关系?</a> <span class="text-muted">returnShitBoy</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a> <div>在前端开发中,AJAX(AsynchronousJavaScriptandXML)和XHR(XMLHttpRequest)是两个密切相关但有些不同的概念。以下是对这两者的详细解释及其关系:1.AJAX定义:AJAX是一个用于创建异步web应用程序的技术。它允许网页在不完全重新加载整页的情况下,与服务器交换数据并更新部分网页内容。主要特征:异步操作:AJAX使得页面可以在后台与服务器进行数据交换,用</div> </li> <li><a href="/article/1901903365474938880.htm" title="自定义Spark启动的metastore_db和derby.log生成路径" target="_blank">自定义Spark启动的metastore_db和derby.log生成路径</a> <span class="text-muted">节昊文</span> <a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a> <div>1.进入安装spark目录的conf目录下2.复制spark-defaults.conf.template文件为spark-defaults.conf3.在spark-defaults.conf文件的末尾添加一行:spark.driver.extraJavaOptions-Dderby.system.home=/log即生成的文件存放的目录</div> </li> <li><a href="/article/1901900090688204800.htm" title="java redis pipeline,redis pipeline简介" target="_blank">java redis pipeline,redis pipeline简介</a> <span class="text-muted">神奇激光世界</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/pipeline/1.htm">pipeline</a> <div>java中redis的pipelinepipeline方式执行redis操作:Listresults=this.getRedisTemplate().executePipelined(newRedisCallback(){@OverridepublicObjectdoInRedis(RedisConnectionconnection)throwsDataAccessException{RedisS</div> </li> <li><a href="/article/1901899964313825280.htm" title="构建AngularJS动态Web应用的示例教程" target="_blank">构建AngularJS动态Web应用的示例教程</a> <span class="text-muted">你这人真狗</span> <div>本文还有配套的精品资源,点击获取简介:AngularJS是一个由Google支持的前端JavaScript框架,用于创建动态Web应用程序。本文将通过一个名为“angular-sample-app”的示例应用程序,详细介绍AngularJS的核心特性,包括双向数据绑定、控制器、指令系统、服务与依赖注入、表单处理、路由与导航、模板和局部存储以及其他高级特性。通过这个示例应用的深入剖析,开发者可以学习</div> </li> <li><a href="/article/1901898703568957440.htm" title="java+redis+pipleline_详解Java使用Pipeline对Redis批量读写(hmset&hgetall)" target="_blank">java+redis+pipleline_详解Java使用Pipeline对Redis批量读写(hmset&hgetall)</a> <span class="text-muted">666齐乐家园</span> <div>一般情况下,RedisClient端发出一个请求后,通常会阻塞并等待Redis服务端处理,Redis服务端处理完后请求命令后会将结果通过响应报文返回给Client。感觉这有点类似于HBase的Scan,通常是Client端获取每一条记录都是一次RPC调用服务端。在Redis中,有没有类似HBaseScannerCaching的东西呢,一次请求,返回多条记录呢?有,这就是Pipline。官方介绍ht</div> </li> <li><a href="/article/1901893408524398592.htm" title="Java学习笔记(二十二)" target="_blank">Java学习笔记(二十二)</a> <span class="text-muted">路上阡陌</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>1Redis是单线程的那如何处理多个客户端发送的命令Redis虽然是单线程的,但它能够高效地处理多个客户端发送的命令,这主要得益于其内部使用的I/O多路复用技术和事件驱动模型。以下是Redis处理多个客户端命令的详细解释:1.1I/O多路复用技术Redis通过使用I/O多路复用技术,能够同时监听多个客户端连接上的I/O事件。当任何一个客户端连接上有读、写或异常等I/O事件发生时,I/O多路复用机制</div> </li> <li><a href="/article/1901889499521150976.htm" title="Java~二叉树进阶练习题:根据先序遍历和中序遍历构建二叉树 与 根据后序遍历和中序遍历构建二叉树" target="_blank">Java~二叉树进阶练习题:根据先序遍历和中序遍历构建二叉树 与 根据后序遍历和中序遍历构建二叉树</a> <span class="text-muted">Java墨言</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!先序遍历中第一个一定是根结点。中序遍历中根结点左子树的所有结点一定在根结点的左边,右子树的所有结点一定在根结点的右边。所有中序遍历的序列组成可以表示为:左子树结点+根结点+右子树结点。后序遍历中最后一个结点一定是根结点。****根据先序遍历和中序遍历构建二叉树解题细想:**设置变量inedx方便从p</div> </li> <li><a href="/article/1901888740121440256.htm" title="西部开源带给我的Java第一课" target="_blank">西部开源带给我的Java第一课</a> <span class="text-muted">FoxStopM</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80/1.htm">语言</a><a class="tag" taget="_blank" href="/search/%E6%A0%87%E5%87%86/1.htm">标准</a><a class="tag" taget="_blank" href="/search/%E8%A5%BF%E9%83%A8%E5%BC%80%E6%BA%90/1.htm">西部开源</a><a class="tag" taget="_blank" href="/search/%E7%94%B0%E6%94%80/1.htm">田攀</a> <div>Java语言特性1.JavaSE(JavaStandardEdition):Java标准版基础,可以开发桌面应用、图形化应用等2.JavaEE(JavaEnterpriseEdition):Java企业版开发企业级应用常用DOS命令在目标界面按shift+右键“在此处打开命令窗口”1、切换目录cd/d目标目录2、编译java源代码Javac–d.java源文件名称3、运行.class文件(字节码文</div> </li> <li><a href="/article/1901888236280672256.htm" title="CSS语言的数论算法" target="_blank">CSS语言的数论算法</a> <span class="text-muted">宇瞳月</span> <a class="tag" taget="_blank" href="/search/%E5%8C%85%E7%BD%97%E4%B8%87%E8%B1%A1/1.htm">包罗万象</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>CSS语言的数论算法引言数论作为数学的一个重要分支,主要研究整数及其性质。数论的基本问题包括素数的性质、最大公约数、最小公倍数、同余等,同时数论在密码学、计算机科学等领域具有广泛的应用。而CSS(层叠样式表)本身是一种样式表语言,用于控制HTML文档的样式和布局,虽然CSS本身并不能直接进行复杂的数论运算,但它可以和JavaScript等编程语言结合使用,实现数论算法的可视化与交互。本文将探讨数论</div> </li> <li><a href="/article/1901884959199653888.htm" title="华为OD机试 - 书籍叠放 - 逻辑分析(Java 2023 B卷 200分)" target="_blank">华为OD机试 - 书籍叠放 - 逻辑分析(Java 2023 B卷 200分)</a> <span class="text-muted">蓝白咖啡</span> <a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAOD/1.htm">华为OD</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E8%AF%95/1.htm">机试</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a> <div>题目描述书籍的长、宽都是整数对应((l,w))。如果书A的长宽度都比B的长宽大时,则允许将B排列放在A上面。现在有一组规格的书籍,书籍叠放时要求书籍不能旋转,请计算最多能有多少个规格书籍能叠放在一起。输入描述输入:books=[[20,16],[15,11],[10,10],[9,10]]说明:总共4本书籍,第一本长度为20宽度为16;第二本书长度为15宽度为11,依次类推,最后一本书长度为9宽度</div> </li> <li><a href="/article/1901884956850843648.htm" title="JVM、MySQL常见面试题(尽力局)" target="_blank">JVM、MySQL常见面试题(尽力局)</a> <span class="text-muted">多敲代码防脱发</span> <a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>JVM篇一.谈一谈JDK、JRE、JVM分别是什么,有什么联系?1.JDK是Java工具包,里面包含了JRE、Javac编译器等。2.JRE是java运行环境,里面包含了JVM、JavaSE标准库类等。3.JVM是Java虚拟机,运行编译后的.class的文件,调用系统API运行。JDK=JRE+Javac编译器JRE=JVM+JavaSE标准库二.JVM运行时数据区由哪几部分构成,分别有什么作用</div> </li> <li><a href="/article/1901879406662578176.htm" title="GTP生成UI代码" target="_blank">GTP生成UI代码</a> <span class="text-muted">酒江</span> <a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a> <div>使用GPT生成UI代码,通常是指利用GPT模型生成前端界面的代码,例如HTML、CSS、JavaScript等。GPT可以帮助开发人员快速创建界面元素的代码,减少手动编写的工作量。下面是一些关键步骤,详细说明如何用GPT生成UI代码:1.明确UI需求和设计界面元素:首先明确需要哪些UI元素。例如:按钮、输入框、表单、表格等。布局:确定页面的布局结构,例如:一栏布局、两栏布局、响应式设计等。交互功能</div> </li> <li><a href="/article/1901877763212636160.htm" title="let const var 底层区域别,es6还有AO 对象和GO对象吗" target="_blank">let const var 底层区域别,es6还有AO 对象和GO对象吗</a> <span class="text-muted">新茶十九</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0javascript/1.htm">学习javascript</a><a class="tag" taget="_blank" href="/search/es6/1.htm">es6</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a> <div>在JavaScript中,var、let、const的底层行为差异与作用域规则和变量存储机制密切相关。ES6引入了块级作用域和词法环境(LexicalEnvironment),改变了原有的AO和GO的实现方式,但核心逻辑仍然保留。以下是详细解释:一、var、let、const`的底层区别特性varletconst作用域函数作用域或全局作用域块级作用域块级作用域变量提升提升并初始化为undefine</div> </li> <li><a href="/article/1901873099826065408.htm" title="ES6-01-01day" target="_blank">ES6-01-01day</a> <span class="text-muted">CodeDoge</span> <a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a> <div>ECMAScript和javascript的关系是,前者是后者的规格,后者是前者的一种实现。ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。不存在变量提升var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。为了纠正这种现象,</div> </li> <li><a href="/article/1901868183866896384.htm" title="Tomcat 新手入门指南:从零开始掌握安装与配置" target="_blank">Tomcat 新手入门指南:从零开始掌握安装与配置</a> <span class="text-muted">超级小狗</span> <a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>Tomcat新手入门指南:从零开始掌握安装与配置一、Tomcat是什么?ApacheTomcat是一个开源的轻量级Web应用服务器,专为运行JavaServlet和JSP设计。它是初学JavaWeb开发的必备工具,也是企业级应用的常见选择。核心功能:处理HTTP请求、管理Servlet生命周期、支持动态网页渲染。适用场景:开发测试环境、中小型Web应用部署、微服务架构中的容器化组件。二、快速安装T</div> </li> <li><a href="/article/1901868055869321216.htm" title="Apache Tomcat 新手入门指南:从安装到部署的全流程解析" target="_blank">Apache Tomcat 新手入门指南:从安装到部署的全流程解析</a> <span class="text-muted">小志开发</span> <a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1/1.htm">服务</a><a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>ApacheTomcat作为一款轻量级的JavaServlet容器,被广泛应用于开发和运行基于Java的Web应用程序(如Servlet和JSP)。对于刚接触Tomcat的开发者来说,快速掌握其基本操作至关重要。本文将从零开始,详细介绍Tomcat的安装、配置、部署及常见问题的解决方法,助你轻松入门。第一部分:环境准备与安装1.确认JDK环境Tomcat依赖Java运行环境,因此需提前安装JDK8</div> </li> <li><a href="/article/1901867927217434624.htm" title="百度Java面试题前200页都在这里了" target="_blank">百度Java面试题前200页都在这里了</a> <span class="text-muted">Java烟雨</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>基本概念操作系统中heap和stack的区别什么是基于注解的切面实现什么是对象/关系映射集成模块什么是Java的反射机制什么是ACIDBS与CS的联系与区别Cookie和Session的区别fail-fast与fail-safe机制有什么区别get和post请求的区别Interface与abstract类的区别IOC的优点是什么IO和NIO的区别,NIO优点Java8/Java7为我们提供了什么新</div> </li> <li><a href="/article/1901866540869939200.htm" title="Java每日一讲 小演讲_5 分钟讲明白 JVM、Java 、Java对象模型" target="_blank">Java每日一讲 小演讲_5 分钟讲明白 JVM、Java 、Java对象模型</a> <span class="text-muted">weixin_39646658</span> <a class="tag" taget="_blank" href="/search/Java%E6%AF%8F%E6%97%A5%E4%B8%80%E8%AE%B2/1.htm">Java每日一讲</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E6%BC%94%E8%AE%B2/1.htm">小演讲</a> <div>Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模型和Java对象模型,这就是三个截然不同的概念,但是很多人容易弄混。可以这样说,很多高级开发甚至都搞不不清楚JVM内存结构、Java内存模型和Java对象模型这三者的概念及其间的区别。甚至我见过有些面试官自己也搞的不</div> </li> <li><a href="/article/1901864396024508416.htm" title="每日学习Java之一万个为什么" target="_blank">每日学习Java之一万个为什么</a> <span class="text-muted">~Yogi</span> <a class="tag" taget="_blank" href="/search/%E4%BF%AE%E7%82%BC/1.htm">修炼</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a> <div>Mybatis分步查询如果有下一步查询计划,resultType需要改为resultMap,(只要这张表的查询大于1就用Map)并在Map中配置下一步计划在本计划中的实体类,查询列名,下一步计划方法路径。当然,在分步查询sql设计前后我们需要设计分步查询实体类。select*fromt_scorewhereuid=#{id};分步查询和JOIN哪个更好?参考分步查询的延迟加载lazyLoading</div> </li> <li><a href="/article/1901864397022752768.htm" title="万字面试题助力春招(待补充)" target="_blank">万字面试题助力春招(待补充)</a> <span class="text-muted">~Yogi</span> <a class="tag" taget="_blank" href="/search/%E5%88%B7%E9%A2%98%E6%97%A5%E8%AE%B0/1.htm">刷题日记</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>JavaSE面试题1.JDKJRE区别JDKjavadevelop’skitjava开发工具包,包含了JRE和常见开发工具javacJRE包含了JVM和核心类库2.equals==区别首先equals()是Object类下的一个方法,比较的是引用类型。默认比较引用地址,重写比较其他东西。其次,==引用和基本数据类型都能比较引用比较的是地址,基本数据类型就是值3.如果hashCode()一样,equ</div> </li> <li><a href="/article/1901864398209740800.htm" title="Tomcat新手入门指南,从零开始,快速掌握Tomcats安装与基本配置技巧" target="_blank">Tomcat新手入门指南,从零开始,快速掌握Tomcats安装与基本配置技巧</a> <span class="text-muted">日记成书</span> <a class="tag" taget="_blank" href="/search/%E5%8F%8D%E6%AD%A3%E7%9C%8B%E4%B8%8D%E6%87%82%E7%B3%BB%E5%88%97/1.htm">反正看不懂系列</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/firefox/1.htm">firefox</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>以下是Tomcat新手入门指南,从零开始快速掌握安装与基本配置技巧:一、安装前准备确认Java环境Tomcat依赖JDK运行,需提前安装JDK8及以上版本。验证Java环境:命令行输入java-version和javac,若无报错则配置成功。下载Tomcat访问Tomcat官网,选择与系统匹配的版本(如Windows解压版)。二、安装步骤解压安装包将下载的Tomcat压缩包解压至无中文路径的目录(</div> </li> <li><a href="/article/1901864143464493056.htm" title="下载 CSS 文件阻塞,会阻塞构建 DOM 树吗?会阻塞页面的显示吗?" target="_blank">下载 CSS 文件阻塞,会阻塞构建 DOM 树吗?会阻塞页面的显示吗?</a> <span class="text-muted">liangshanbo1215</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%80%A7%E8%83%BD/1.htm">前端性能</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>下载CSS文件会对页面的渲染过程产生影响,具体是否阻塞DOM树的构建和页面的显示,取决于浏览器的渲染机制。1.CSS文件下载是否会阻塞DOM树的构建?一般情况下,CSS文件下载不会阻塞DOM树的构建:DOM树的构建是由HTML解析器完成的,解析器会逐行解析HTML并构建DOM树。即使CSS文件正在下载,HTML解析器仍然会继续工作,构建DOM树。但如果JavaScript访问了样式,CSS文件下载</div> </li> <li><a href="/article/1901863135636156416.htm" title="Java学习总结归纳" target="_blank">Java学习总结归纳</a> <span class="text-muted">eyes______</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>202402150625卢芊涵一、第一章:初始java与面向对象程序设计1.1java概述1.1.1计算机编程语言发展史:编程语言从早期的机器语言,逐步发展到汇编语言,再到高级语言。机器语言是二进制代码,直接由计算机硬件执行,但可读性和可维护性极差;汇编语言使用助记符代替二进制指令,一定程度上提高了可读性;高级语言如Java则更接近人类语言,提高了开发效率。例如,机器语言可能是一串010101,而</div> </li> <li><a href="/article/1901859224078577664.htm" title="《突破性能瓶颈,用 Rust + WASM 实现浏览器端FFT加速300%实战》" target="_blank">《突破性能瓶颈,用 Rust + WASM 实现浏览器端FFT加速300%实战》</a> <span class="text-muted">煜bart</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E4%BA%BA/1.htm">机器人</a> <div>引言:当JavaScript遇上硬核计算**“为什么我的音频分析页面卡到崩溃?”这是前端工程师在实现实时频谱可视化时最常见的噩梦。传统JavaScript的FFT计算在万级数据点时就会引发严重卡顿,但今天我们将用**Rust+WebAssembly**的组合拳,在浏览器中实现**零依赖、300%加速的傅里叶变换**。无需WebGL黑魔法,直接上硬核代码!---###**一、血腥现场:JS的Type</div> </li> <li><a href="/article/1901858845651693568.htm" title="每日学习Java之一万个为什么" target="_blank">每日学习Java之一万个为什么</a> <span class="text-muted">~Yogi</span> <a class="tag" taget="_blank" href="/search/%E4%BF%AE%E7%82%BC/1.htm">修炼</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a> <div>场景启动器:starter参考常见启动器默认配置官网默认值依赖见官网/pom父依赖注解@SpringBootApplication:启动自动装配,配合main+SpringApplication.run(.class,args)@SpringBootTest:SpringBoot单元测试注解@ConfigurationProperties:指定前缀读取配置文件对应属性,实现批量读取属性值@Impo</div> </li> <li><a href="/article/1901851655402483712.htm" title="软件性能测试深度解析(进阶篇):JMeter高阶应用与性能工程体系构建" target="_blank">软件性能测试深度解析(进阶篇):JMeter高阶应用与性能工程体系构建</a> <span class="text-muted">追寻向上</span> <a class="tag" taget="_blank" href="/search/jmeter/1.htm">jmeter</a><a class="tag" taget="_blank" href="/search/%E5%8A%9F%E8%83%BD%E6%B5%8B%E8%AF%95/1.htm">功能测试</a> <div>六、JMeter内核机制深度剖析6.1JMeter架构设计原理JMeter采用模块化架构设计,核心模块包括:测试计划(TestPlan):测试逻辑的容器,所有组件在此组织。线程模型:基于Java线程池实现虚拟用户(VirtualUser)并发,通过Ramp-Up参数控制线程启动梯度。请求处理引擎:采用事件驱动模型,每个Sampler(取样器)由独立线程执行,通过Timer(定时器)控制执行节奏。技</div> </li> <li><a href="/article/85.htm" title="ztree异步加载" target="_blank">ztree异步加载</a> <span class="text-muted">3213213333332132</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/ztree/1.htm">ztree</a> <div>相信新手用ztree的时候,对异步加载会有些困惑,我开始的时候也是看了API花了些时间才搞定了异步加载,在这里分享给大家。 我后台代码生成的是json格式的数据,数据大家按各自的需求生成,这里只给出前端的代码。 设置setting,这里只关注async属性的配置 var setting = { //异步加载配置 </div> </li> <li><a href="/article/212.htm" title="thirft rpc 具体调用流程" target="_blank">thirft rpc 具体调用流程</a> <span class="text-muted">BlueSkator</span> <a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a><a class="tag" taget="_blank" href="/search/rpc/1.htm">rpc</a><a class="tag" taget="_blank" href="/search/thrift/1.htm">thrift</a> <div>Thrift调用过程中,Thrift客户端和服务器之间主要用到传输层类、协议层类和处理类三个主要的核心类,这三个类的相互协作共同完成rpc的整个调用过程。在调用过程中将按照以下顺序进行协同工作:         (1)     将客户端程序调用的函数名和参数传递给协议层(TProtocol),协议</div> </li> <li><a href="/article/339.htm" title="异或运算推导, 交换数据" target="_blank">异或运算推导, 交换数据</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E5%BC%82%E6%88%96/1.htm">异或</a><a class="tag" taget="_blank" href="/search/%5E/1.htm">^</a> <div>/* * 5 0101 * 9 1010 * * 5 ^ 5 * 0101 * 0101 * ----- * 0000 * 得出第一个规律: 相同的数进行异或, 结果是0 * * 9 ^ 5 ^ 6 * 1010 * 0101 * ---- * 1111 * * 1111 * 0110 * ---- * 1001 </div> </li> <li><a href="/article/466.htm" title="事件源对象" target="_blank">事件源对象</a> <span class="text-muted">周华华</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml&q</div> </li> <li><a href="/article/593.htm" title="MySql配置及相关命令" target="_blank">MySql配置及相关命令</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>        MySQL安装完毕后我们需要对它进行一些设置及性能优化,主要包括字符集设置,启动设置,连接优化,表优化,分区优化等等。           一 修改MySQL密码及用户      </div> </li> <li><a href="/article/720.htm" title="[简单]poi删除excel 2007超链接" target="_blank">[简单]poi删除excel 2007超链接</a> <span class="text-muted">53873039oycg</span> <a class="tag" taget="_blank" href="/search/Excel/1.htm">Excel</a> <div>      采用解析sheet.xml方式删除超链接,缺点是要打开文件2次,代码如下:      public void removeExcel2007AllHyperLink(String filePath) throws Exception { OPCPackage ocPkg = OPCPac</div> </li> <li><a href="/article/847.htm" title="Struts2添加 open flash chart" target="_blank">Struts2添加 open flash chart</a> <span class="text-muted">云端月影</span> <div>准备以下开源项目: 1. Struts 2.1.6 2. Open Flash Chart 2 Version 2 Lug Wyrm Charmer (28th, July 2009) 3. jofc2,这东西不知道是没做好还是什么意思,好像和ofc2不怎么匹配,最好下源码,有什么问题直接改。 4. log4j 用eclipse新建动态网站,取名OFC2Demo,将Struts2 l</div> </li> <li><a href="/article/974.htm" title="spring包详解" target="_blank">spring包详解</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div> 下载的spring包中文件及各种包众多,在项目中往往只有部分是我们必须的,如果不清楚什么时候需要什么包的话,看看下面就知道了。 aspectj目录下是在Spring框架下使用aspectj的源代码和测试程序文件。Aspectj是java最早的提供AOP的应用框架。 dist 目录下是Spring 的发布包,关于发布包下面会详细进行说明。 docs&nb</div> </li> <li><a href="/article/1101.htm" title="网站推广之seo概念" target="_blank">网站推广之seo概念</a> <span class="text-muted">antonyup_2006</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a><a class="tag" taget="_blank" href="/search/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/1.htm">搜索引擎</a><a class="tag" taget="_blank" href="/search/Google/1.htm">Google</a> <div>   持续开发一年多的b2c网站终于在08年10月23日上线了。作为开发人员的我在修改bug的同时,准备了解下网站的推广分析策略。     所谓网站推广,目的在于让尽可能多的潜在用户了解并访问网站,通过网站获得有关产品和服务等信息,为最终形成购买决策提供支持。     网站推广策略有很多,seo,email,adv</div> </li> <li><a href="/article/1228.htm" title="单例模式,sql注入,序列" target="_blank">单例模式,sql注入,序列</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/1.htm">单例模式</a><a class="tag" taget="_blank" href="/search/%E5%BA%8F%E5%88%97/1.htm">序列</a><a class="tag" taget="_blank" href="/search/sql%E6%B3%A8%E5%85%A5/1.htm">sql注入</a><a class="tag" taget="_blank" href="/search/%E9%A2%84%E7%BC%96%E8%AF%91/1.htm">预编译</a> <div>  序列在前面写过有关的博客,也有过总结,但是今天在做一个JDBC操作数据库的相关内容时 需要使用序列创建一个自增长的字段  居然不会了,所以将序列写在本篇的前面    1,序列是一个保存数据连续的增长的一种方式; 序列的创建; CREATE SEQUENCE seq_pro 2 INCREMENT BY 1 -- 每次加几个 3 </div> </li> <li><a href="/article/1355.htm" title="Mockito单元测试实例" target="_blank">Mockito单元测试实例</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a><a class="tag" taget="_blank" href="/search/mockito/1.htm">mockito</a> <div>Mockito单元测试实例: public class SettingServiceTest { private List<PersonDTO> personList = new ArrayList<PersonDTO>(); @InjectMocks private SettingPojoService settin</div> </li> <li><a href="/article/1482.htm" title="精通Oracle10编程SQL(9)使用游标" target="_blank">精通Oracle10编程SQL(9)使用游标</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a> <div>/* *使用游标 */ --显示游标 --在显式游标中使用FETCH...INTO语句 DECLARE CURSOR emp_cursor is select ename,sal from emp where deptno=1; v_ename emp.ename%TYPE; v_sal emp.sal%TYPE; begin ope</div> </li> <li><a href="/article/1609.htm" title="【Java语言】动态代理" target="_blank">【Java语言】动态代理</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/java%E8%AF%AD%E8%A8%80/1.htm">java语言</a> <div>  JDK接口动态代理 JDK自带的动态代理通过动态的根据接口生成字节码(实现接口的一个具体类)的方式,为接口的实现类提供代理。被代理的对象和代理对象通过InvocationHandler建立关联   package com.tom; import com.tom.model.User; import com.tom.service.IUserService; </div> </li> <li><a href="/article/1736.htm" title="Java通信之URL通信基础" target="_blank">Java通信之URL通信基础</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/webservice/1.htm">webservice</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/ITeye/1.htm">ITeye</a> <div>java对网络通信以及提供了比较全面的jdk支持,java.net包能让程序员直接在程序中实现网络通信。 在技术日新月异的现在,我们能通过很多方式实现数据通信,比如webservice、url通信、socket通信等等,今天简单介绍下URL通信。 学习准备:建议首先学习java的IO基础知识   URL是统一资源定位器的简写,URL可以访问Internet和www,可以通过url</div> </li> <li><a href="/article/1863.htm" title="博弈Java讲义 - Java线程同步 (1)" target="_blank">博弈Java讲义 - Java线程同步 (1)</a> <span class="text-muted">boyitech</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/%E5%90%8C%E6%AD%A5/1.htm">同步</a><a class="tag" taget="_blank" href="/search/%E9%94%81/1.htm">锁</a> <div>  在并发编程中经常会碰到多个执行线程共享资源的问题。例如多个线程同时读写文件,共用数据库连接,全局的计数器等。如果不处理好多线程之间的同步问题很容易引起状态不一致或者其他的错误。    同步不仅可以阻止一个线程看到对象处于不一致的状态,它还可以保证进入同步方法或者块的每个线程,都看到由同一锁保护的之前所有的修改结果。处理同步的关键就是要正确的识别临界条件(cri</div> </li> <li><a href="/article/1990.htm" title="java-给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。" target="_blank">java-给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> public class DeleteExtraSpace { /** * 题目:给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。 * 方法1.用已有的String类的trim和replaceAll方法 * 方法2.全部用正则表达式,这个我不熟 * 方法3.“重新发明轮子”,从头遍历一次 */ public static v</div> </li> <li><a href="/article/2117.htm" title="An error has occurred.See the log file错误解决!" target="_blank">An error has occurred.See the log file错误解决!</a> <span class="text-muted">Kai_Ge</span> <a class="tag" taget="_blank" href="/search/MyEclipse/1.htm">MyEclipse</a> <div>今天早上打开MyEclipse时,自动关闭!弹出An error has occurred.See the log file错误提示! 很郁闷昨天启动和关闭还好着!!!打开几次依然报此错误,确定不是眼花了! 打开日志文件!找到当日错误文件内容: --------------------------------------------------------------------------</div> </li> <li><a href="/article/2244.htm" title="[矿业与工业]修建一个空间矿床开采站要多少钱?" target="_blank">[矿业与工业]修建一个空间矿床开采站要多少钱?</a> <span class="text-muted">comsci</span> <div>        地球上的钛金属矿藏已经接近枯竭...........        我们在冥王星的一颗卫星上面发现一些具有开采价值的矿床.....        那么,现在要编制一个预算,提交给财政部门..</div> </li> <li><a href="/article/2371.htm" title="解析Google Map Routes" target="_blank">解析Google Map Routes</a> <span class="text-muted">dai_lm</span> <a class="tag" taget="_blank" href="/search/google+api/1.htm">google api</a> <div>为了获得从A点到B点的路劲,经常会使用Google提供的API,例如 [url] http://maps.googleapis.com/maps/api/directions/json?origin=40.7144,-74.0060&destination=47.6063,-122.3204&sensor=false [/url] 从返回的结果上,大致可以了解应该怎么走,但</div> </li> <li><a href="/article/2498.htm" title="SQL还有多少“理所应当”?" target="_blank">SQL还有多少“理所应当”?</a> <span class="text-muted">datamachine</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a> <div>转贴存档,原帖地址:http://blog.chinaunix.net/uid-29242841-id-3968998.html、http://blog.chinaunix.net/uid-29242841-id-3971046.html! ------------------------------------华丽的分割线-------------------------------- </div> </li> <li><a href="/article/2625.htm" title="Yii使用Ajax验证时,如何设置某些字段不需要验证" target="_blank">Yii使用Ajax验证时,如何设置某些字段不需要验证</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a> <div>经常像你注册页面,你可能非常希望只需要Ajax去验证用户名和Email,而不需要使用Ajax再去验证密码,默认如果你使用Yii 内置的ajax验证Form,例如: $form=$this->beginWidget('CActiveForm', array(        'id'=>'usuario-form',&</div> </li> <li><a href="/article/2752.htm" title="使用git同步网站代码" target="_blank">使用git同步网站代码</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/crontab/1.htm">crontab</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a> <div>转自:http://ued.ctrip.com/blog/?p=3646?tn=gongxinjun.com   管理一网站,最开始使用的虚拟空间,采用提供商支持的ftp上传网站文件,后换用vps,vps可以自己搭建ftp的,但是懒得搞,直接使用scp传输文件到服务器,现在需要更新文件到服务器,使用scp真的很烦。发现本人就职的公司,采用的git+rsync的方式来管理、同步代码,遂</div> </li> <li><a href="/article/2879.htm" title="sql基本操作" target="_blank">sql基本操作</a> <span class="text-muted">蕃薯耀</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/sql%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C/1.htm">sql基本操作</a><a class="tag" taget="_blank" href="/search/sql%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C/1.htm">sql常用操作</a> <div>sql基本操作 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 蕃薯耀 2015年6月1日 17:30:33 星期一     &</div> </li> <li><a href="/article/3006.htm" title="Spring4+Hibernate4+Atomikos3.3多数据源事务管理" target="_blank">Spring4+Hibernate4+Atomikos3.3多数据源事务管理</a> <span class="text-muted">hanqunfeng</span> <a class="tag" taget="_blank" href="/search/Hibernate4/1.htm">Hibernate4</a> <div>Spring3+后不再对JTOM提供支持,所以可以改用Atomikos管理多数据源事务。Spring2.5+Hibernate3+JTOM参考:http://hanqunfeng.iteye.com/blog/1554251Atomikos官网网站:http://www.atomikos.com/   一.pom.xml <dependency> <</div> </li> <li><a href="/article/3133.htm" title="jquery中两个值得注意的方法one()和trigger()方法" target="_blank">jquery中两个值得注意的方法one()和trigger()方法</a> <span class="text-muted">jackyrong</span> <a class="tag" taget="_blank" href="/search/trigger/1.htm">trigger</a> <div>  在jquery中,有两个值得注意但容易忽视的方法,分别是one()方法和trigger()方法,这是从国内作者<<jquery权威指南》一书中看到不错的介绍 1) one方法     one方法的功能是让所选定的元素绑定一个仅触发一次的处理函数,格式为    one(type,${data},fn) &nb</div> </li> <li><a href="/article/3260.htm" title="拿工资不仅仅是让你写代码的" target="_blank">拿工资不仅仅是让你写代码的</a> <span class="text-muted">lampcy</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%92%A8%E8%AF%A2/1.htm">咨询</a> <div>这是我对团队每个新进员工说的第一件事情。这句话的意思是,我并不关心你是如何快速完成任务的,哪怕代码很差,只要它像救生艇通气门一样管用就行。这句话也是我最喜欢的座右铭之一。 这个说法其实很合理:我们的工作是思考客户提出的问题,然后制定解决方案。思考第一,代码第二,公司请我们的最终目的不是写代码,而是想出解决方案。 话粗理不粗。 付你薪水不是让你来思考的,也不是让你来写代码的,你的目的是交付产品</div> </li> <li><a href="/article/3387.htm" title="架构师之对象操作----------对象的效率复制和判断是否全为空" target="_blank">架构师之对象操作----------对象的效率复制和判断是否全为空</a> <span class="text-muted">nannan408</span> <a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E5%B8%88/1.htm">架构师</a> <div>1.前言。   如题。 2.代码。 (1)对象的复制,比spring的beanCopier在大并发下效率要高,利用net.sf.cglib.beans.BeanCopier Src src=new Src(); BeanCopier beanCopier = BeanCopier.create(Src.class, Des.class, false); </div> </li> <li><a href="/article/3514.htm" title="ajax 被缓存的解决方案" target="_blank">ajax 被缓存的解决方案</a> <span class="text-muted">Rainbow702</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a> <div>使用jquery的ajax来发送请求进行局部刷新画面,各位可能都做过。 今天碰到一个奇怪的现象,就是,同一个ajax请求,在chrome中,不论发送多少次,都可以发送至服务器端,而不会被缓存。但是,换成在IE下的时候,发现,同一个ajax请求,会发生被缓存的情况,只有第一次才会被发送至服务器端,之后的不会再被发送。郁闷。 解决方法如下: ① 直接使用 JQuery提供的 “cache”参数,</div> </li> <li><a href="/article/3641.htm" title="修改date.toLocaleString()的警告" target="_blank">修改date.toLocaleString()的警告</a> <span class="text-muted">tntxia</span> <a class="tag" taget="_blank" href="/search/String/1.htm">String</a> <div>  我们在写程序的时候,经常要查看时间,所以我们经常会用到date.toLocaleString(),但是date.toLocaleString()是一个过时 的API,代替的方法如下:   package com.tntxia.htmlmaker.util; import java.text.SimpleDateFormat; import java.util.</div> </li> <li><a href="/article/3768.htm" title="项目完成后的小总结" target="_blank">项目完成后的小总结</a> <span class="text-muted">xiaomiya</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE/1.htm">项目</a> <div>项目完成了,突然想做个总结但是有点无从下手了。 做之前对于客户端给的接口很模式。然而定义好了格式要求就如此的愉快了。 先说说项目主要实现的功能吧 1,按键精灵 2,获取行情数据 3,各种input输入条件判断 4,发送数据(有json格式和string格式) 5,获取预警条件列表和预警结果列表, 6,排序, 7,预警结果分页获取 8,导出文件(excel,text等) 9,修</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>