第一章 Web应用程序开发基础

一、HTTP协议工作机制

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它是一种主流B/S架构中应用的通信协议。具有以下特点:
1、无状态
  服务端不会记录客户端每次提交的请求,服务器一旦相应客户端之后,就会结束本次的通信过程。客户端下一次的请求是一个新的 连接,和上一次通信没有任何关系。
2、简单灵活
  HTTP是基于请求(request)和响应(response)的模型
3、支持客户端与服务端
  支持主流的B/S架构的通信以及C/S架构的通信。
  注意:C/S架构可选的协议有多种,例如:TCP/IP,UDP,HTTP
?  而B/S架构通常只支持HTTP协议

HTTP协议的工作原理

  • 四个步骤

  • 工作原理

  (1)连接:Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。( 客户端-----通过socket建立连接-----服务器)
  (2)请求:Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:GET 路径/文件名 HTTP/1。其中,文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。
  (3)应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。例:假设客户机与www.mycompany.com:8080/mydir/index.html建立了连接,就会发送GET命令:GET /mydir/index.html HTTP/1.0。主机名为www.mycompany.com的Web服务器从它的文档空间中搜索子目录mydir的文件index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。为了告知 Web浏览器传送内容的类型,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。其中,常用的HTTP头信息如下。
  HTTP 1.0 200 Ok:这是Web服务器应答的第一行,列出服务器正在运行的HTTP版本号和应答代码。代码"200 OK"表示请求完成。
  MIME_Version:1.0:它指示MIME类型的版本。
  content_type:类型:这个头信息非常重要,它指示HTTP体信息的MIME类型。如:content_type:text/html指示传送的数据是HTML文档。
  content_length:长度值:它指示HTTP体信息的长度(以字节为单位)。
  (4)关闭连接 :当应答结束后,Web浏览器与Web服务器必须断开,以保证其他Web浏览器能够与Web服务器建立连接。

客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例

http的特点

1)支持客户/服务器模式。(c/s模式)
2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

解决http的无状态的问题:cookie和session

  • Cookie

  两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session
  由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。

  Cookie是通过客户端保持状态的解决方案。从定义上来说,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。
  cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。
会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘中的cookie可以在不同浏览器间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式

  Cookie支持跨域名访问,例如将domain属性设置为“.helloweenvsfei.com”,则以“.helloweenvsfei.com”为后缀的所有域名均可以访问该Cookie。跨域名Cookie现在被广泛用在网络中,例如Google、Baidu、Sina等。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。

生成Cookie对象:

java.util.Date date = new java.util.Date();
// 前面一个参数是key,后面一个参数是value值。
Cookie c = new Cookie("lastVisited",date.toString());
// 设定Cookie的有效期,单位为毫秒
c.setMaxAge(60*60*24);
// Cookie的路径与域名:
c.setPath("/");
c.setDomain(".v512.com");
// 发送Cookie对象:
response.addCookie(c);

读取或设置Cookie:

 1 // 读取Cookie
 2 Cookie [] cookies=request.getCookies();
 3 Cookie c = null;
 4 if(cookies!= null) {
 5     for(int i=0;i<cookies.length;i++) {
 6          c = cookies[i];
 7          out.println("cookie name:"+c.getName()+"<br>");
 8          out.println("cookie value:"+c.getValue()+"<br>");
 9      }
10 }
11
12 // 修改Cookie:
13 Cookie [] cookies=request.getCookies();
14 Cookie c = null;
15 }
16
17 //删除Cookie:即把Cookie的失效时间设置为0即可。
18 c.setMaxAge(0);
19
20 //Cookie文本信息的大小和数量有限制。以明文保存,没有任何加密措施。
21 for(int i=0;i<cookies.length;i++)
22 {
23          c = cookies[i];
24          if(c.getName().equals("lastVisited"))
25          {
26              c.setValue("2010-10-1");
27              c.setMaxAge(6000);
28              response.addCookie(c);
29          }
30 } 
  • session

  当然还是在服务器端程序运行的过程中创建的,不同语言实现的应用程序有不同创建Session的方法,而在Java中是通过调用HttpServletRequest的getSession方法(使用true作为参数)创建的。在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。

