• B-S架构

架构的发展

1,c/s架构 (client客户端-server服务端)         (胖客户端:要求客户端运行业务;把业务放到服务器端,则是瘦客户端)         典型的c/s应用:ftp工具、QQ、邮件系统、杀毒软件...

        1.建立在tcp/ip协议之上,有自己的通信规则(建立业务) 

        2.需要相互配合才能完成一个完整业务逻辑

        3.允许多个客户端程序同时接入一个server程序(并发) 

        4.每一个client(机器)都必须安装客户软件

        5.修改了server程序,通常client程序都要修改(升级) 

优点:利用客户端的计算能力,分担服务器的负荷(大型网络游戏就利用这点) 

缺点:用户必须安装客户端程序;客户端需要升级(麻烦) 

2,b/s架构 (browser - web server(cluster集群))         (极瘦客户端:最低限度地减少客户端程序,只需要browser(浏览器))        
1.基于http协议(应用层) 

        2.几乎所有的业务逻辑处理都在server完成

        3.支持并发

        4.client要求很少,只需要安装browser(浏览器) 

        5.修改server之后,client不需要任何变化

        6.server端开发技术:html/js,xhtml,... php,asp,jsp,servlet

缺点:所有业务都在服务器端完成,服务器负荷大。

优点:支持高并发访问;不需另外安装软件(只需浏览器),免去更新的麻烦。

关于web中常见的名词或者概念,在我前面的博客里面有整理到,这里只是大致的罗列下复习一下。



  • 开发一个静态的Web应用

1,下载一个tomcat服务器

2,web服务器-Tomcat的启动和配置,运行新版本的(5之后)tomcat只需要配置上JAVA_HOME就可以。

    先进入Tomcat主目录下的bin目录      // %catalina_home%/bin

    window平台:启动---startup.bat               关闭---shutdown.bat

    Linux平台:    启动---startup.sh               关闭---shutdown.sh 或 Ctrl+C

    测试: 打开浏览器,访问 Tomcat 首页:http://localhost:8080 或者 http://127.0.0.1:8080/

    获取进程Id强行杀死tomcat进程:

       ps ef|grep tomcat ---查看tomcat的进程id

       kill -9 tomcat进程Id号 --- 强行杀死tomcat进程

3,介绍Web应用的结构,严格定义为两部分:

    ① Web应用的根目录下有一个特定的子目录称为WEB-INF,其中包含不能被客户访问的专用Web应用程序软件, 包括Servlet类文件、部署描述符web.xml、外部库以及其他任何由此应用程序使用的专用文件。

    ② 所有位于WEB-INF之外的文件都被看作是公共的,它们可以从客户端被访问。资源包括HTML页面、JSP页面和图像等。

    web.xml的模板(一个web.xml中可以配置多个Servlet):

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>servlet的名字1</servlet-name> //servlet的逻辑名
<servlet-class>servlet类全名1</servlet-class> //类的完全限定名
</servlet>
<servlet>
<servlet-name>servlet的名字2</servlet-name>
<servlet-class>servlet类全名2</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>servlet的名字1</servlet-name> //要和servlet标签中的相同
<url-pattern>指定servlet相对于应用目录的路径</url-pattern> //servlet的访问路径
</servlet-mapping>
<servlet-mapping>
<servlet-name>servlet的名字2</servlet-name>
<url-pattern>指定servlet相对于应用目录的路径</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>//指定默认的欢迎页面
</welcome-file-list>
</web-app>
  • Web服务器的一些特点  

什么是静态内容?什么是动态内容?

静态:返回页面每个客户端都相同。  动态:各个客户端的页面各不相同。产生动态内容的Web辅助应用:CGI & Servlet

    

CGI(Common Gateway Interface): 可以产生动态内容,跨语言(C/C++, Perl, python...) 

1.本身是一个进程(数据共享,跨进程调用) --性能较差

2.可移植性很差(本地语言) 

3.安全性差--可以访问本地的操作系统,容易受黑客攻击

web server / servlet container

1.性能好 --多线程(而不是进程) 

2.可移植性 --相对好

3.安全性

  • Http基础

