windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境

目前go语言在window或者linux操作系统上,最好的go语言开发调试环境都是由eclipse+goclipse插件+gdb搭建的。如果你还没有搭建好go语言的开发环境,请参考这篇博文《windows下Go语言的安装和开发环境搭建》

一般大家用eclipse都是开发java,如果要开发go,那就得安装goclipse插件了,这样才能有代码高亮、自动编译、联想提示、跳转到函数定义等丰富功能;如果还想要调试的功能,就还得有gdb;如果你还想引入github上的开源库,那还需要git客户端。下面一一介绍如果安装和使用:

安装goclipse

在安装goclipse前,需要事先安装好jdk8。goclipse下载地址:http://goclipse.github.io/releases/ ,由于我朝的高墙存在,可能这个地址访问不稳定,甚至有的人根本访问不了,建议参考goclipse官网的文档,把releases目录下的内容下载到本地后解压,使用本地的路径作为url来安装,比如:file:///D:/goclipse.github.io-master/releases/,搞java的安装eclipse插件应该比较熟悉,安装过程也比较简单,直接点下一步,接受,yes,重启eclipse就可以了(可能由于国内网速的原因,安装过程可能比较长)。如果安装成功,可以在Window–>Preferences里面左边的树形菜单里看到Go,点Go,然后在右边设置GOROOT的路径为go的安装目录即可,下面的几个Go tool的路径会被自动识别到。此时应该看到如下的效果:

浏览到go的安装目录

下面创建一个go项目来检验一下,在菜单栏如下操作File–>New–>Other–>选择Go–>选择Go Project–>Next–>给项目取个名字(比如gotest)–>Finish,创建成功,然后在项目的src目录下创建一个带main入口函数的源文件test。

配置gbd
配置gbd
创建带main函数的源文件
创建带main函数的源文件

然后编辑代码看看高亮和代码提示的效果

golang代码联想
golang代码联想

上面的效果不错吧,goclipse现在已经在方法提示、autocomplete和查看方法变量声明等功能方面支持得很好了,而且这些功能不用额外配置,因为goclipse中包含了一个gocode(用于Go语言的自动补全工具),在安装goclipse的时候会自动安装上gocode(比如:我的gocode在D:\software\green_software\eclipse-j2ee\eclipse\plugins\com.googlecode.goclipse.gocode_0.7.6.v439\tools\windows_amd64),所以gocode一般不用额外的安装和配置,只需要勾选让其在eclipse启动时自动启动即可,配置路径为:Window->Perferences->Go->Gocode,这样eclipse在启动后,你可以在Window资源管理器的进程列表中看到有gocode这个进程。如下图:

goclipse的gocode配置
goclipse的gocode配置

如果你没有gocode,或者gocode没有启动,或者你想用最新的gocode,那么你可以在启动eclipse之前使用如下的命令手动启动gocode:

gocode.exe -s -sock=tcp

这样你就可以在eclipse中使用点号来联想方法和字段,以及用alt+/来自动补全方法和字段。

运行这个程序有两个办法,一个是cd到这个工程的bin目录下,执行下面自动编链接好的exe文件,另一个是在eclipse上右键main函数所在的源文件–>Run As–>Run Go Application,即可。

我平时在使用过程中,发现一个奇怪的问题,就是自己的代码不能自动编译也不能运行了,研究一番才发现是工程的src目录配置不对,理论上这个配置不需要自己手动配的,但是如果你也碰到这种情况,你可以看看这个src目录是否配置正确了,见图你就知道了:

新引入的go项目后检查项目配置
新引入的go项目后检查项目配置

安装GDB

想一想,如果写代码不能调试,那就只能通过fmt.Println(“xxx”)这种方式,那是多么痛苦啊,让自己的开发环境可以动态的调试是很有必要的。下面介绍下,如何安装和配置GDB,让eclipse支持go语言代码的挑食的。