创建或者获取session:

 1 package xdp.gacl.session;
 2
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 import javax.servlet.http.HttpSession;
 9
10 public class SessionDemo1 extends HttpServlet {
11
12     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
13         response.setCharacterEncoding("UTF=8");
14         response.setContentType("text/html;charset=UTF-8");
15         // 使用request对象的getSession()获取session,如果session不存在则创建一个
16         HttpSession session = request.getSession();
17         // 或 HttpSession session = request.getSession(boolean);
18
19         //将数据存储到session中 session.setAttribute("key", 值对象);
20         session.setAttribute("userId", "100001");
21
22         // 获取session的Id
23         String sessionId = session.getId();
24
25         // 获取session值 对象类型 obj = (对象类型)session.getAttribute("key");
26         String name = (String)session.getAttribute("userId");
27
28         // 删除session 指定属性健:
29         session.removeAttribute("userId");
30
31         // 判断session是不是新创建的
32         if (session.isNew()) {
33             response.getWriter().print("session创建成功,session的id是:"+sessionId);
34         }else {
35             response.getWriter().print("服务器已经存在该session了,session的id是:"+sessionId);
36         }
37
38         // 清除所有的session,使当前 session 完全失效:
39         session.invalidate();
40     }
41
42     public void doPost(HttpServletRequest request, HttpServletResponse response)
43             throws ServletException, IOException {
44         doGet(request, response);
45     }
46 }

session超时周期设置:

1.Tomcat 安装位置 conf/web.xml :

<session-config>
    <!-- 设置消失时长3分钟 -->
    <session-timeout>30</session-timeout>
</session-config>

2. Tomcat 安装位置 conf/server.xml:

<!-- defaultSessionTimeOut="3600"  单位:秒-->
<Context path="/test" docBase="/test"
  defaultSessionTimeOut="3600" isWARExpanded="true"
  isWARValidated="false" isInvokerEnabled="true"
  isWorkDirPersistent="false"/>

3、Java 代码设置:

//单位:秒
HttpSession session = request.getSession();
session.setMaxInactiveInterval(1200);

其他说明:
1. session 过期情况:

(1)、客户端浏览器关闭:
(2)、session 会话过期;
(3)、客户端会话调用了 .invalidate();

2. 浏览器关闭与session是否还在;
  当客户端浏览器关闭后,session 在服务端还是会存在一定时间的,只是当浏览器器再次打开时,就会生成一个新的 session ,浏览器通过生成的 sessionid 属性来 匹配服务端的 session; 那上次的session 虽然还在,但是就访问不到了;
3. <% @ page session="false" %> 是什么情况?:
  这句话的意思是,当前不能使用 session, 但是 页面 session 还是可以创建的;
4. session 在什么时候 被创建:
  在 程序 调用 HttpServletRequest.getSession(true) 时创建;如果 页面没有使用 <%@ page session="false"%> 时,在 jsp 页面编译成 Servlet 时,会自动 加上 HttpSession session = HttpServletRequest.getSession(true);

  • cookie 和session 的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session,将登陆信息等重要信息存放为SESSION,其他信息如果需要保留,可以放在COOKIE中
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE
4、单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
5.session需要借助cookie才能正常工作。如果客户端完全禁止cookie,session将失效。
6.session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。
7.session调用了 session.invalidate()方法或者前后两次请求超出了session指定的生命周期时间,Session会销毁,否则在用户会话结束后就会关闭了。但若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。保存在硬盘里的,可以长期保存
8.session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。
9.Session则不会支持跨域名访问。Session仅在他所在的域名内有效。

二、Web应用程序及其优点

应用程序类型

1、C/S类型应用程序:Client客户端/Server服务器
  客户端必须安装专门的一个桌面软件才能使用。
  优点:速度快,安全性高,客户端比较强大
  缺点:每台客户端计算机都要下载安装升级,部署维护困难
  例如:QQ,各种网络游戏
