2017-8-29 浅析静态页面和动态页面

##浅析静态页面和动态页面

一、静态 web 页面:

1、在静态 Web 程序中,客户端使用 Web 浏览器(IE、FireFox 等)经过网络(Network)连接到服务器上,使用 HTTP 协议发起一个请求(Request),告诉服务器我现在需要得到哪个页面,所有的请求交给 Web 服务器,之后 WEB 服务器根据用户的需要,从文件系统(存放了所有静态页面的磁盘)取出内容。之后通过 Web 服务器返回给客户端,客户端接收到内容之后经过浏览器渲染解析,得到显示的效果。
2、为了让静态 web 页面显示更加好看,使用 javascript/VBScript/ajax(AJAX 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。)但是这些特效都是在客户端上借助于浏览器展现给用户的,所以在服务器上本身并没有任何的变化。
名称
3、静态 web 无法连接数据库;

4、静态 web 资源开发技术:HTML;

5、由于现在的 web 页面中,大量使用 JS,导致浏览器打开页面,就会占用大量的内存,服务端的压力是减轻了,但压力转移到了客户端。

二、动态 web 页面:

动态 WEB 中,程序依然使用客户端和服务端,客户端依然使用浏览器(IE、FireFox 等),通过网络(Network)连接到服务器上,使用 HTTP 协议发起请求(Request),现在的所有请求都先经过一个 WEB Server 来处理。

如果客户端请求的是静态资源(.htm 或者是.htm),则将请求直接转交给 WEB 服务器,之后 WEB 服务器从文件系统中取出内容,发送回客户端浏览器进行解析执行。

如果客户端请求的是动态资源(.jsp、.asp/.aspx、.php),则先将请求转交给 WEB Container(WEB 容器),在 WEB Container 中连接数据库,从数据库中取出数据等一系列操作后动态拼凑页面的展示内容,拼凑页面的展示内容后,把所有的展示内容交给 WEB 服务器,之后通过 WEB 服务器将内容发送回客户端浏览器进行解析执行。
名称
进一步深入分析动态 web 的访问过程:浏览器访问 web 时,看似是直接访问的 jsp 页面,其实是,最先到达的地方是服务器,服务器创建好 req 和 resp 对象后再给 jsp 页面使用。在 jsp 中完成设置字符集和取得表单参数后再调用 servlet,完成业务处理。然后返回到 jsp,jsp 就会生成相应的 html 页面。该页面会返回到服务器,再由服务器,通过 response 对象返回给客户端。
名称
为什么需要 web 服务器?(web server)

1)不管什么 web 资源,想被远程计算机访问,都必须有一个与之对应的网络通信程序,当用户来访问时,这个网络通信程序读取 web 资源数据,并把数据发送给来访者。

2)WEB 服务器就是这样一个程序,它用于完成底层网络通迅,处理 http 协议。使用这些服务器,We 应用的开发者只需要关注 web 资源怎么编写,而不需要关心资源如何发送到客户端手中,从而极大的减轻了开发者的开发工作量。

常用动态 web 资源开发技术:JSP/Servlet、ASP、PHP 等。

三、关于两者区别的简单直接的描述

1、静态页面就是设计者把页面上所有东西都设定好、做死了,然后放上去,不管是谁在任何时候看到的页面内容都是一样的,一成不变(除非手动修改页面内容)。静态 html 页面文件,可以直接用本地的浏览器打开。比如:file:///Users/Phil/Documents/DevOps/HBuilderProjects/testJSP/index.html。

2、动态页面的内容一般都是依靠服务器端的程序来生成的,不同人、不同时候访问页面,显示的内容都可能不同。网页设计者在写好服务器端的页面程序后,不需要手工控制,页面内容会按照页面程序的安排自动更改变换。

3、html 是 w3c 规范的一种网页书写格式,是一种统一协议语言,静态网页。我们上网看的网页都是大部分都是基于 html 语言的。jsp 是一种基于动态语言,jsp 可以实现 html 的所有任务,4、HTML(Hypertext Markup Language)文本标记语言,它是静态页面,和 JavaScript 一样解释性语言,为什么说是解释性语言呢?因为,只要你有一个浏览器那么它就可以正常显示出来,而不需要指定的编译工具,只需在 TXT 文档中写上 HTML 标记就可以正常显示。