由于go编译器编译出来的可执行程序是按照gdb的标准的,所以目前调试go语言代码必须要有gdb,需要在windows上装一个,linux上装gdb很容易,但是windows上比较麻烦一下,比较常用的做法是装MinGW,然后用里面的gdb。但是我推荐另一个做法:

下载另一个自带了gdb的go语言集成开发软件liteide(绿色软件,解压即可),里面的bin目录下有gdb.exe和gdb64.exe,这两文件前者用于32位操作系统,后者用于64位操作系统。

然后把你操作系统对应的那个gdb配置到goclipse插件里面,操作如下:Window–>Preferences–>打开Go节点–>选择Debug,然后设置GDB,我的操作是64位的,所以选择了gdb64.exe。如图:

配置gdb
配置gdb

这样就ok了,现在可以去试试,在代码里设断点看效果了。(当然现在这个debug功能还没有那么完善,但是大部分的情况都是可以动态查看变量的值的,某未及之处只能通过输出的方式来做了。)

配置GOPATH变量关联go的SDK源码

如果不使用eclipse+goclipse,而使用记事本写代码的话,就必须要配置gopath,尽管使用goclipse后可以不设置GOPATH环境变量,但是那样就不能在eclipse里面直接关联查看go的源码了。如果想让自己的代码中选择一个函数,然后按F3(或者按住ctrl点某个函数)就能看到源码的话(eclipse常用的关联代码的功能),就需要给goclipse配置GOPATH,配置好了以后你可以按住ctrl点某个函数,就可以跳到go的源码中直接查看源码的实现,这个对学习go很有帮助,强烈推荐大家使用。配置效果如图:

在eclipse中设置gopath
在eclipse中设置gopath

配置完了以后,就可以看到Project Explorer里面多出了一个GOROOT节点,这个节点下的都是go的源码,没事多看看很有好处!

用git来下载第三方库

由于现在github非常火,很多开源爱好者都把自己的代码托管到了github、bitbucket、google code上,go语言本身也是开源。想学go语言的同学难免会去这些地方看其他人写的好的代码,不过最好是把这些代码下载自己把玩一番。要下载这些代码就需要使用git客户端,它可以让你用简单的命令就可以把代码下载下来,并打包好。这样你就可以方便的使用了。下面介绍下git客户端的下载和安装:

git的windows客户端下载地址为:http://code.google.com/p/msysgit/downloads/list?q=full+installer+official+git

安装过程中有一个步骤需要注意的,这一步可以让你在dos命令行中使用git命令,这样比较方便一点,如图:

git安装,让你的git命令可以在windows控制台里使用
git安装,让你的git命令可以在windows控制台里使用

这时候你就可以在windows命令行中使用git命令了,现在试试看看好用不,我在bitbucket上有个开源的工具包,以这个作为例子试试看~~

先cd到你的工程的src目录下,然后键入这个命令:go get -u bitbucket.org/weager/utils

这个命令中的-u可以在你曾经下载过这个包时,自动更新这个包。此时,应该能在src目录下看到bitbucket.org目录,这目录里面有一个weager目录,这个目录下就是utils包的代码了。

然后运行打包命令:go install bitbucket.org/weager/utils

此时会在pkg目录下产生于src相同的目录,在utils目录下会有一个utils.a文件,这就是打包后生成的文件。见图:

go项目目录结构以及下载的包
go项目目录结构以及下载的包

下载了包以后,就可以在你的工程中使用这个包了,比如:

go语言代码中引入第三方库代码演示
go语言代码中引入第三方库代码演示

 

 

到此为止,go语言的开发环境完成了,可以开始开发了,good luck 🙂

Reference

eclipse及其他IDE的go语言开发环境搭建

goclipse安装

chrome开发者工具快捷键

按F12打开chrome的开发者工具,点一下开发者工具,然后按F1,就会弹出开发者工具快捷键指南,这个指南里面包含了所有的chrome开发者工具快捷键,这给平时前后端开发的同学带来的不少便捷。如下图:

chrome开发者工具快捷键
chrome开发者工具快捷键

打开chrome开发者工具的快捷键除了F12外,还有几个:

  • Ctrl+Shift+I  等同于F12,打开chrome开发者工具
  • Ctrl+Shift+J   打开chrome开发者工具,并把tab定位到Console上
  • Ctrl+Shift+C   打开chrome开发者工具,并把tab定位到Element上,同时把Element定位到鼠标光标所在页面的位置  (这个快捷键超有用)
  • Ctrl+Shift+Delete  打开清楚缓存的设置界面

当然还有一些操作chrome的常用快捷键,详见:

用TortoiseSVN chekout的代码不能在eclipse中被subclipse识别的问题

之前一直用tortoiseSVN来checkout、update、commit代码,但是eclipse的subclipse插件那么好用,可惜我的eclipse插件subclipse不能识别tortoiseSVN签出的代码目录中已经有.svn目录。百度了好几把,没找到比较好的方案,于是自己摸索了一下subclipse的功能,发现其中有个share project的功能可以解决这个问题。

有如下的四个步骤:

1. 在多个project或者整个work set上右键–>Team–>Share Project

右键,查看Team
右键,查看Team

2. 选择svn:

选择svn进行关联
选择svn进行关联

3. 选择需要与svn关联的工程:

选择工程进行关联
选择工程进行关联

4. 验证与svn的关联

将项目链接至资源库
将项目链接至资源库

5. 关联完成,稍等片刻后,工程会逐一与svn资源库关联上,然后就能在每个工程、文件夹、文件后面看到资源和版本信息了。

 

ubuntu 12.04 LTS 版eclipse svn插件subclipse安装报Failed to load JavaHL Library错误

在Ubuntu 12.04 下, eclipse svn插件subclipse安装一般会遇到两个问题:

1)Failed to load JavaHL Library.

These are the errors that were encountered:
no libsvnjavahl-1 in java.library.path
no svnjavahl-1 in java.library.path
no svnjavahl in java.library.path
java.library.path = /usr/lib/jni

这里有官方的解决这个问题的指导:http://subclipse.tigris.org/wiki/JavaHL

按照以前的装法

1、sudo apt-get install libsvn-java

该命令会产生libsvnjavahl-1.so文件。

(64位操作系统该文件在/usr/lib/x86_64-linux-gnu/jni/目录下,如果是32位操作体系则在/usr/lib/i386-linux-gnu/jni/目录下。

2、eclipse.ini中增加参数(该文件在eclipse目录中)

-vmargs
-Dosgi.requiredJavaVersion=1.5
-Djava.library.path=/usr/lib/jni

其实eclipse默认使用的library path就是/usr/lib/jni目录,该目录下还有其他java native的实现。所以不能为了解决subclipse的问题,而修改-Djava.library.path的值,应该把需要的文件软链接到默认的library path下(即/usr/lib/jni下)。所以请按照第三步来做。

3、把libsvnjavahl-1.so文件软链接到/usr/lib/jni下

64位操作系统请用这个命令:

sudo ln -s /usr/lib/x86_64-linux-gnu/jni/libsvnjavahl-1.so /usr/lib/jni/libsvnjavahl-1.so

32位操作系统请用这个命令:

sudo ln -s /usr/lib/i386-linux-gnu/jni/libsvnjavahl-1.so /usr/lib/jni/libsvnjavahl-1.so

4、重启eclipse

2) ubuntu Incompatible JavaHL library loaded.  1.7.x or later required

JavaHL 版本过低错误,Ubuntu 12.04中,通过 $ apt-get install libsvn-java 命令安装的版本是1.6.x

如果你的eclipse是3.7.2 默认安装的subclipse 是 1.8.x 版本的,他要求 JavaHL 是 1.7 以上。