2、B/S类型应用程序:Browser浏览器/Server服务器
  客户端不用安装特定的软件,只要通过浏览器打开就可使用。
  优点:维护容易,只需要维护服务器
  缺点:速度慢,安全性相对较低,客户端较弱
  例如:WebQQ,各大网站,各种网页游戏

什么是Web应用程序?

  Web应用程序是一种可以通过Web访问的应用程序。Web应用程序的一个最大好处就是用户很容易访问应用程序。用户只要有浏览器即可,不需要再安装其他软件。web应用程序举例:淘宝、天猫、新浪、搜狐。web应用程序开发,是目前软件开发领域的三大方向之一。

web应用程序的优缺点:

优点

  • 网络应用程序不需要任何复杂的“展开”过程,你所需要的只是一个适用的浏览器;
  • 网络应用程序通常耗费很少的用户硬盘空间,或者一点都不耗费;
  • 它们不需要更新,因为所有新的特性都在服务器上执行,从而自动传达到用户端;
  • 网络应用程序和服务器端的网络产品都很容易结合,如email功能和搜索功能;
  • 因为它们在网络浏览器窗口中运行,所以大多数情况下它们是通过跨平台使用的 (例如Windows,Mac,Linux等等)

缺点

  • 网络应用程序强调浏览器的适用性。如果浏览器方没有提供特定的功能,或者弃用特定的平台或操作系统版本(导致不适用),就会影响大量用户;
  • 网络应用依靠互联网远程服务器端的应用文件。因此,当连接出问题时,应用将不能正常使用。但是,如果使用HTML5 API,这些应用就可以被下载安装而可离线使用。Google Gears,就是一个好例子;
  • 许多网络应用程序不是开源的,只能依赖第三方提供的服务,因此不能针对用户定制化、个性化,而且大多数情况下用户不能离线使用,因而损失了很多灵活性;
  • 它们完全依赖应用服务商的可及性。如果公司倒闭,服务器停止使用,用户也无法追索以前的资料。对比而看,即使软件制造商倒闭了,传统的安装软件也可以继续运行,尽管不能再更新或有其他用户服务;
  • 相似地,提供方公司对软件和其功能有了更大的控制权。只要他们愿意就能为软件添加新特性,即使用户想等bugs先被解决再更新。跳过较差的软件版本也不可能了。公司可以强加不受欢迎的特性给用户,也可以随意减少带宽来削减开支。当然,公司会尽量地讨用户欢喜——只在有竞争者提供更好的服务与方便的转接性的情况下。否则用户别无选择,只能默默承受;
  • 公司理论上可以检索任何的用户行为。这有可能引起隐私安全问题。

三、Web应用程序的基本结构

一个Web应用程序基本上由以下项目组成:

1.静态资源(HTML,CSS,图片,声音等)
2.Servlet
3.JSP
4.自定义类
5.工具类
6.部署描述文件(web.xml等)、设置信息(Annotation等)

  Web应用程序目录结构必须符合规范。例如,如果一个应用程序的环境路径(Context path)是/HelloServlet,则所有的资源项目必须以/HelloServlet为根目录依规定结构摆放。基本上根目录中的资源可以直接下载,若index.html位于/HelloServlet下,则可以直接以/HelloServlet/index.html来取得。
  Web应用程序存在一个特殊的/WEB-INF子目录,此目录中存在的资源不会被列入应用程序根目录中可直接访问的项。即,客户端(如Browser)不可以直接请求/WEB-INF中的资源(直接在网址上指明访问/WEB-INF),否则就是404 Not Found的错误结果。/WEB-INF中的资源项目有着一定的名称与结构。

(1)/WEB-INF/web.xml 是部署描述文件
(2)/WEB-INF/classes 用来放置应用程序用到的自定义类(.class),必须包括包(package)结构。
(3)/WEB-INF/lib 用来放置应用程序用到的JAR文件。

