设为首页 收藏本站
查看: 809|回复: 0

[经验分享] [try it] Apache HTTP Server

[复制链接]

尚未签到

发表于 2015-8-3 08:39:42 | 显示全部楼层 |阅读模式
  比较有名的三个web server,Windows下是IIS,而Linux/Unix下则主要为Appache HTTP Server (httpd), 另外还有一个专门为运行java code的Tomcat Server,当然是跟着java一起跨平台了。
  其实Appache HTTP Server也是跨平台的,比如我这两天用的就是Windows下的版本。
  基本概念
Apache HTTP Server,或者Apache Server,或者httpd,是一个支持Unix和Linux的,提供插件机制的Web Server。 所谓Web Server,是指用来host web sites的软件,host的内容包括:database, static content与runnable code。
  假设你做了一个网站,无论是几个简单的静态网页,还是一个复杂的包含数据库,cgi的动态网站,都需要有一个web server来托管,实现browser - server间的数据传输。
  注:这里有个关于动态网页,静态网页非常不错的介绍
  下载安装


  • Apache的官网提供了Win32版本的msi
  • 下载安装完后,可以看到大概目录结构:


    bin - httpd等主要可执行文件
    cgi-bin - cgi脚本,程序
    conf - 配置文件,httpd.conf, mime.types... 下面这些设置都是由配置文件中的配置的决定的。
    htdocs - 静态html, javascript的文件的主目录
    include - 用来编写module的sdk
    lib - 用来编写module的sdk
    logs - 执行log,发生错误时可以参考
    manual - 文档
    modules - httpd的各个功能模块,以so为后缀名,在windows下他们其实是dll
  • 在浏览器中输入:http://localhost/,可以看到页面显示:It Works! 这其实调用了htdocs目录下的index.html文件。
  • 在浏览器中输入:http://localhost/cgi-bin/printenv.pl, 可以看到页面中打印出所有相关的环境变量值,这其实是执行了cgi-bin/printenv.pl文件
  操作实践
  要完成这么一个工作,通过web页面显示与添加一个sqlite数据库中的数据,这就不用手工去打开数据库并select或者insert了。
  这些功能可以用SSI与CGI实现,这里有两篇关于SSI与CGI的不错的介绍:


  • CGI: Dynamic Content
  • Server Side Includes (SSI)
  基本上,你需要在httpd.conf做如下配置来启用这些功能:



# SSI
Options +Includes
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
# CGI
ScriptAlias /cgi-bin/ "D:/System/Apache Software Foundation/Apache2.2/cgi-bin/"
  
  然后,创建一个main.shtml文件,用来设计网页的总体框架,在需要从数据库读取数据的地方,使用ssi:






Date
Goodjob
Explain



  在cgi脚本中,调用sqlite3打开数据库,查询数据并格式化后print出来,该脚本会在每次页面加载或者刷新时被调用。
  需要注意的是:cgi脚本的第一行,必须是打印content type:



print "Content-type: text/plain;
or
print "Content-type: text/html;
  对于cgi,第二个需要注意的是你要在第一行指定该脚本的解析器,如:



#!"C:/Program Files/perl64/bin/perl.exe"
  当然,你也可以用c语言直接编写可行性文件作为cgi。
perl与c都有一些成熟的cgi库:


  • perl:http://search.cpan.org/~lds/CGI.pm-3.43/CGI.pm
  • c: http://www.boutell.com/cgic/
  
  然后,插入数据,则使用html form,设计好需要的数据输入,并把form的action设置为某个cgi脚本:





New:
Date:
Goodjob:10
Explain:NULL



  这样,当submit按钮被按下时,form中的数据通过url传给了cgi脚本,cgi脚本中可以通过QUERY_STRING环境变量拿到:



REQUEST_METHOD: GET
QUERY_STRING: date=2012-01&goodjob=1&explain=NULL
  
于是,我们可以在cgi脚本中解析用户输入的数据,并组成sql语句插入数据库。
  一般这么解析:



# Get the name and value for each form input:
my @pairs = split(/&/, $ENV{"QUERY_STRING"});
my %Form;
# Then for each name/value pair....
foreach my $pair (@pairs) {
    # Separate the name and value:
    my ($name, $value) = split(/=/, $pair);
    # Convert + signs to spaces:
    $value =~ tr/+/ /;
    # Convert hex pairs (%HH) to ASCII characters:
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    # Store values in a hash called %FORM:
    $Form{$name} = $value;
}
  

  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-93474-1-1.html 上篇帖子: Apache配置参考 下篇帖子: xampp中的apache启动不了显示busy的解决方案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表