HTTP(Hyper Text Transfer Protocol)是超文本传输协议的缩写,它用于传送 WWW 方式的数据。  HTTP 协议采用了请求/响应模型。基于 TCP/IP 之上的协议,在 Web 上广泛使用。无状态。  如果来自服务器的响应是 html 页面,那么 html 内容会嵌入到 Http 响应中。  Http 会话:是一个简单的请求-响应序列。

1)请求响应模型

    请求的关键要素:1.http方法(要完成的动作) 2.要访问的页面(URL请求) 3.表单参数

    响应的关键要素:1.状态码(请求是否成功) 2.内容类型(txt,img,html等) 3.返回内容(具体资源:html,图片等) 

2)URL的分析

    URL(Uniform Resoure Locator)统一资源定位器。Web 上的每一个资源都有唯一的地址,采用的就是 url 格式

3)使用Http Monitor截获http的请求与响应信息

    Http 请求方法包括:Get()方法;Post()方法; 其他方法:Head, Trace, Put, Delete, Connect 等

    Get()方法: Http 最简单的方法,其最主要的任务:从服务器上获取资源

    Post()方法:更强大的请求方法,不仅可以请求资源,还可以向服务器发送表单数据

4)分析http请求的信息

    客户端向服务器发送一个请求,请求头包含:1.请求的方法; 2.URI; 3.协议版本; 4.以及包含请求修饰符; 5.客户信息和内容的类似于 MIME 的消息结构

5)分析http响应的信息。截获内容:

HTTP/1.1 200 OK      // HTTP/1.1 是web服务器使用的版本;200 是状态码;OK 是状态码的文本版本
ETag: W/"472-1198101802343"
Last-Modified: Wed, 19 Dec 2007 22:03:22 GMT
Content-Type: text/html // MIME类型:告诉浏览器所要接收的是哪一类型的数据。以供浏览器显示。
Content-Length: 472
Date: Wed, 19 Dec 2007 22:05:44 GMT
Server: Apache-Coyote/1.1
//以上是Http响应的首部
//响应体中包含了Html以及其他要显示的内容
<html><head><title>User Login</title></head>
<body><center>……</center></body></html>

       

  • Http 响应状态码分析(具体代码含义参看 http 代码对照表):

1xx:信息响应类,表示接收到请求并且继续处理

        2xx:处理成功响应类,表示动作被成功接收、理解和接受

        3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理

        4xx:客户端错误,客户请求包含语法错误或者是不能正确执行。 如:404——无法找到,表示无法找到指定位置的资源。

        5xx:服务端错误,服务器不能正确执行一个正确的请求