JSP(Java Server Page)是 Java 服务端的页面,所以它是动态的,它是需要经过 JDK 编译后把内容发给客户端去显示,我们都知道,Java 文件编译后会产生一个 class 文件,最终执行的就是这个 class 文件,5、JSP 的前身是 servlet;6、html 和 jsp 的表头不一样,这个是 JSP 的头“ <%@ page language=“java” import=“java.util.*” pageEncoding=“gbk”%>”在表头中有编码格式和倒入包等。也是很好区分的,在 jsp 中用<%%>就可以写 Java 代码了,而 html 没有<%%>。

7、,不认识 jsp 或者 asp 什么什么的,但是有时候界面需要逻辑控制,所以我们就用相应的技术来实现,这样比较方便。而 jsp 在后台通过服务器解析为相应的 html,然后在供浏览器识别显示。例如

<%

if(flag == a){

a

}else {

b

}

%>

服务器在读取到这段代码后,根据相应的业务逻辑,编译成相应的 servlet,再由 servlet 输出到页面(输出的就是 html)。
四、实验测试

1、在 HBuilder 中创建 jsp 页面,其内置的 web 静态服务器不能解析 jsp 表头,只能作为文本显示输出,但是可以解析其中的 html 部分。浏览器不能直接打开 jsp 文件。jsp 页面如果想正确的显示,需要 web 容器进行解析。
名称
在 IntelliJ 中创建 web application,需要启动 tomcat,才能运行 jsp,可以顺利解析 jsp 的表头。
名称

MyBatis源码粗略分析

MyBatis用了一些时间了,只是习惯性的操作,往往知其然不知其所以然,所以花了些时间研究了下源码。
enter description here

工作原理

1 使用连接池
2 统一sql 存取xml
3 参数封装和结果映射
4 sql语句的复用封装 

执行流程

1 页面发送请求到web.xml
2 由springMvc去找handler
3 前端控制器调用适配器执行handler
4 视图渲染展示

带了几个问题进行反推源码:

  • 输入流的关闭问题:
    enter description here

此处并未关闭流,若不是自动关闭流反复调用则会造成资源浪费,直到系统崩溃。
分析build调用的实现类
enter description here
关于流部分的代码
enter description here
所以调用build方法会自动关闭流。

  • SqlSession的创建-给一堆成员变量赋初值
    enter description here

SqlSession对象的创建,需要使用SqlSessionFactory接口对象的OpenSession()方法。
SqlSessionFactor接口的实现类为DefaultSqlSessionFactory。
enter description here
打开openSession()方法的源码:
enter description here
打开openSessionFromDataSource(configuration.getDefaultExecutorType(),null,false),也可以设为true自动提交事务。
enter description here
new 的DefaultSqlSession实际上是对其成员变量进行初始化
enter description here
即内存的数据与数据库里的数据不一致为脏,默认一致。

  • 增删改–本质上都是update
    enter description here
    enter description here
    enter description here
    enter description here
    此处insert,update,delete统一调用update
  • SqlSession的提交–commit()
    enter description here

提交完后数据dirty恢 复为false
为什么SqlSession关闭了,事务不用回滚了?
有两种可能性:
1.做了提交
sqlSession.commit()后
数据dirty为false;
事务回滚不执行
2.没做提交
写不进数据库
数据dirty值为true;
事务回滚自动执行

bash学习

命令与文件补全功能: ([tab] 按键的好处)
还记得[tab] 这个按键吗?这个按键的功能就是在 bash 里头才有的啦!常常在 bash 环境中使用 [tab] 是个很棒的习惯喔!因为至少可以让你 1)少打很多字; 2)确定输入的数据是正确的! 使用 [tab] 按键的时机依据 [tab] 接在命令后或参数后而有所不同。我们再复习一次:
[Tab] 接在一串命令的第一个字的后面,则为命令补全;
[Tab] 接在一串命令的第二个字以后时,则为『文件补齐』!
所以说,如果我想要知道我的环境中,所有可以运行的命令有几个? 就直接在 bash 的提示字符后面连续按两次 [tab] 按键就能够显示所有的可运行命令了。 那如果想要知道系统当中所有以 c 为开头的命令呢?就按下『 c[tab][tab] 』就好啦! ^_^
是的!真的是很方便的功能,所以,有事没事,在 bash shell 底下,多按几次 [tab] 是一个不错的习惯啦!

Read More