四、Tomcat Web服务器的安装与配置

1、先下载适应于64为Windows操作系统的Tomcat服务器
  地址:http://tomcat.apache.org/
2、解压tomcat下载压缩包
3、配置Tomcat服务器的运行环境和Java环境。

我是通过写bat批处理文件实现,不需要配置Windows系统的环境变量,只需要简单的写一个bat批处理文件,点击运行后即可启动Tomcat服务器,具体的启动Tomcat服务器.bat的代码如下:

rem tomcat安装bin目录
set path=D:\code\apache-tomcat\bin
rem JDK安装跟目录
set JAVA_HOME=C:\program\java\jdk
rem tomcat安装根目录
set CATALINA_HOME=D:\code\apache-tomcat
rem tomcat startup.bat文件路径
start D:\code\apache-tomcat\bin\startup.bat

  如果配置正确,在浏览器输入 locahost:8080即可打开Tom猫的欢迎页面。
  现在如果想换掉自己写的欢迎页面,比如想在浏览器打开locahost:8080地址后,打开一个叫做 zhangphil.html文件,那么需要修改apache-tomcat\conf\web.xml文件,找到web.xml里面的定义welcome-file-list,原始的定义是这样的:

  通过locahost:8080默认打开的就是welcome-file-list下面定义的文件,Tomcat服务器会自动从上往下寻找列表中的文件,找到就加载。可以在index.html前添加 <welcome-file>welcome.jsp</welcome-file>实现默认的打开自己写的welcome.jsp文件:

    <welcome-file-list>
        <welcome-file>welcome.jsp</welcome-file>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list> 

那welcome.jsp应该放在哪里呢?是在ROOT下面,即apache-tomcat\webapps\ROOT:

修改好web.xml,把welcome.jsp放到ROOT下面,此时再打开http://localhost:8086/后:

五、在eclipse中配置Tomcat、JRE

  • 配置JRE

  1、配置JRE环境,通俗点讲就是添加一个不同版本的jdk:window-->preferences-->java-->installed jre

  2.点击添加按钮

  

  3、选择一个本机正确的jdk路径   name和下面lib加载都是系统自动完成的  选择好路径后  点 finish就ok了

  •  配置tomcat

  1、window-->preferences-->server-->runtime envrionments

  2、选择一个tomcat eclipse版本不同 ,可选择tomcat版本的也不一样  这里选择8.0

2、配置tomcat目录,选择jdk版本

  

  3、name 系统自动生成 选择对应版本的tomcat6.0选择1.6,7.0选择1.7,8.0选择1.8不然容易出问题,点击 finish就ok了

原文地址:https://www.cnblogs.com/BalmyLee/p/10716132.html

时间: 2024-08-26 05:34:02

第一章 Web应用程序开发基础的相关文章

第一章 Web应用程序简介

1.1 Web应用程序基础知识 URL.URN与URI URL:Uniform Resource Locator URN:Uniform Resource Name URI:Uniform Resource Identifier HTTP协议指架构在TCP/IP之上应用层的一种协议.通信协议基本就是两台计算机间对谈沟通的方式.按不同的联机方式与所使用的网络服务而定,会有不同的通信协议.如,发送信件是会用SMTP(Simple Mail Transfer Protocol),传输文件时用FTP,下

第一章 Web MVC简介 —— SpringMVC

第一章 Web MVC简介 -- SpringMVC Web MVC简介 1.1.Web开发中的请求-响应模型: 在Web世界里,具体步骤如下: 1.  Web浏览器(如IE)发起请求,如访问http://sishuok.com 2.  Web服务器(如Tomcat)接收请求,处理请求(比如用户新增,则将把用户保存一下),最后产生响应(一般为html). 3.web服务器处理完成后,返回内容给web客户端(一般就是我们的浏览器),客户端对接收的内容进行处理(如web浏览器将会对接收到的html内

软件构造 第一章第二节 软件开发的质量属性