所以需要先卸载你刚安装的libsvn-java,然后再安装1.7版的libsvn-java,使用如下的命令安装:

sudo apt-get purge libsvn-java

sudo add-apt-repository ppa:dominik-stadler/subversion-1.7

sudo apt-get update sudo apt-get install libsvn-java

安装完成后,重启,稍等一会,如果没弹出报错的对话框,则成功了;如果弹出对话框说有bug需要把xxxx的功能禁用掉,那你可以直接点ok,重启后试试subclipse的功能,如果没问题就ok了。

如果重启后还是报错,就需要你卸载掉 subclipse  换成 1.6.x 版本了(http://subclipse.tigris.org/update_1.6.x)。

修改自海波无痕 本文链接地址: ubuntu 12.04 LTS 版eclipse svn报Failed to load JavaHL Library

Go语言出中文书籍啦!

现在比较靠谱的中文的Go语言书籍有3本:

1. 首先推荐一下:《Go语言编程》——由一个做云存储的公司“七牛”的两位大牛:许世伟和吕桂花 编著

这本书我第一时间买了,很适合阅读,书不厚,但是讲得很全面,很精练,适合有一点编程基础的同学阅读,而且这本书还可以作为手册来参考。

2. 还有一本开源的免费书籍:《Go Web 编程》——由一位乐于分享知识的朋友写的,目前还在编写阶段,但是已经可以直接在线阅读了,也可以把书下载下来,生成html来阅读。非常欣赏这位gofans的精神,乐于分享,共同进步,同时也希望有更多的人能参与到这本书的编写中来,不论你是熟悉go的还是不熟悉的go的。

这本书主要是从web开发的角度来讲解go语言的,内容讲得很基础,适合初学者学习,想用go来做web开发的同学看看这本书是很不错的。

3. 第三本书是:《GO语言 云动力》,这本书是最早的中文go语言书籍,但是正因为出来得较早,所以书的质量可能不是最好的。

webx学习及相关资料

webx是一套基于Java Servlet API的通用Web框架。它在Alibaba集团内部被广泛使用。从2010年底,向社会开放源码。
  1. webx的官方开源网址:http://www.openwebx.org/
  2. Webx框架指南:http://openwebx.org/docs/index.html
  3. 手把手创建第一个Webx应用:http://openwebx.org/docs/firstapp.html
  4. Webx表单验证服务指南:http://openwebx.org/docs/form.html
  5. Webx日志系统的配置:http://openwebx.org/docs/logging.html
  6. Webx辅助工具:

常用vim命令

这是一个vim命令操的基础教程,如下的命令是比较常用的命令,几乎都需要记住。所以想高效的写代码也是需要付出一定的代价的。

用vim打开文件

vi filename 打开或新建文件,并将光标置于第一行首
vi +n filename 打开文件,并将光标置于第n行首
vi + filename 打开文件,并将光标置于最后一行首
vi +/pattern filename 打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename 在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename….filename 打开多个文件,依次进行编辑

vim中的选项

:set all 打印所有选项
:set nooption 关闭option选项
:set nu 每行前打印行号
:set showmode 显示是输入模式还是替换模式
:set noic 查找时忽略大小写
:set list 显示制表符(^I)和行尾符号
:set ts=8 为文本输入设置tab stops
:set window=n 设置文本窗口显示n行

插入文本类命令 模式切换

: 进入末行模式
ESC 进入命令模式
i 进入编辑模式,在光标前
I 在当前行首
a 光标后
A 在当前行尾
o 在当前行之下新开一行
O 在当前行之上新开一行

移动光标

h、j、k、l 分别控制光标左、下、上、右移一格。
Ctrl+b 屏幕往后移动一页。[常用]
Ctrl+f 屏幕往前移动一页。[常用]
Ctrl+u 屏幕往后移动半页。
Ctrl+d 屏幕往前移动半页。
0 (数字零):移动文章的开头。[常用]
L 移到屏幕的最后一行
M 移到屏幕的中间一行
H 移到屏幕的第一行
G 移动到文章的最后。[常用]
w 光标跳到下个word的开头。[常用]
W 移到下一个字的开头,忽略标点符号
e 光标跳到下个word的字尾。
E 移到下一个字的结尾,忽略标点符号
b 光标回到上个word的开头。按 $:移到光标所在行的行尾。[常用]
B 移到前一个字的开头,忽略标点符号
^ 移到该行第一个非空白的字符。按 0:移到该行的开头位置。[常用]
$ 移到当前行的最后一个字符
+或return 移到下一行的第一个字符
– 移到前一行的第一个非空字符
( 移到句子的开头
) 移到句子的结尾
{ 移到段落的开头
} 移到下一个段落的开头
# 移到该行的第#个位置,例:51、121。[常用]
删除文字
x 每按一次删除光标所在位置的后面一个字符。[超常用]
#x 例如,6x 表删除光标所在位置的后面6个字符。[常用]
X 大字的X,每按一次删除光标所在位置的前面一个字符。
#X 例如,20X 表删除光标所在位置的前面20个字符。
dw 删除光标到本行该单词末尾以及末尾的所有空格。
ndw 从当前光标处往后删除n个字
d$ 删除当前光标至本行的末尾
dd 删除光标所在行。[超常用]
#dd 例如,6dd表删除从光标所在的该行往下数6行之文字。[常用]
db 删除光标前面的字
ndb 从当前行开始往前删除n字
:n1,n2 d 将n1行到n2行之间的内容删除
:n1,n2 co n3 将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3 将n1行到n2行之间的内容移至到第n3行下

缩进

:set ai 打开自动缩进
:set sw=n 将移动宽度设置为n个字符
n<< 使n行都向左移动一个宽度
n>> 使n行都向右移动一个宽度,例如3>>就将接下来的三行每行都向右移动一个移动宽度

复制 粘贴

yw 将光标所在处到字尾的字符复制到缓冲区中。(想在和#x、#X的功能相反)
p 将缓冲区内的字符粘贴到光标所在位置(指令‘yw’与‘p必须搭配使用)。
yy 复制光标所在行。[超常用]p:复制单行到您想粘贴之处。指令‘yy’与‘p’必须搭配使用
#yy 如:6yy表示拷贝从光标所在的该行往下数6行之文字。[常用]
ayy 将复制行放入buffer a, vi提供buffer功能,可将常用的数据存在buffer
ap 将放在buffer a的数据粘贴。
b3yy 将三行数据存入buffer b。
b3p 将存在buffer b的资料粘贴

替换单字符

r 取代光标所在处的字符:[常用]
R 取代字符直到按Esc为止。
cw 更改光标所在处的字到字尾处
c#w 例如,「c3w」表示更改3个字

撤销

u 假如您误操作一个指令,可以马上按u,回复到上一个操作。[超常用]
U 撤消当前行的所有修改

显示行号

:set nu

查找

/text 在文件中向前查找text
?text 在文件中向后查找text
n 在同一方向重复查找
N 在相反方向重复查找
:set ic 查找时忽略大小写
:set noic 查找时对大小写敏感
:s/oldtext/newtext 用newtext替换oldtext
:m,ns/oldtext/newtext 在m行通过n,用newtext替换oldtext
& 重复最后的:s命令
:g/text1/s/text2/text3 查找包含text1的行,用text3替换text2
:g/text/command 在所有包含text的行运行command所表示的命令
:v/text/command 在所有不包含text的行运行command所表示的命令

替换字符串

$s/string/replae/g 在last line mode输入“1,$s/string/replace/g”会将全文的string字符串取代为replace字符串,其中1,$s就是指搜寻区间为文章从头至尾的意思,g则是表示全部取代不必确认。%s/string/replace/c:同样会将全文的string字符串取代为replace字符串,和上面指令不同的地方是,%s和1,$s是相同的功能,c则是表示要替代之前必须再次确认是否取代。
1,20s/string/replace/g 将1至20行间的string替代为relpace字符串。

存文件 离开文件

:w 在命令行提示符号“:”前按w即可将文件存起来。[超常用]
:#,# w filename 如果您想摘取文章的某一段,存成另一个文件,可用这个指令#代表行号,例如30,50 w nice 将您正在编辑文章的第30~50行存成nice这个文件。
😡 保存当前文件并退出
:q 按q就离开,有时如果无法离开vi,可搭配“!:强置离开vi,如“q!”
:qw 一般建议离开时,搭配w一起使用,如此离开时还可存文件。

vim中的shell转义命令

:!command 执行shell的command命令,如:!ls
:!! 执行前一个shell命令
:r!command 读取command命令的输入并插入,如:r!ls会先执行ls,然后读入内容
:w!command 将当前已编辑文件作为command命令的标准输入并执行command命令,如:w!grep all
:cd directory 将当前工作目录更改为directory所表示的目录
:sh 将启动一个子shell,使用^d(ctrl+d)返回vi
:so file 在shell程序file中读入和执行命令

vim多窗口功能

:new 打开一个新tab
:split 把当前的tab拆成上下两个tab,两个tab对应的同一个文件,在任何一个中进行修改,另一个也会同步变化
ctrl+w 按两次可在多个tab间切换
:res 30 把当前tab的高度设置为30行
vim窗口分割命令 http://www.phperblog.net/?p=472

vi和vim的高级进阶

Vim 实用技术,第 1 部分: 实用技巧
Vim 实用技术,第 2 部分: 常用插件
Vim 实用技术,第 3 部分: 定制 Vim
手把手教你把Vim改装成一个IDE编程环境(图文) 转载自吴垠的博客[http://blog.csdn.net/wooin]
vi/vim使用进阶 转载自Easwy的博客 [ http://easwy.com/blog/ ]

如何创建、编译、打包go语言的源代码和工程进行go语言开发

go语言编译环境为Go1,下面用具体的实例来演示如何创建、编译、打包go语言的源代码和工程,如何用go的命令来进行go语言开发。

步骤如下:

  • 设置GOPATH,这个环境变量指向你的projectDir(工程目录),形如:GOPATH=/home/user/ext:/home/user/projectDir (可以设置多个工程目录,linux下用冒号分隔,windows下用分号分隔)
  • 创建工程文件夹projectDir
  • 在projectDir下创建src目录
  • 在src下创建区分包的文件夹myDir
  • 在myDir下创建包pkgDir
  • 在pkgDir下创建package source源代码文件,这些文件的package都是pkgDir,比如创建一个文件test.go,代码如下:

  • 写完源代码以后在src目录下运行go install myDir/pkgDir命令把包pkgDir打包成.a文件(会在projectDir/pkg目录下生成pkgDir.a的目标文件)
  • 在myDir下创建command source文件夹,取名myCommand
  • 在myCommand文件夹下创建带有main函数的源代码文件hello.go,代码如下:

  • 在src下运行go install myDir/myCommand (会创建projectDir/bin目录,并生成以myCommand?为文件名的可执行文件)。需要注意的是要生成可知性文件的话,go install后的文件夹下一定要有一个带有package main的go源文件。鉴于手动操作的复杂性,推荐大家使用eclipse来写go的代码,在eclipse上配置了go环境后,可执行文件和.a文件都是自动产生的。

最后projectDir目录下的结构类似如下的形式:

如何编译、打包go语言(golang)的源代码详见:http://golang.org/doc/code.html

错误: Could not read CAPTCHA token file.There is a problem with the directory /si-captcha-for-wordpress/captcha/temp/.The directory is not found, a permissions problem may have prevented this directory from being created.

在自己的wordpress博客上安装了“si-captcha-for-wordpress”,并在该插件设置中设置了登录需要验证码,然后我自己退出后再尝试登录,结果发现怎么输入验证码都显示如下的错误:错误: Could not read CAPTCHA token file.There is a problem with the directory /si-captcha-for-wordpress/captcha/temp/.The directory is not found, a permissions problem may have prevented this directory from being created. Fixing the actual problem is recommended, but you can uncheck this setting on the si captcha options page: “Use CAPTCHA without PHP session” and the captcha will work this way just fine (as long as PHP sessions are working).

我自己把代码checkout出来,先尝试在/si-captcha-for-wordpress/captcha目录下添加了temp目录,commit以后,还是登录不进去,并且报一个有关权限的错误,但是sinaapp根本就不能设置访问权限的,所以基本判断,这个插件还是存在一定的兼容性问题。

最后没招了,只能把代码中的wp-contentplugins目录下的si-captcha-for-wordpress文件夹删除,删除后commit代码,然后尝试登录博客,登录成功,在控制台中进入插件管理界面,提示si-captcha-for-wordpress插件已经被禁用,但是找不到si-captcha-for-wordpress插件目录。

为了保证博客程序运行不要老是抛错,既然si-captcha-for-wordpress已经被禁用了,我于是又在代码中把si-captcha-for-wordpress目录还原了,再登录博客进入控制台,删除这个插件,就正常了。

后来我发现了一个验证码的插件,很不错的,推荐一下:Captcha plugin,我现在用的就是这个。

apache2.2的基本配置

apache配置文件:apache目录的conf/httpd.conf。以下主要是给apache配置端口号、静态站点目录和访问权限、多域名与虚拟主机的映射关系、反向代理。

PS:该配置文件中,开头是#号的为注释,具体配置看参考这些注释的内容

1. 设置端口号为80:

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80

2. 设置静态站点目录和访问权限

默认是的htdoc目录为:$APACHE_HOME/htdocs        ($APACHE_HOME为apache的安装目录),假如你想把这个静态文件的目录设置成D:/xxx/myHtdocs,(注意斜杠的方向,与windows的正好相反)则需要修改如下的两个设置:

DocumentRoot “D:/xxx/myHtdocs”

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory “D:/xxx/myHtdocs”>
#
# Possible values for the Options directive are “None”, “All”,
# or any combination of:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that “MultiViews” must be named *explicitly* — “Options All”
# doesn’t give it to you.
#
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be “All”, “None”, or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
AllowOverride None

#
# Controls who can get stuff from this server.
#
    Order allow,deny
    Allow from all

</Directory>

3. 设置多个域名对应的虚拟主机

先把“2. 设置默认的静态站点目录和访问权限”中的”Allow from all”设置成“Deny from all”。

需求:一台主机、两个域名分别映射两个静态站点,两个静态站点对应两个不同的文件目录。

NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot “D:/xxx/site1”
<Directory “D:/xxx/site1”>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ServerName www.site1.com
# Other directives here
</VirtualHost>

<VirtualHost *:80>
DocumentRoot “D:/xxx/site2”
<Directory “D:/xxx/site2”>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ServerName www.site2.com
# Other directives here
</VirtualHost>

 4. 设置反向代理

加载代理模块:

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_http_module modules/mod_proxy_http.so

需求1:把域名为www.mysite.com的请求全部转给localhost:8080来处理。

设置域名的代理

<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ServerName www.mysite.com
</VirtualHost>

需求2:把域名为www.mysite.com/foo/的请求转给http://localhost:8080/aaa/bbb/

<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass /foo/ http://localhost:8080/aaa/bbb/
ProxyPassReverse /foo/ http://localhost:8080/aaa/bbb/
ServerName www.mysite.com
</VirtualHost>

5. Reference

http://httpd.apache.org/docs/2.2/  apache http server2.2版文档