软件体系结构
1. C/S:Client/Servlet,例如QQ就是CS结构
需要编写服务器端程序和客户端程序。缺点:更新需要两端,总要求客户下载新的客户端程序优点:安全性比较好2. B/S:Browser/Server
缺点:安全性较差优点:只需要编写服务器端程序
3. Web资源
* 静态资源:html、css、javascript、图片等; * 动态资源:javaweb的动态资源有jsp/servlet,其他web程序动态资源有asp、php等。
4. 静态资源和动态资源的区别
* 客户端访问服务器静态资源,服务器直接响应; * 客户端访问服务器动态资源,服务器需要先把动态资源转换成静态资源,再响应。5. 客户端通过浏览器访问服务器
* http://主机名:端口号/路径,例如:6. Web服务器
* Tomcat(Apache):当前应用最广的JavaWeb服务器,支持servlet规则,不支持JavaEE规范; * JBoss(Redhat红帽):支持JavaEE规则; * GlassFish(Orcale):支持servlet规则,应用不是很广; * Resin(Caucho):支持JavaEE规则,应用越来越广; * Weblogic(Orcale):要钱的!支持JavaEE规则,适合大型项目; * Websphere(IBM):要钱的!支持JavaEE规则,适合大型项目;===================================
======================================================================Tomcat
tomcat6支持servlet2.5
tomcat7支持servlet3.01. 启动关闭tomcat
需要先配置JAVA_HOME * 双击%CATALANA_HOME%\bin\startup.bat * 双击%CATALANA_HOME%\bin\shutdown.bat访问服务器:
因为服务器在本机上,所以主机名为localhost,表示本机 tomcat的默认端口为8080 index.jsp是主页2. 修改端口号
* 修改端口号,%CATALANA_HOME%\conf\server.xml,修改<Connector port="8080">,把8080修改了即可。 * http协议默认端口为80,也就是说,等同与如果把Tomcat端口号修改成80,那么访问服务器就可以无需再给出端口号。
3. tomcat目录结构
* bin:二进制可执行文件,例如startup.bat和shutdown.bat
* conf:配置文件,例如:server.xml、context.xml、web.xml、tomcatusers.xml * lib:tomcat所需jar包 * logs:日志文件 * temp:存放tomcat运行时产生的临时文件,当tomcat关闭后,这个目录中的文件可以删除 * webapps:这个目录下的每个文件夹对应一个JavaWeb应用程序 * work:webapps下的应用程序在运行时会自动生成文件,就在work目录下。work目录删除了也没问题,但再次运行应用程序还要再生成work目录和文件。4. 创建JavaWeb目录:hello
* 在webapps目录下创建一个hello目录,hello目录就是项目目录了; * 在hello目录下创建WEB-INF * 在WEB-INF下创建web.xml * 在WEB-INF下创建classes目录 * 在WEB-INF下创建lib目录 * 在hello目录下创建index.html在web.xml文件中添加如下内容:
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="" xmlns:xsi="" xsi:schemaLocation=" "></web-app>在index.html中添加如下内容:
<html> <head><title>index.html</title></head> <body> <h1>hello主页</h1> </body></html> 启动tomcat,打开客户端访问===================================
配置外部应用
外部应用既是把应用程序不放到Tomcat的wabapps目录下!而已放在外面,例如:F:/hello1. 在conf/server.xml下配置,指定外部应用的路径。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"> <Context path="itcast_hello" docBase="F:/hello"/></Host>* 在<Host>元素下添加<Context>元素,path为URL访问路径,docBase为外部应用的目录。
* 在浏览器地址栏中访问:2. 在conf/catalana/localhost下添加配置文件,指定外部应用路径
* 在conf/catalana/localhost目录下创建itcast_hello.xml文件,其中itcast_hello就是URL访问路径 * 在itcast_hello.xml文件中添加:<Context docBase="F:/hello"/>,docBase指定外部应用的目录。3. 缺省web应用
* 在webapps目录下有一个ROOT目录,它是缺省web应用,访问这个应用的路径: * 如果把web应用的内部放到webapps/ROOT下,访问URL路径中不用给出应用名称。4. 配置虚拟主机
希望:访问web应用。 * 这需要把域名映射成IP地址:127.0.0.1 * 需要把tomcat端口号修改为80 * 需要在server.xml中配置主机,并指定主机的应用目录 * 在应用目录中添加名为ROOT的web应用。1). 找到C:\WINDOWS\system32\drivers\etc\hosts文件,添加127.0.0.1
2). 在conf/server.xml中修改端口为80 3). 在conf/server.xml中添加<Host>元素<Host name="" appBase="F:/myapps" unpackWARs="true" autoDeploy="true"></Host> * name:指定该主机域名为 * appBase:指定该主机的应用目录为F:/myapps 4). 在F:/myapps下创建名为ROOT的web应用。访问:
其中在本机上会被解析为127.0.0.1,但其他电脑访问时无效。===================================
4 理解server.xml(了解)
<Server>
<Servier>
<Connector>
<Engine>
<Host>
<Context>
l <Server>:根元素,表示整个服务器的配置信息;
l <Service>:<Server>的子元素,在<Server>中只能有一个<Service>元素,它表示服务;
l <Connector>:<Service>的子元素,在<Service>中可以有N个<Connector>元素,它表示连接。
l <Engine>:<Service>的子元素,在<Service>中只能有一<Engine>元素,该元素表示引擎,它是<Service>组件的核心。
l <Host>:<Engine>的子元素,在<Engine>中可以有N个<Host>元素,每个<Host>元素表示一个虚拟主机。所谓虚拟主机就像是真的主机一样,每个主机都有自己的主机名和项目目录。例如<Host name=”localhost” appBase=”webapps”>表示主机名为localhost,这个主机的项目存放在webapps目录中。访问这个项目下的主机时,需要使用localhost主机名,项目都存放在webapps目录下。
l <Context>:<Host>元素的子元素,在<Host>中可以有N个<Context>元素,每个<Context>元素表示一个应用。如果应用在<Host>的appBase指定的目录下,那么可以不配置<Context>元素,如果是外部应用,那么就必须配置<Context>。如果要为应用指定资源,也需要配置<Context>元素。
我们可以把<Server>看作是一个大酒店:
l <Service>:酒店的服务部门;
l <Connector>:服务员;
l <Engine>:后厨;
l <Host>:后厨中的一个区,例如川菜区是一个<Host>、粤菜区是一个<Host>;
l <Context>:后厨的一个厨师。
用户发出一个请求:http://localhost:8080/hello/index.jsp。发现是http/1.1协议,而且还是8080端口,所以就交给了处理这一请求的“服务员(处理HTTP请求的<Connector>)”,“服务员”再把请求交给了“后厨(<Engine>)”,因为请求是要一盘水煮鱼,所以由“川菜区(<Host>)”负责,因为“大老王师傅<Context>”做水煮鱼最地道,所以由它完成。
l <Connector>:关心请求中的http、和8080;
l < Host>:关心localhost;
l <Context>:关心hello
===================================
===================================
使用MyEcipse创建Web项目
1. MyEclipse指定Tomcat
2. MyEclipse创建Web项目3. MyEclipse发布Web项目到Tomcat下4. MyEclipse启动关闭Tomcat5. MyEclipse对已发布项目的修改会对tomcat下项目的进行修改MyEcipse是JavaWeb应用的开发环境,而不是运行环境!运行还是在Tomcat下运行。
使用MyEclipse打war包,把war包发布到Tomcat下。
===================================
Tomcat管理页面
===================================
======================================================================HTTP协议
1 http协议(规定双方通信的格式)
* 即超文本传输协议。浏览器和服务器传输定的规则 * http是基于请求/响应模式的,所以分为请求协议和响应协议===================================
请求
就是客户端给服务器发的信息!
GET /hello/index.jsp HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98
POST /hello/index.jsp HTTP/1.1
Accept: p_w_picpath/gif, p_w_picpath/jpeg, p_w_picpath/pjpeg, p_w_picpath/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
Referer: http://localhost:8080/hello/index.jsp
Accept-Language: zh-cn,en-US;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 13
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=E365D980343B9307023A1D271CC48E7D
keyword=hello
1. 请求格式:
* 请求首行 * 请求头 * 空行 * 请求体(或称之为请求正文)2. 请求方法
* 常见请求方法有GET和POST * 在浏览器地址栏中发送请求,以及点击超链接都是GET请求 * 提交表单可以发送GET请求,以及POST请求 * GET请求没有请求体,但空行是存在的 * POST请求是存在请求体的3. 使用HttpWatch获取请求信息
* 请求行:请求方法 请求路径 请求协议及版本,例如:GET /hello/index.jsp HTTP/1.1 * 请求头:请求头就是一些键值,格式为:头:值,例如:Host:localhost * 空行:就是一个空行,用来与请求体分隔 * 请求体:GET方法没有请求体,POST才有请求体,请求体内容为:参数名=参数值&参数名=参数值,其中参数值为中文,会使用URL编码。4. 常见请求头
* Host:请求的服务器主机名 * User-Agent:客户端浏览器与操作系统相关信息 * Accept-Encoding:客户端支持的数据压缩格式 * Connection:客户端支持的连接方式 * Cookie:客户端发送给服务器的“小甜点”,它服务器寄存在客户端的。如果当前访问的服务器没有在客户端寄存东西,那么就不会存在它! * Content-Length:请求体的长度 * Referer:当前发出请求的地址,例如在浏览器地址栏直接访问服务器,那么没有这个请求头。如果是在页面上点击链接访问的服务器,那么这个头的值就是 > 作用1:统计来源 > 作用2:防盗链 * Content-Type:如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码。===================================
响应
响应就是服务器发送给客户端的数据!
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 724
Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello
Date: Wed, 25 Sep 2012 04:15:03 GMT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="http://localhost:8080/hello/">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="" method="post">
关键字:<input type="text" name="keyword"/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
1. 响应格式:
* 响应首行 * 响应头 * 空行 * 响应体(或称之为响应正文)2. 状态码
响应首行的结构:协议及版本 状态码 状态码说明,例如:HTTP/1.1 200 OK* 200:请求成功
* 302:请求重定向 * 304:请求资源没有改变 * 404:请求资源不存在,属性客户端错误 * 500:服务器内部错误3. 响应头
* Content-Type:响应正文的MIME类型,例如p_w_picpath/jpeg表示响应正文为jpg图片,例如text/html;charset=utf-8表示响应正文为html,并且编码为utf-8编码。浏览器会通过这一信息来显示响应数据 * Content-Length:响应正文的长度 * Set-Cookie:服务器寄存在客户端的“小甜点”,当客户端再次访问服务器时会把这个“小甜点”还给服务器 * Date:响应时间,可能会有8小时的误差,因为中国的时区问题通知客户端浏览器不要缓存页面的响应头:
* Expires:-1 * Cache-Control: no-cache * Pragma: no-cache自动刷新响应头,浏览器会在3秒钟后自动重定向到传智主页
* Refresh: 3;url=http://www.itcast.cn4. 状态码304
相关头信息 * Last-Modified:响应头,表示当前资源的最后修改时间; * If-Modified-Since:请求头,表示缓存的资源最后修改时间;状态码304:表示访问的资源没有改变
1. 客户端首次访问服务器的静态资源index.html,服务器会把index.html响应给客户端,而且
还会添加一个名为Last-Modified的响应头,它说明了当前index.html的最后修改时间
2. 客户端收到响应后,会把index.html缓存在客户端上,而且还会把Last-Modified缓存起来。 3. 客户端第二次请求index.html时,会添加名为If-Modified-Since的请求头,它的值是上次服务器响应头Last-Modified,服务器获取到客户端保存的最后修改时间,以及当前资源的最后修改时间进行比较,如果相同,说明index.html没有改动过,那么服务器不会发送index.html,而是响应状态码304,即通知客户端资源没有改变,你可以使用自己的缓存。