web和website?

网络编程,网站,net,web,web应用的区别?

框架 架构 模板区别?

见zotero/architecture

web/website/webapp architecture/framework

webapp architure

Web framework

  • A Web framework is a collection of packages or modules which allow developers to write Web applications
    • client-side framework
    • server-side framework

web appp frameworkWeb framework

关系

  • framework是模板,architure是实现。一套Web framework要尽量支持多种architure。(比如支持不同cache,不同database) – by xs

reference

Web服务器, http服务器, 应用服务器

严格意义上Web服务器只负责处理HTTP协议,只能发送静态页面的内容。而JSP,ASP,PHP等动态内容需要通过CGI、FastCGI、ISAPI等接口交给其他程序去处理。这个其他程序就是应用服务器。

  • apache+CGI:
    • 在httpd.conf中设置CGI目录:ScriptAlias /cgi-bin/ /var/www/cgi-bin/
    • 服务器和CGI程序之间通信,一般是通过进程的环境变量和管道。
    • 缺点: 1. 每次有请求,服务器都会fork and exec,每次都会有一个新的进程产生,开销还是比较大的。2. 服务进程必须要和web服务器在同一台机子上
    • 教程 http://www.runoob.com/python/python-cgi.html
  • apache+fastCGI+

    • java:
      • httpd.conf中配置:
      • tomcat通过8009端口与apache交互。server.xml中配置:
    • php:
      • apache配置:
      • nginx配置:nginx.conf
      • php解析器监听9000端口
    • python(web.py, django)
      • 能不用framework吗?可以,见《python核心编程》P3853
  • apache+反向代理(应用层的url重定向)

    • 直接重定向到其他能处理请求的服务器,比如php服务器,java服务器,文件服务器

比如Web服务器包括Nginx,Apache,IIS等。而应用服务器包括WebLogic,JBoss等。应用服务器一般也支持HTTP协议,因此界限没这么清晰。但是应用服务器的HTTP协议部分仅仅是支持,一般不会做特别优化,所以很少有见Tomcat直接暴露给外面,而是和Nginx、Apache等配合,只让Tomcat处理JSP和Servlet部分

前台接待(web服务器) 与 真正的价值服务者(应用服务器)

http://z-jianwen.iteye.com/blog/889762

  • Apache是纯粹的web服务器,而Tomcat和IIS因为具有了解释执行服务器端代码的能力,可以称作为轻量级应用服务器
  • 以Java EE为例,Web服务器主要是处理静态页面处理和作为 Servlet容器,解释和执行servlet/JSP,而应用服务器是运行业务逻辑的,主要是EJB、 JNDI和JMX API等J2EE API方面的,还包含事务处理、数据库连接等功能,所以在企业级应用中,应用服务器提供的功能比WEB服务器强大的多。

启动default servlet

basic info

  • servlet-name: default
  • servlet-class: org.apache.catalina.servlets.DefaultServlet

线程调用栈,请求时序图

启动命令:org.apache.catalina.startup.Bootstrap start (见catalina.sh)

  • Bootstrap.main(String[]) //

    1. bootstrap.init(),主要是catalinaDaemon = new Catalina()
    2. bootstrap.load() 主要根据server.xml的配置new StandardServer()

      • Method.invoke(Object, Object…) // 调用org.apache.catalina.startup.Catalina.load(“start”)
      • Catalina.load(String[]) // 1. 读取server.xml 2.new StandardServer(),(server = StandardServer[8005]) 3. server.setCatalina(this)

      Digester.parse(InputSource) line: 1536
      Catalina.load()

Bootstrap.load(String[]) //  主要

Tomcat admin port 8005
catalina实例是什么时候new的?

1
2
3
4
5
6
7
8
9
10
11
12
StandardWrapper.initServlet(Servlet) //
StandardWrapper.loadServlet() // 1. servlet = newInstance(servletClass) 2. initServlet(servlet) 3.
StandardWrapper.load() //
StandardContext.loadOnStartup(Container[]) //
StandardContext.startInternal() //
StandardContext(LifecycleBase).start()
ContainerBase$StartChild.call() // child.start(); 其中StandardContext child=StandardEngine[Catalina].StandardHost[localhost].StandardContext[]
ContainerBase$StartChild.call() // 这是个inner class
FutureTask<V>.run()
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker)
ThreadPoolExecutor$Worker.run()
Thread.run()

疑问: 这里为什么没看到engine、host、connector、service的影子

启动 jsp servlet

  • servlet-name: jsp
  • servlet-class: org.apache.jasper.servlet.JspServlet

启动 HelloWorldExample

访问 HelloWorldExample