Web应用基础的更多相关文章

  1. Web编程基础--HTML、CSS、JavaScript 学习之课程作业“仿360极速浏览器新标签页”

    Web编程基础--HTML.CSS.JavaScript 学习之课程作业"仿360极速浏览器新标签页" 背景: 作为一个中专网站建设出身,之前总是做静态的HTML+CSS+DIV没 ...

  2. web前端基础知识及快速入门指南

    web前端基础知识及快速入门指南 做前端开发有几个月了,虽然说是几个月,但是中间断断续续的上课.考试以及其它杂七杂八的事情,到现在居然一直感觉自己虽然很多前端的知识很眼熟,却也感觉自己貌似也知识在门口 ...

  3. [置顶] 提高生产力:Web开发基础平台WebCommon的设计和实现

    Web开发中,存在着各种各样的重复性的工作.为了提高开发效率,不在当码农,我在思考和实践如何搭建一个Web开发的基础平台. Web开发基础平台的目标和功能 1.提供一套基础的开发环境,整合了常用的框架 ...

  4. 从头编写asp.net core 2.0 web api 基础框架 (5) + 使用Identity Server 4建立Authorization Server (7) 可运行前后台源码

    前台使用angular 5, 后台是asp.net core 2.0 web api + identity server 4. 从头编写asp.net core 2.0 web api 基础框架: 第 ...

  5. 20155324《网络对抗技术》web安全基础实践

    20155324<网络对抗技术>web安全基础实践 实验内容 使用webgoat进行XSS攻击.CSRF攻击.SQL注入 实验问答 SQL注入攻击原理,如何防御 ①SQL注入攻击是攻击者在 ...

  6. #WEB安全基础 : HTML/CSS | 文章索引

    本系列讲解WEB安全所需要的HTML和CSS #WEB安全基础 : HTML/CSS | 0x0 我的第一个网页 #WEB安全基础 : HTML/CSS | 0x1初识CSS #WEB安全基础 : H ...

  7. #WEB安全基础 : HTTP协议 | 文章索引

    本系列讲解WEB安全所需要的HTTP协议 #WEB安全基础 : HTTP协议 | 0x0 TCP/IP四层结构 #WEB安全基础 : HTTP协议 | 0x1 TCP/IP通信 #WEB安全基础 : ...

  8. 2017-2018-2 20155228 《网络对抗技术》 实验九:Web安全基础

    2017-2018-2 20155228 <网络对抗技术> 实验九:Web安全基础 1. 实践内容 1.1 标理解常用网络攻击技术的基本原理 1.2 在Webgoat实验环境下实践相关实验 ...

  9. 20155208徐子涵《网络对抗》Exp9 Web安全基础

    20155208徐子涵<网络对抗>Exp9 Web安全基础 实验要求 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 最后一次了,没有选择尝试免考项目 ...

  10. 20155312 张竞予 Exp9 Web安全基础

    Exp9 Web安全基础 目录 基础问题回答 (1)SQL注入攻击原理,如何防御 (2)XSS攻击的原理,如何防御 (3)CSRF攻击原理,如何防御 实践过程记录 WebGoat准备工作 1.XSS攻 ...

随机推荐

  1. 表单验证控件Verify.js

    自己工作常用到表单录入验证,就顺手写了一个验证控件,刚开始写得很烂.多年后翻出来,又优化了一下,增加了一些功能.拿出来分享分享. 主要功能就是表单的录入验证. * 1.当录入框必填时,在控件后生成红色 ...

  2. python_IO编程

    本篇文章将介绍python里面的I/O编程.更多内容请参考:python学习指南 I/O编程 读写文件时最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们必须了解 ...

  3. [整]swp文件的处理

    报错 vim非正常关闭,再下次编辑打开文件时均为显示如下警告信息: Swap file "test.xml.swp" already exists! [O]pen Read-Onl ...

  4. 单张滑动tab 组件

    /* CSS重置 * */ body, ul, ol { margin: 0px; padding: 0px; } .flash { width: 300px; height: 420px; posi ...

  5. vue路由对象($route)参数简介

    路由对象在使用了 vue-router 的应用中,路由对象会被注入每个组件中,赋值为 this.$route ,并且当路由切换时,路由对象会被更新. so , 路由对象暴露了以下属性: 1.$rout ...

  6. PIL遇到问题解决

    PIL 全称:Pillow 在使用PIL4.2.1版本读取jpeg文件时,报cannot identify image file,去github源查找原因:https://github.com/pyt ...

  7. 如何给虚拟主机安装phpMyAdmin

    很多虚拟主机没有phpMyAdmin,例如阿里云的云虚拟主机默认的数据库管理工具是DMS,这样好多朋友管理数据库时会觉得不方便.phpMyAdmin是比较大众和常用的Mysql数据库管理软件,我们可以 ...

  8. Java技术分享:如何编写servlet程序

    身为计算机专业的我,从接触java至今,已经有七年之久,从最开始的小白到现在的大白,这是一个漫长而曲折的历程. 大学刚接触Java这个学科时,一点儿都不理解java是要干嘛的,只知道学起来肯定不容易, ...

  9. 改进ban冒泡排序

    设置一标志性变量pos,用于记录每趟排序中最后一次进行交换的位置.由于pos位置之后的记录均已交换到位,故在进行下一趟排序时只要扫描到pos位置即可. //改进后算法如下: function bubb ...

  10. TypeScript笔记 5--变量声明(解构和展开)

    解构是什么 解构(destructuring assignment)是一种表达式,将数组或者对象中的数据赋给另一变量. 在开发过程中,我们经常遇到这样问题,需要将对象某个属性的值赋给其它两个变量.代码 ...