?软件构造 第一章第二节 软件开发的质量属性 1.软件系统质量指标 External quality factors affect users 外部质量因素影响用户 Internal quality factors affect the software itself and its developers 内部质量因素影响软件本身和它的开发者 External quality results from internal quality 外部质量取决于内部质量 外部属性: 正确性:按照预先定义的"

微信小程序开发基础(一)「配置」与「逻辑层」

微信小程序作为微信生态重要的一环,在实际生活.工作.商业中的应用越来越广泛.想学习微信小程序开发的朋友也越来越多,本文将在小程序框架的基础上就微信小程序项目开发所必需的基础知识及语法特点进行了详细总结和阐述,包括配置.函数.语法.事件及其处理.数据绑定.模块.样式等.想开发小程序,这些内容是必须掌握的. 全文知识结构预览: 一.程序配置: 1.全局配置:2.页面配置 二.逻辑层: 1.程序注册:App()方法:2.页面注册:Page()方法:3.模块与调用:4.微信原生API 三.视图层(将在单

Web应用程序开发,基于Ajax技术的JavaScript树形控件

感谢http://www.cnblogs.com/dgrew/p/3181769.html#undefined 在Web应用程序开发领域,基于Ajax技术的JavaScript树形控件已经被广泛使用,它用来在Html页面上展现具有层次结构的数据项. 目前市场上常见的JavaScript框架及组件库中均包含自己的树形控件,例如jQuery.Dojo.YUI.Ext JS等,还有一些独立的树形控件,例如dhtmlxTree等,这些树形控件完美的解决了层次数据的展示问题. 展示离不开数据,树形控件主要

ASP.NET Core Web 应用程序开发期间部署到IIS自定义主机域名并附加到进程调试

原文:ASP.NET Core Web 应用程序开发期间部署到IIS自定义主机域名并附加到进程调试 想必大家之前在进行ASP.NET Web 应用程序开发期间都有用到过将我们的网站部署到IIS自定义主机域名并附加到进程进行调试. 那我们的ASP.NET Core Web 应用程序又是如何部署到我们的IIS上面进行调试的呢,接下来我们来简单介绍下: 一.安装IIS所需的Host扩展(Windows Server Hosting) 下载地址:https://dotnet.microsoft.com/

Go Web 编程 第一章 Web相关概念

第一章 Go与Web应用 Go学习群:415660935 1.1 Web应用 在计算机的世界里,应用(application)是一个与用户进行交互,并完成用户特定任务的软件程序.而Web应用则是部署在Web之上,并通过Web来使用的软件程序.一程序满足以下两个条件,我们可以把它看做是一个Web应用: 1.这个程序必须向发送命令请求的客户端返回HTML,而客户端则会向用户展示渲染后的HTML. 2.这个程序在向客户端传输数据时必须使用HTTP协议. 在这个定义的基础上,如果一个程序不是向用户渲染并

Prism4 文档翻译系列---第4章 模块化应用程序开发

模块化应用程序是指将一个应用程序拆分成一系列的可以组合的功能单元.一个客户端模块封装了应用程序的一部分,并且通常是一系列相关的关注点.它可以包含一个相关的组件的集合,就像用户界面,应用程序功能,和一些业务逻辑,以及一些应用程序基础模块,比如应用程序级的日至服务或者用户认证.模块之间是相互独立的但是可以通过松耦合的手段进行通信.模块化的应用程序是的开发.测试.部署和扩展变得更新容易. 例如,一个个人银行应用程序,用户可以使用各种各样的功能,比如账户间汇款,支付,从个人的界面中更新个人信息等.然而,

JavaScript学习指南之第一章Hello JavaScript!最基础的JavaScript入门

JavaScript学习指南笔记 第一章 Hello JavaScript! JavaScript简介 JavaScript属于网络端的脚本语言. JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用. 能够与网页进行完美的集成.. 目前在因特网领域,也是比较流行的一种脚本语言. JavaScript是一种轻量级的编程语言. JavaScript是可插入HTML页面的编程代码. JavaScript插入HTML页面后,可有所有的浏览器所执行