start log

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
七月 25, 2016 6:56:04 下午 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\java\jdk1.7.0_67\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:/Program Files/java/jdk1.7.0_67/bin/../jre/bin/server;C:/Program Files/java/jdk1.7.0_67/bin/../jre/bin;C:/Program Files/java/jdk1.7.0_67/bin/../jre/lib/amd64;C:\Python27\Lib\site-packages\PyQt4;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\IBM\Infoprint Select;C:\Program Files\java\jdk1.7.0_67\bin;C:\Program Files\java\jdk1.7.0_67\jre\bin;C:\Python27;C:\texlive\2015\bin\win32;C:\Program Files\nodejs\;C:\Program Files\apache-maven-3.3.9\bin;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\TortoiseSVN\bin;C:\Users\IBM_ADMIN\Anaconda2;C:\Users\IBM_ADMIN\Anaconda2\Scripts;C:\Users\IBM_ADMIN\Anaconda2\Library\bin;C:\Users\IBM_ADMIN\AppData\Roaming\npm;C:\Wind\Wind.NET.Client\WindNET\bin\;C:\Program Files\Git\cmd;;E:\software\eclipsejavaee;;.
七月 25, 2016 6:56:04 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:tomcat-example' did not find a matching property.
// 上一行的原因来自于server.xml中的配置
// <Context docBase="tomcat-example" path="/tomcat-example" reloadable="true" source="org.eclipse.jst.jee.server:tomcat-example"/>
// 这个配置是由eclipse自动生成的,不用管
七月 25, 2016 6:56:04 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-bio-8080"]
七月 25, 2016 6:56:04 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["ajp-bio-8009"]
七月 25, 2016 6:56:04 下午 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 1026 ms
七月 25, 2016 6:56:04 下午 org.apache.catalina.core.StandardService startInternal
信息: Starting service Catalina
七月 25, 2016 6:56:04 下午 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/7.0.47
七月 25, 2016 6:56:05 下午 org.apache.catalina.util.SessionIdGenerator createSecureRandom
信息: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [217] milliseconds.
七月 25, 2016 6:56:17 下午 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: contextInitialized()
七月 25, 2016 6:56:17 下午 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextInitialized()
七月 25, 2016 6:56:25 下午 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@44608238')
七月 25, 2016 6:56:25 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
七月 25, 2016 6:56:25 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-bio-8009"]
七月 25, 2016 6:56:25 下午 org.apache.catalina.startup.Catalina start
信息: Server startup in 21375 ms

example项目路径:apache-tomcat-9.0.4\webapps\examples

  1. eclipse

File -> new -> Dynamic Web Project

输入个名字 tomcat-example

  1. 拷贝
1
cp -rf example\*  tomcat-example\WebContent

就能运行了

  1. 但是不能debug,如何debug
1
mv tomcat-example\WebContent\WEB-INF\classes\ tomcat-example\src\

即可

关键词

CDN
网络缓存技术
Cache服务器
网页缓存
数据缓存

百度登录

主页背景图片, Status Code:200 OK (from memory cache)

有些 Status Code:200 OK (from disk cache) (ctrl+f5也是同样的response)

1
Cache-Control:max-age=86400

bluescan

http://9.186.100.11:8080/bluescan/ Status Code:304 Not Modified

ctrl+f5, 变成了 Status Code:200 OK

材料

http://blog.csdn.net/collonn/article/details/5698906
http://www.jianshu.com/p/1361d578035d

https://www.kancloud.cn/digest/dcluster/130514
http://blog.csdn.net/qh_java/article/details/45955923
http://www.cnblogs.com/joeliu/archive/2008/01/10/1033232.html
http://zhanjia.iteye.com/blog/871021

Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的容器也许就不叫jsessionid了。

——————-最新更新——–

Terry_Huang 回复:

  给你举个更生动的例子,以前大学的时候,经常去大卡司去喝奶茶,每喝一杯,都可以得到一个印花(第一次喝的时候他会给你个积分卡片),集齐6个印花之后,就可以免费获得一杯奶茶。这样子,印花的信息是保存在客户的积分卡上,你如果不怀好意的话,就自己搞几个神似的印花去骗奶茶喝吧。哈哈,这样子是不是更符合在客户端端保持状态。而拿银行卡去银行取钱,我们的卡只需要保存一个卡号,更多的信息是保存在服务器中,这样也比较符合服务器端保持状态。

示例

12306登录界面

  1. 首次访问 https://kyfw.12306.cn/otn/

