1、动态网页技术的发展动态网页技术的发展当当wwwwww网初现江湖时,当时主要是网初现江湖时,当时主要是htmlhtml(19331933),由于),由于htmlhtml只只支持静态的文字和图片,不能参与用户进行交互,为弥补这个不支持静态的文字和图片,不能参与用户进行交互,为弥补这个不足,陆续出现了下列网页技术:足,陆续出现了下列网页技术:(1 1)cgicgi(common gateway interfacecommon gateway interface)特点:特点:a a:cgicgi技术是早期动态技术使用最多,发展比较成熟并且功能强技术是早期动态技术使用最多,发展比较成熟并且功能强大大b
2、b:效率比较低,编程比较困难:效率比较低,编程比较困难c c:cgicgi可以用不同的语言编写(可以用不同的语言编写(vbvb,delphidelphi,c/c+c/c+,perlperl)常用)常用的的c/c+c/c+和和perlperl语言语言d d:现在使用:现在使用cgicgi做动态网页比较少,但是还是有,主要用于做动态网页比较少,但是还是有,主要用于linux/unixlinux/unix操作系统中操作系统中2(2 2)aspaspaspasp是是html+javascripthtml+javascript(vbscriptvbscript)+com+com组件的形式,组件的形式,a
3、spasp的功的功能强大不在于能使用相关的脚本语言而是能强大不在于能使用相关的脚本语言而是comcom组件,但是组件,但是comcom组组件的开发是比较困难的。件的开发是比较困难的。优势:优势:1.1.简单易学简单易学2.2.安装使用方便(安装使用方便(windows+iiswindows+iis)在)在win98win98是使用(是使用(pwspws作为作为aspasp的服务器)的服务器)3.3.效率比效率比cgicgi高高不足:不足:1.1.功能扩张比较困难,因为功能扩张比较困难,因为aspasp的功能扩展在的功能扩展在comcom组件,组件,而开发而开发comcom组件是比较困难的组件是
4、比较困难的2.2.安全性。因为安全性。因为aspasp是与是与windowswindows系统和系统和iisiis一起工作的,所以一起工作的,所以windowswindows和和iisiis的安全漏洞会对的安全漏洞会对aspasp造成影响造成影响3.3.跨平台性跨平台性4.4.实现企业级的功能困难,如服务器的集群、负载均衡实现企业级的功能困难,如服务器的集群、负载均衡动态网页技术的发展动态网页技术的发展动态网页技术的发展(3 3)phpphp官方网站:官方网站:优势:优势:1.1.跨平台性良好,多种数据库支持跨平台性良好,多种数据库支持2.2.效率比较高,具有良好的安全性效率比较高,具有良好的
5、安全性3.3.免费使用免费使用不足:不足:1.1.安装复杂(安装复杂(phpphp的很多功能需要安装相应的应用库,如要更好的很多功能需要安装相应的应用库,如要更好的支持图形就要安装的支持图形就要安装gdgd库)库)2.2.缺少企业级的支持(缺少企业级的支持(phpphp是由是由phpphp开发组支持的,如果要增加开发组支持的,如果要增加新功能就要开发相应的组件)新功能就要开发相应的组件)3.php3.php是自由软件组织开发的,缺少正规的公司对其负责是自由软件组织开发的,缺少正规的公司对其负责动态网页技术的发展动态网页技术的发展(4 4)jspjspjsp=html+javajsp=html+
6、java片段片段+jsp+jsp语法语法+js+js优势:优势:1.1.一次编写,到处运行一次编写,到处运行2.2.良好的跨平台性良好的跨平台性3.3.多种开发工具支持多种开发工具支持4.4.强大的可伸缩性(强大的可伸缩性(jsp+javabeanjsp+javabean)的方式)的方式不足:不足:1.jsp1.jsp产品的复杂度高(产品的复杂度高(jspjsp入门比入门比aspasp难)难)2.jsp2.jsp要求运行的机器配置要高,因为要求运行的机器配置要高,因为jspjsp使用使用classclass常驻内存常驻内存的方的方式运行的,效率高,但是需要占用更多的内存式运行的,效率高,但是需
7、要占用更多的内存动态网页技术的发展动态网页技术的发展jsp VS aspjsp VS aspjspasp运行速度很快较快安全性很高较高跨平台性很好支持windows对数据库的支持性支持所有主流数据库支持所有主流数据库对组件的支持性良好良好对xml的支持性良好良好b/sb/s与与c/sc/s的比较的比较b/sb/s的优势:的优势:1.1.开发成本低开发成本低2.2.管理维护简单管理维护简单3.3.产品升级便利产品升级便利4.4.对用户的培训费用低对用户的培训费用低5.5.用户使用方便,出现故障的概率小用户使用方便,出现故障的概率小b/sb/s的不足:的不足:1.1.安全性不足安全性不足2.2.客
8、户端不能随心变化,受浏览器的限制客户端不能随心变化,受浏览器的限制3.3.利于管理用户利于管理用户服务器ie浏览器ie浏览器b/sb/s服务器客户端客户端c/sc/sservletservlet的介绍的介绍什么是什么是servletservlet?servletservlet技术是在技术是在java eejava ee出现之前就存在了,在开发动态网页中出现之前就存在了,在开发动态网页中得到广泛的应用,直到现在的得到广泛的应用,直到现在的java eejava ee项目中也是非常重要的,项目中也是非常重要的,同时同时jspjsp也是在也是在servletservlet的基础上发展起来的。的基础上
9、发展起来的。servletservlet(javajava服务器小程序)是用服务器小程序)是用javajava编写的服务器程序,它的编写的服务器程序,它的特点:特点:1.1.由服务器调用和执行由服务器调用和执行2.2.用用javajava语言编写的语言编写的3.3.按照按照servletservlet规范开发规范开发4.4.功能强大,可以完成几乎所有的网站功能功能强大,可以完成几乎所有的网站功能5.5.是学习是学习jspjsp的基础的基础servlet/jspservlet/jsp开发工具开发工具servlet/jspservlet/jsp运行环境运行环境TomcatTomcat是一个免费的开
10、源的是一个免费的开源的servletservlet容器容器,它是,它是ApacheApache基金会的基金会的JakartaJakarta项目中的一个核心项目,由项目中的一个核心项目,由ApacheApache,SunSun和其它一些公和其它一些公司及个人共同开发而成。司及个人共同开发而成。普通的文本编辑器普通的文本编辑器notepadnotepad,uedit32uedit32集成开发工具集成开发工具jcreatorjcreator,jbuilderjbuilder,eclipseeclipse,editpluseditplus,netbeannetbean浏览器Web服务器数据库绝大部分浏
11、览器ie,netscape,firefox,MaxthonTomcatBea weblogicIbm websphereResinSql 200SybaseMysql,AccessOracle,db2。tomcattomcat在网络中的位置在网络中的位置IE浏览器Web服务器jsp/servlet容器*.java*.jspTomcatTomcat三个功能:三个功能:1.web1.web服务器服务器2.jsp2.jsp容器容器3.servlet3.servlet的容器的容器TomcatTomcathttp请求返回静态页面转发返回结果服务器ie浏览器ie浏览器servletservlet体系结构体
12、系结构javax.servlet.javax.servlet.*;java.lang.Objectjavax.servlet.GenericServletjava.io.InputStreamjava.io.OutputStreamjava.lang.Throwablejavax.servlet.ServletInputStreamjavax.servlet.ServletOutputjava.lang.Exceptionjava.io.Serializablejavax.serlet.Servletjavax.servlet.ServletConfigjavax.servlet.Servle
13、tExceptionjavax.servlet.UnavailableException界面层界面层(美工)(美工)逻辑层逻辑层(程序员)(程序员)数据层数据层(数据库分析员)(数据库分析员)网网络络拓拓扑扑图图servletservlet的几个实例的几个实例开发开发servletservlet有三种方法:有三种方法:1.1.实现实现servletservlet接口接口2.2.继承继承GenericServletGenericServlet3.3.继承继承HttpServletHttpServletservletservlet开发流程开发流程1.1.在在%TOMCAT_HOME%/webapp
14、s%TOMCAT_HOME%/webapps下下WEB-INFWEB-INF的文件夹,写的文件夹,写一个文件一个文件web.xmlweb.xml(该网站的配置信息),建立一个(该网站的配置信息),建立一个classesclasses的子的子文件夹,也可以从别的目录文件夹,也可以从别的目录ROOTROOT下拷贝下拷贝2.2.开发开发servletservlet(引入(引入TomcatTomcat文件夹下文件夹下liblib文件夹里的文件夹里的servlet-servlet-api.jarapi.jar)3.3.部署你的部署你的servletservlet(servletservlet开发流程开发
15、流程)4.4.启动启动TomcatTomcat,访问你的,访问你的servletservlet,在浏览器的地址栏中输入:,在浏览器的地址栏中输入:http:/127.0.0.1:8080/myWebSite/hellohttp:/127.0.0.1:8080/myWebSite/hello回车就可以看到回车就可以看到servletservlet的输出的输出注意:注意:127.0.0.1127.0.0.1是服务器所在的是服务器所在的IPIP,80808080是端口号,要根据实是端口号,要根据实际情况定。际情况定。servletservlet开发流程开发流程在在web.xmlweb.xml文件中添
16、加如下代码:文件中添加如下代码:!-hellohello!-com.test.Hellocom.test.Hello!-hellohello!-/hello/helloservletservlet的生命周期的生命周期servletservlet部署在容器里(我们使用的是部署在容器里(我们使用的是TomcatTomcat,也可是别的,比,也可是别的,比如如jbossjboss,weblogicweblogic。),它的生命周期由容器来管理。),它的生命周期由容器来管理。servletservlet的生命周期分为以下几个阶段:的生命周期分为以下几个阶段:1.1.装载装载servletservlet
17、,由相应的容器来完成,由相应的容器来完成2.2.创建一个创建一个servletservlet实例实例3.3.调用调用servletservlet的的initinit()方法,该方法只会在第一次访问()方法,该方法只会在第一次访问servletservlet时被调用一次时被调用一次4.4.服务:调用服务:调用servletservlet的的serviceservice()方法,一般业务逻辑在这里处()方法,一般业务逻辑在这里处理,该方法在访问该理,该方法在访问该servletservlet时,会被调用时,会被调用5.5.销毁:调用销毁:调用servletservlet的的destroydestr
18、oy()方法,销毁该()方法,销毁该servletservlet实例,实例,该方法在以下情况被调用:该方法在以下情况被调用:a a)tomcattomcat重新启动重新启动b b)reloadreload该该webappswebappsc c)重新启动电脑)重新启动电脑通过通过GenericServletGenericServlet去开发去开发servletservlet,只需要重写,只需要重写serviceservice方法,方法,相对来说要简单一些。相对来说要简单一些。通过通过HttpServletHttpServlet去开发去开发servletservlet,需要重写,需要重写doGet
19、doGet、doPostdoPost方法,方法,这是目前用的最多的一种方法。这是目前用的最多的一种方法。表单提交数据表单提交数据getget请求和请求和postpost请求的区别:请求的区别:1.1.从安全性看从安全性看getpostgetpost。getget提交的数据会在浏览器的地址栏显提交的数据会在浏览器的地址栏显示示2.2.从提交的内容大小看从提交的内容大小看getpostgetpostgetpost。getget请求服务器立即处理请求,请求服务器立即处理请求,而而postpost请求可能形成一个队列请求请求可能形成一个队列请求通过继承通过继承GenericServletGeneric
20、Servlet开发开发servletservlet通过继承通过继承HttpServletHttpServlet开发开发servletservlet同一用户的不同页面共享数据同一用户的不同页面共享数据四种方法:四种方法:1.1.cookiecookie技术技术2.sendRedirect2.sendRedirect()跳转()跳转3.3.隐藏表单提交(隐藏表单提交(formform)4.session4.session技术技术同一用户的不同页面共享数据同一用户的不同页面共享数据什么是什么是cookiecookie?cookiecookie可以用来做什么?可以用来做什么?服务器在客户端保存用户服务
21、器在客户端保存用户的信息,比如登录名、密的信息,比如登录名、密码码就是就是cookiecookie这些信息就像是小甜饼一这些信息就像是小甜饼一样,数据量并不大,服务样,数据量并不大,服务器端在需要的时候可以从器端在需要的时候可以从客户端读取客户端读取服务器客户端客户端客户端1.1.保存用户名、密码,在一定时间不用重新登录保存用户名、密码,在一定时间不用重新登录2.2.记录用户访问网站的喜好,比如有无背景音乐、网页的背景记录用户访问网站的喜好,比如有无背景音乐、网页的背景色是什么色是什么3.3.网站的个性化,比如定制网站的服务、内容网站的个性化,比如定制网站的服务、内容cookiecookie使
22、用使用1.cookie1.cookie有点像一张表,分两列,一个是名字,一个是值,数据有点像一张表,分两列,一个是名字,一个是值,数据类型都是类型都是StringString2.2.如何创建一个如何创建一个cookiecookie(在服务器端创建的)(在服务器端创建的)Cookie c=new Cookie(String name,String val);Cookie c=new Cookie(String name,String val);3.3.如何将一个如何将一个cookiecookie添加到客户端添加到客户端response.addCookie(c);response.addCooki
23、e(c);4 4。如何读取。如何读取cookiecookie(从客户端读到服务器)(从客户端读到服务器)request.getCookie();request.getCookie();名字String值Stringcookiecookiecookiecookie其它说明其它说明1.1.可以通过可以通过IEIE工具工具internetinternet选项选项隐私隐私高级来启高级来启用或是禁用用或是禁用cookiecookie2.2.由于由于cookiecookie的信息是保存在客户端的,因此安全性不高的信息是保存在客户端的,因此安全性不高3.cookie3.cookie信息的生命周期可以在创建时
24、设置(比如信息的生命周期可以在创建时设置(比如30s30s),从创),从创建那一时刻起,就开始计时,到时该建那一时刻起,就开始计时,到时该cookiecookie的信息就无效了的信息就无效了同一用户的不同页面共享数据同一用户的不同页面共享数据sendRedirectsendRedirect()方法()方法通过该方法可以将一个页面的信息传送给另外的页面,比如:通过该方法可以将一个页面的信息传送给另外的页面,比如:sendRedirect(“welcome?uname=aaa”);sendRedirect(“welcome?uname=aaa”);优点:传送信息的速度比较快优点:传送信息的速度比较
25、快缺点:它只能传送字符串,而不能传送一个对象缺点:它只能传送字符串,而不能传送一个对象sendRedirect(“welcome?uname=aaa”);sendRedirect(“welcome?uname=aaa”);注意点:注意点:1.welcome1.welcome代表你要跳转的那个代表你要跳转的那个servletservlet的的urlurl2.servlet url2.servlet url名和变量之间有个?名和变量之间有个?3.3.如要传递两个以上的值,它们之间要用符号如要传递两个以上的值,它们之间要用符号&分开,比如分开,比如sendRedirect(“welcome?unam
26、e=aaa&passwd=123”);sendRedirect(“welcome?uname=aaa&passwd=123”);4.4.如果传递的是中文,那你将得到乱码,需要处理一下如果传递的是中文,那你将得到乱码,需要处理一下res.setContentType(“text/html,charset=gbk”);res.setContentType(“text/html,charset=gbk”);同一用户的不同页面共享数据同一用户的不同页面共享数据隐藏表单隐藏表单这是最常见的一种方式,也是最简单的,但有时该技巧非常管用,这是最常见的一种方式,也是最简单的,但有时该技巧非常管用,形如:形如:
27、input type=name=a value=b通过隐藏表单,我们也可以将一个页面信息,传递给另外的页面。通过隐藏表单,我们也可以将一个页面信息,传递给另外的页面。同一用户的不同页面共享数据同一用户的不同页面共享数据什么是什么是sessionsession?服务器分配给服务器分配给A A客户端的客户端的sessionsession空间空间服务器分配给服务器分配给A A客户端的客户端的sessionsession空间空间服务器分配给服务器分配给A A客户端的客户端的sessionsession空间空间当用户打开浏览器,访问当用户打开浏览器,访问某个网站时,服务器就会某个网站时,服务器就会在在服
28、务器的内存服务器的内存为该浏览为该浏览器分配一个空间,该空间器分配一个空间,该空间被这个浏览器被这个浏览器独占独占。这个。这个空间就是空间就是sessionsession空间,空间,该空间中的数据默认存在该空间中的数据默认存在时间为时间为30min30min,你也可以,你也可以修改该值。修改该值。服务器(服务器(TomcatTomcat)ABCABCAAA同一用户的不同页面共享数据同一用户的不同页面共享数据sessionsession可以用来做什么?可以用来做什么?1.1.网上商城中的购物车网上商城中的购物车2.2.保存登陆用户的信息保存登陆用户的信息3.3.将某些数据放入到将某些数据放入到s
29、essionsession中,供同一用户的各个方面使用中,供同一用户的各个方面使用4.4.防止用户非法登陆到某个页面防止用户非法登陆到某个页面如何理解如何理解sessionsession?可以把可以把sessionsession看做一张表,看做一张表,这张表有两列,而表有多这张表有两列,而表有多少行理论上没有限制,每少行理论上没有限制,每一行就是一行就是sessionsession的一个属的一个属性。每个属性包含有两个性。每个属性包含有两个部分,一个是该属性的名部分,一个是该属性的名字字StringString,另外一个是它,另外一个是它的值的值ObjectObject。名字String值Ob
30、jectaaa111sessionsession属性同一用户的不同页面共享数据同一用户的不同页面共享数据如何使用如何使用sessionsession?1.1.得到得到sessionsessionHttpSession hs=request.getSession(true);HttpSession hs=request.getSession(true);2.2.向向sessionsession添加属性添加属性hs.setAttribute(String name,Object val);hs.setAttribute(String name,Object val);3.3.从从sessionse
31、ssion得到某个属性得到某个属性String name=hs.getAttribute(String name);String name=hs.getAttribute(String name);4.4.从从sessionsession中删除掉某个属性中删除掉某个属性hs.removeAttribute(String name);hs.removeAttribute(String name);5.5.注销注销sessionsession中的内容(比较安全的一种方式)中的内容(比较安全的一种方式)ht.setMaxInactiveInterval(0);ht.setMaxInactiveInt
32、erval(0);同一用户的不同页面共享数据同一用户的不同页面共享数据sessionsession的注意事项:的注意事项:1.session1.session中属性存在的默认时间是中属性存在的默认时间是30min30min,你也可修改它存在的,你也可修改它存在的时间:(时间:(a a)修改)修改web.xml web.xml (b b)在程序中修改)在程序中修改2.2.上面说的这个上面说的这个30min30min指的是用户的发呆时间,而不是累计时间指的是用户的发呆时间,而不是累计时间3.3.当某个浏览器访问网站时,服务器会给浏览器分配一个唯一的当某个浏览器访问网站时,服务器会给浏览器分配一个唯
33、一的session idsession id,并以此来区分不同的浏览器(即客户端),并以此来区分不同的浏览器(即客户端)4.4.因为因为sessionsession的各个属性要占用服务器的内存,因此软件公司都的各个属性要占用服务器的内存,因此软件公司都是在迫不得已的情况下才使用是在迫不得已的情况下才使用cookie vs sessioncookie vs session1.1.存在的位置存在的位置cookiecookie保存在客户端,保存在客户端,sessionsession保存在服务器端保存在服务器端2.2.安全性安全性比较而言,比较而言,cookiecookie的安全性比的安全性比sess
34、ionsession要弱要弱3.3.网络传输量网络传输量cookiecookie通过网络在客户端与服务器端传输,而通过网络在客户端与服务器端传输,而sessionsession保存在服务保存在服务器端,不需要传输器端,不需要传输servletservlet中操作数据库中操作数据库servletservlet操作数据库注意事项操作数据库注意事项需要将连接数据库的需要将连接数据库的jarjar包,拷贝到包,拷贝到tomcattomcat服务器服务器具体有两种方法:具体有两种方法:1 1)将)将jarjar包拷贝到包拷贝到tomcattomcat目录下的目录下的liblib文件夹里文件夹里2 2)在
35、)在webappswebapps目录的目录的WEB-INFWEB-INF文件下建立一个文件下建立一个liblib文件夹,然文件夹,然后将后将jarjar包拷贝到该文件夹下包拷贝到该文件夹下两种方法的区别:两种方法的区别:1 1)所有)所有webappswebapps都可以使用都可以使用jarjar【公用公用liblib库库】2 2)只有放入)只有放入jarjar的那个的那个webappswebapps能使用能使用jarjar【私用私用liblib库库】sqlsql注入漏洞注入漏洞select select*from users where username=abc and passwd=fro
36、m users where username=abc and passwd=123 123 or 1=1or 1=1在在servletservlet中显示图片中显示图片在你的在你的webappswebapps下建立一个文件夹,比如下建立一个文件夹,比如imagesimages,然后将图片,然后将图片拷贝到该文件夹中,再在拷贝到该文件夹中,再在servletservlet中添加:中添加:img src=/即可。即可。分页方法分页方法 分页的算法:分页的算法:需要定义四个变量,它们有各自的用处需要定义四个变量,它们有各自的用处int pageSizeint pageSize:每页显示多少条记录:每
37、页显示多少条记录int pageNowint pageNow:希望显示第几页:希望显示第几页int pageCountint pageCount:一共有多少页:一共有多少页int rowCountint rowCount:一共有多少条记录:一共有多少条记录说明:说明:pageSizepageSize是指定,是指定,pageNowpageNow是用户选择的。是用户选择的。rowCountrowCount是从表中查询得到的。是从表中查询得到的。pageCountpageCount是计算出来的,该计算公式为:是计算出来的,该计算公式为:if(rowCount%pageSize=0)if(rowCou
38、nt%pageSize=0)pageCount=rowCount/pageSize;pageCount=rowCount/pageSize;else else pageCount=rowCount/pageSize+1;pageCount=rowCount/pageSize+1;分页方法分页方法 针对前面提出的问题,我们可能很自然的想到,用针对前面提出的问题,我们可能很自然的想到,用select select 字段名列表字段名列表 from from 表名表名 where id between where id between?and and?这个这个sqlsql语句确实比较快,但是语句确实比
39、较快,但是存在一个问题存在一个问题,即如果表的,即如果表的idid被被删除了,那么某页可能就会少一条记录。删除了,那么某页可能就会少一条记录。因此,我们的最终方法是如下语句:因此,我们的最终方法是如下语句:select top pageSize select top pageSize 字段名列表字段名列表 from from 表名表名 where id not where id not in(select top pageSizein(select top pageSize*(pageNow-1)id from(pageNow-1)id from 表名表名)分页方法分页方法 测试效率测试效率当
40、表的记录超过当表的记录超过100100万条时,它的翻页就很慢,原因是它查询的万条时,它的翻页就很慢,原因是它查询的结果是整张表。在实际的项目中,一张表超过结果是整张表。在实际的项目中,一张表超过100100万是非常常见万是非常常见的,一些大型项目中一些表到达的,一些大型项目中一些表到达T T级别也是有的。级别也是有的。增加表的记录的语句可用:增加表的记录的语句可用:insert into insert into 表名表名 (字段字段1,2)select 1,2)select 字段字段1,2 from 1,2 from 表名表名网站框架网站框架问题分析:问题分析:界面和业务逻辑放在一起(界面和业
41、务逻辑放在一起(model1model1模式)存在以下问题:模式)存在以下问题:1.1.在在LoginCheck.javaLoginCheck.java文件和文件和Welcome.javaWelcome.java文件中都去操作了数文件中都去操作了数据库,他们的逻辑相似,代码重复据库,他们的逻辑相似,代码重复2.2.整个框架没有清晰的层次关系,显得非常乱整个框架没有清晰的层次关系,显得非常乱3.3.代码一点也不优雅,可读性差,可维护性差代码一点也不优雅,可读性差,可维护性差问题改进:问题改进:通过对问题的分析,我们可以对程序进行改进:通过对问题的分析,我们可以对程序进行改进:1.1.进行分层(界
42、面层、业务逻辑层)进行分层(界面层、业务逻辑层)【mvmv模式模式】mm:model vmodel v:viewview2.2.将常用的代码(比如连接数据库)封装到类中将常用的代码(比如连接数据库)封装到类中Login.javaLogin.java登陆界面登陆界面LoginCheck.jLoginCheck.javaava验证用户验证用户Welcome.javaWelcome.java欢迎界面欢迎界面登录请求不合法合法界面界面viewview模型模型modelmodelUserBean.javaUserBean.java表示表示useruser表表UserBeanChecUserBeanChe
43、ck.javak.java业务逻辑业务逻辑ConneDB.javaConneDB.java得到连接得到连接useruser表表调用调用操作数据库ServletContextServletContext讲解讲解什么是什么是ServletContextServletContext?要理解要理解ServletContextServletContext,就,就必须和必须和cookiecookie、sessionsession做一做一个对比,如右图所示:个对比,如右图所示:可以把它想象成是一个共用可以把它想象成是一个共用的空间,可以被所有的用户的空间,可以被所有的用户访问,也就是说:访问,也就是说:A
44、A客户可客户可以访问以访问D D,B B客户也能访问客户也能访问,客户也能访问。,客户也能访问。服务器服务器cookiecookiesessionsessionServletContextServletContext如何使用如何使用ServletContextServletContext?1.1.如何得到如何得到ServletContextServletContext实例实例this.getServletContext();this.getServletContext();2.2.你可以把它想象成一张表,这个和你可以把它想象成一张表,这个和sessionsession非常相似,每一行就非常相似
45、,每一行就是一个属性:是一个属性:添加属性添加属性setAttribute(String name,Object ob);setAttribute(String name,Object ob);得到值得到值getAttribute(String name);getAttribute(String name);返回返回ObjectObject删除属性删除属性removeAttribute(String name);removeAttribute(String name);3.3.生命周期生命周期ServletContextServletContext中的生命周期从创建开始,到服务器关闭而结束。中
46、的生命周期从创建开始,到服务器关闭而结束。ServletContextServletContext讲解讲解使用使用ServletContextServletContext的注意事项:的注意事项:因为存在因为存在ServletContextServletContext中的数据会长时间保存在服务器,会占中的数据会长时间保存在服务器,会占用内存,因此我们建议不要向用内存,因此我们建议不要向ServletContextServletContext中添加过大的数据,中添加过大的数据,切忌。切忌。使用使用ServletContextServletContext实例:实例:在网站开发中,有很多功能需要使用在
47、网站开发中,有很多功能需要使用ServletContextServletContext,比如:,比如:1.1.网站计数器网站计数器2.2.网站在线用户显示网站在线用户显示3.3.简单的聊天系统简单的聊天系统总之,如果是涉及到不同用户共享数据,而这些数据量不大,同总之,如果是涉及到不同用户共享数据,而这些数据量不大,同时又不希望写入数据库中,我们就可以考虑使用时又不希望写入数据库中,我们就可以考虑使用ServletContextServletContext来实现。来实现。ServletContextServletContext讲解讲解ServletServlet中操作文件中操作文件因为因为ser
48、vletservlet本来就是一个本来就是一个.java.java文件,因此,文件,因此,servletservlet中操作文件中操作文件和普通和普通javajava文件操作文件是一样的。文件操作文件是一样的。/创建一个创建一个FileReaderFileReaderFileReader fr=new FileReader(“d:myCounter.txt”);FileReader fr=new FileReader(“d:myCounter.txt”);BufferedReader br=new BufferedReader(fr);BufferedReader br=new Buffere
49、dReader(fr);/读出一行数据读出一行数据String numVal=bw.readLine();String numVal=bw.readLine();/关闭文件流关闭文件流bw.close();bw.close();创建一个创建一个FileWriterFileWriter内存数据内存数据磁盘文件磁盘文件 (写入、输出)(写入、输出)内存数据内存数据磁盘文件磁盘文件 (读入,输入)(读入,输入)如何修改如何修改tomcattomcat的端口的端口在某些情况下,可能需要修改在某些情况下,可能需要修改TomcatTomcat监听的端口监听的端口80808080,比如:,比如:1 1)需要
50、启动两份)需要启动两份TomcatTomcat2 2)某个服务占用了)某个服务占用了80808080端口(端口(1433,1521,33061433,1521,3306)找到找到TomcatTomcat目录下的目录下的confconf文件夹里的文件夹里的server.xmlserver.xml,对其端口号进,对其端口号进行修改。行修改。查看本机所有端口的命令:查看本机所有端口的命令:netstat-annetstat-an设置设置tomcattomcat虚拟目录虚拟目录为什么要设置虚拟目录?为什么要设置虚拟目录?目前,我们的网站站点都是放在默认的目录下目前,我们的网站站点都是放在默认的目录下t