请求1: https://kyfw.12306.cn/otn response返回了Set-Cookie:BIGipServerotn=904921610.50210.0000; path=/
请求2: https://kyfw.12306.cn/otn/ request携带了一个cookie: BIGipServerotn, response返回了:Set-Cookie:JSESSIONID=0A02F035C45CDC859EBDE34EEF3022176D1CAB3240; Path=/otn

浏览器存储了两个cookie: BIGipServerotn, JSESSIONID
后面再访问domain: kyfw.12306.cn默认都会携带这两个cookie吗? 貌似有些不携带

  1. 登陆页面
    https://kyfw.12306.cn/otn/login/init
    请求1:https://kyfw.12306.cn/otn/login/init request携带以上两个cookie,response返回Set-Cookie:__NRF=D448883EA47A42ADFF201315C5A47B59; Path=/otn

请求2: https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&0.5879014782091059 response返回Set-Cookie:current_captcha_type=Z; Path=/
作用获取验证码图片+刷新验证码

请求3: 比较神奇
https://kyfw.12306.cn/otn/resources/js/newpasscode/captcha.png
request header中携带了 Cookie:JSESSIONID=0A02F00DFC2165793ED24D3E6A322D73BB663555CD; __NRF=87982EA902E055A62B34594F412D6FD4; _jc_save_detail=true; _jc_save_fromStation=%u5FB7%u5DDE%2CDZP; _jc_save_toStation=%u5317%u4EAC%2CBJP; _jc_save_fromDate=2017-02-05; _jc_save_toDate=2017-02-03; _jc_save_wfdc_flag=dc; BIGipServerotn=233832970.64545.0000

浏览器存储了四个cookie: BIGipServerotn, JSESSIONID, __NRF, current_captcha_type

  1. 验证码输入错误。

请求1: https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn
Set-Cookie:JSESSIONID=0A01D967C46F93749DA8E343362706EA493AB0274E; Path=/otn
Set-Cookie:BIGipServerotn=1742274826.50210.0000; path=/

请求2:https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&0.8915860204592649
刷新验证码,请求中携带刷新后的cookie。

  1. 登陆成功

浏览器中仍然是4个cookie。Cookie:__NRF=F178222DE155029CE8311D24270DABF5; JSESSIONID=0A01D95CFCA56AD5853ADCBFADD0263D7273CB784F; BIGipServerotn=1557725450.64545.0000; current_captcha_type=Z

实现检查浏览器,发现kyfw.12306.cn包含6个cookie(不包含JSESSIONID)

https://kyfw.12306.cn/otn/

request header:
Cookie:JSESSIONID=0A02F00DFC2165793ED24D3E6A322D73BB663555CD; _jc_save_detail=true; _jc_save_fromStation=%u5FB7%u5DDE%2CDZP; _jc_save_toStation=%u5317%u4EAC%2CBJP; _jc_save_fromDate=2017-02-05; _jc_save_toDate=2017-02-03; _jc_save_wfdc_flag=dc; BIGipServerotn=233832970.64545.0000

response header:

Set-Cookie:__NRF=87982EA902E055A62B34594F412D6FD4; Path=/otn

— 后面再访问,就会看到cookie多了个属性__NRF

Cookie:JSESSIONID=0A02F00DFC2165793ED24D3E6A322D73BB663555CD; __NRF=87982EA902E055A62B34594F412D6FD4; _jc_save_detail=true; _jc_save_fromStation=%u5FB7%u5DDE%2CDZP; _jc_save_toStation=%u5317%u4EAC%2CBJP; _jc_save_fromDate=2017-02-05; _jc_save_toDate=2017-02-03; _jc_save_wfdc_flag=dc; BIGipServerotn=233832970.64545.0000

##
http://localhost:8080/bluescan/

username: “Composer2”,
psw: “1c8bd771b24c16738eb467f35920949c”,

云端评论中心..可以将你对一篇文章的评论存储在disqus的中心,然后通过js脚本调用这些评论.

disqus评论存储在哪?云存储,存在disqus网站,

disqus怎样将评论和相应的页面进行绑定?

为什么加载有问题?被墙了

如何加载disqus评论?

调用api https://disqus.com/api/3.0/discovery/listTopPost.json?

如何导入,导出评论?

如何安装?

说是安装,其实就是把一段js迁入到网页

嵌入到哪?

对于一般的博客来说,评论都是放在文章页面的。嗯。你懂的。 对于 GitHub Page 来说,你可以把上面这段代码,嵌入到你的 layout 里面的 post.html 里面,放在最后就好了

##

需要填写的地方分别是:Site URL,Site Name,Site Shortname。 注意:这3个都是必须要填写的,而且,短域名将会在最后的 install 中使用到。

为什么必填URL?本地双击打开的html不可以评论吗?