首页 韩顺平Servlet视频笔记

韩顺平Servlet视频笔记

举报
开通vip

韩顺平Servlet视频笔记背景知识介绍 J2EE的13种技术 java->servlet->jsp [技术总是有一个演变过程] zip粘贴到word设置 回顾一下我们现有的技术 java 基础(面向对象,集合,界面,线程,文件,网络) jdbc (java 的数据库编程) oracle / mysql / sqlserver html css javascript (web 开发) ->网页设计 xml serlvet+jsp ->java web开发[使用java技术做 web开发] java ee 体系的介绍...

韩顺平Servlet视频笔记
背景知识介绍 J2EE的13种技术 java->servlet->jsp [技术总是有一个演变过程] zip粘贴到word设置 回顾一下我们现有的技术 java 基础(面向对象,集合,界面,线程,文件,网络) jdbc (java 的数据库编程) oracle / mysql / sqlserver html css javascript (web 开发) ->网页 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 xml serlvet+jsp ->java web开发[使用java技术做 web开发] java ee 体系的介绍 servlet项目演示 web 开发介绍 静态页面 (html) 动态页面 用户可以输入数据,和页面交互(注册,购物,发帖子,付款...) 不同时间打开页面,内容是变化. 目前比较流行的左动态页面的技术 ( servlet/jsp , php , asp.net , asp, cgi ) 动态网页技术的比较(了解) bs 和 cs的比较 BS:browser server 浏览器服务器(用HttpWatch Professional抓浏览器包) (2)cs client server 客户服务 为什么需要的web服务器/web究竟是干什么的? 模拟一个web服务器 MyWebServer.java import java.io.*; import java.net.*; public class MyWebServer { public static void main(String []args) throws Exception{ ServerSocket ss=new ServerSocket(80); Socket s=ss.accept(); //提示一句话 System.out.println("在 9999 上等待连接..."); OutputStream os=s.getOutputStream(); BufferedReader br=new BufferedReader(new FileReader("d:\\hello.html")); String buf=""; while((buf=br.readLine())!=null){ os.write(buf.getBytes()); } //关闭流 br.close(); os.close(); s.close(); } } 通过tomcat来讲解BS结构 安装tomcat服务器 解压即可 配置 ①在环境变量中添加 JAVA_HOME= 指向你的jdk的主目录(并不是bin文件目录) 在不配置JAVAHOME的前提下启动tomcat 在startup.bat的第25行中添加set JAVA_HOME=JKD路劲 启动tomcat服务器 到 tomcat 主目录下 bin/startup.bat 验证是否安装成功 http://localhost:8080(8080是默认端口如果该端口已经被占用需要修改端口) tomcat安装后问题解决 (1)tomcat无法正常启动的原因 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 JAVA_HOME 配置错误,或者没有配置 如果你的机器已经占有了8080 端口,则无法启动, 解决 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 (1) 你可以8080 先关闭 netstat –an netstat –anb 来查看谁占用该8080 (2) 主动改变tomcat的端口. 到 conf/server.xml 文件中修改 server.xml的端口号)protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/> (3) 能够正常启动,但是会导航到另外一个页面. 去修改工具->管理加载项,把默认的导航给禁用即可. (4) 在访问 tomcat时候,一定保证 tomcat 服务器是启动 tomcat的目录结构文件 bin: 启动和关闭tomcat的bat文件 conf: 配置文件 -->server.xml : 该文件用于配置和 server 相关的信息, 比如 tomcat启动端口后,配置Host, 配置Context 即web应用 -->web.xml : 该文件配置与 web应用(web应用就相当于是一个 web站点) -->tomcat-users.xml: 该文件用户配置tomcat 的用户密码 和 权限 lib 目录: 该目录放置运行tomcat 运行需要的jar包 logs 目录:存放日志, 当我们需要去查看日志的时候,很有用!,当我们启动tomcat错误时候,可以查询信息. webapps 目录: 该目录下,放置我们的web应用(web 站点), 比如: 建立 web1 目录 下面放置我们的html 文件 jsp 文件..图片... 则 web1就被当做一个web应用管理起来(☞ 特别说明tomcat 6.0 以后支持 tomcat 5 版本 还有别的设置) work: 工作目录: 该目录用于存放jsp被访问后 生成的对应的 server文件 和.class文件 如何去访问一个 web 应用的某个文件 首页面设置及目录规范结构 现在我们要求:把hello.html文件设置成 该 web应用的首页,则需要把web应用的目录格式做的更加规范: ①在web文件夹下配置WEB-INF文件夹 ②在 web.xml 文件中添加配置的代码: hello1.html ③通过http://localhost:8088/web1来访问hello1.html web-inf目录下的 classes目录将来是存放 class文件 lib 目录将来时存放 jar文件 web.xml 配置当前这个web应用的信息. tomcat如何去管理虚拟目录 需求: 当我们把 web 应用放到 webapps目录,tomcat会自动管理,如果我们希望tomcat可以管理其它目录下的web应用?->虚拟目录配置 我在d 盘有一个web应用. 虚拟目录配置步骤: 找到server.xml文件 编辑host节点 添加Context path 在server.xml中添加: myweb2:是访问时输入的web名,实际取出的是web2中的资源 "d:\web2":绝对路径下web2中存放资源如:hello2.html 实际访问时输入的地址:http://localhost:8088/myweb2/hello2.html 绝对路径:从根分区找某个文件 相对路径:从该文件位置去找另一个文件 ③ 需要重启tomcat,才能生效.(因为是采用的dom技术讲信息加载到内存中) context 的几个属性的说明 path: docbase: reloadable ;如果设为ture ,表示 tomcat 会自动更新 web应用,这个开销大,建议在开发过程中,可以设为true, 但是一旦真的发布了,则应当设为false; upackWAR: 如果设为 ture ,则自动解压,否则不自动解压. ①:打war包 cd:d/web2 然后jar –cvf web2.war * ②: 浏览打好的war包 Deploy发布后会在webapps中自动生存改文件 配置域名 我们看和一个如何配置自己的主机名: 我们在实际访问网站的过程中,不可能使用http://localhost:8080/web HYPERLINK "http://localhost:8080/web应用/资源名" \t "_parent" 应用 HYPERLINK "http://localhost:8080/web应用/资源名" \t "_parent" / HYPERLINK "http://localhost:8080/web应用/资源名" \t "_parent" 资源名 的方式去访问网站,实际上使用类似 http://www.sina.com.cn 或者 http://news.sina.com.cn 的方式去访问网站,这个又是怎么实现的呢? 看看ie浏览器访问一个web站点的流程. 实现的步骤如下: (1) 在C:\WINDOWS\system32\drivers\etc 下的host文件 添加127.0.0.1 www.sina.com.cn (2) 在tomcat 的server.xml文件添加主机名 (3) 在d:\web3 加入了一个 /WEB-INF/web.xml 把 hello2.html设为首页面 如果连端口都不希望带,则可以吧tomcat的启动端口设为80即可. (4) 重启生效 tomcat体系的再说明 图: 如何配置默认主机: 在tomcat/conf/server.xml 文件 为什么需要servlet技术? 比如需求:我们希望用户可以贴,用户还可以回复 ....这样一些和用户可以交互的功能,用普通的java技术就完成不了, sun 就开发了 servlet技术供程序员使用. servlet的介绍 servlet 其实就是java程序(java类) 该 java 程序(java 类)要遵循servlet开发规范 serlvet是运行在服务端 serlvet 功能强大,几乎可以完成网站的所有功能 是学习jsp基础 tomcat 和 servlet 在网络中的位置 servlet的生命周期是怎样的/servlet究竟是怎样工作的 UML 时序图帮助大家理解 参看execel 面试题: 请简述servlet的生命周期( 工作流程 财务工作流程表财务工作流程怎么写财务工作流程图财务工作流程及制度公司财务工作流程 ) 答: 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 版本: ①WEB服务器首先会检查是否已经装载并创建了该servlet实例对象。如果是直接进行第④步,否则执行第②步。 ②装载并创建该Servlet的一个实例对象。 ③调用Servlet实例对象的init()方法。 ④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用service()方法并将请求和响应作为参数传递进去。 ⑤WEB应用被停止或重启之前,Servlet引擎将卸载Servlet,在卸载之前调用Servlet的destroy()方法 当serlvet 第一次被调用的时候,会触发init函数,该函数会把servlet实例装载到内存.init函数只会被调用一次 然后去调用servlet 的 service 函数 当第二次后访问该servlet 就直接调用 service 函数. 当 web应用 reload 或者 关闭 tomcat 或者 关机 都会去调用destroy函数,该函数就会去销毁serlvet Servlet的生命周期 当客户端第一次向web服务器发出一个servlet请求时,web服务器将会创建一个该servlet的实例,并且调用servlet的init()方法;如果当服务器已经存在了一个servlet实例,那么,将直接使用此实例;然后再调用service()方法,service()方法将根据客户端的请求方式来决定调用对应的doXXX()方法;当 web应用 reload 或者 关闭 tomcat 或者 关机,web服务器将调用destroy()方法,将该servlet从服务器内存中删除。 生命全过程: 1.加载 2.实例化 3.初始化 4.处理请求 5.退出服务 开发servlet有三种方法 实现 Servlet接口 通过继承 GenericServlet 通过继承 HttpServlet ①实现servlet接口的方式 需求如下: 请使用实现 接口的方式,来开发一个Servlet ,要求该Servlet 可以显示Hello,world,同时显示当前时间. 步骤 在webapps下建立一个web应用 hspWeb1 在hspWeb1 下建立 WEB-INF->web.xml [web.xml可以从 ROOT/WEB-INF/web.xml拷贝] 在WEB-INF 下建立 classes 目录(我们的Servlet 就要在该目录开发.),建立 lib文件夹 开发MyServlet.java package com.hsp; import javax.servlet.*; import javax.servlet.http.*; 为了能将servlet-api.jar包引入,需要配置环境变量 变量值; E:\tomcat\apache-tomcat-6.0.20\lib\servlet-api.jar 记得带上文件名 import java.io.*; class MyFirstServlet implements Servlet { //该函数用于初始化servlet,就是把该servlet装载到内存中 //该函数只会被调用一次 public void init(ServletConfig config) throws ServletException{ } //得到ServletConfig对象 public ServletConfig getServletConfig(){ return null; } //该函数是服务函数,我们的业务逻辑代码就是写在这里 //该函数每次都会被调用 public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException{ } //该函数时得到servlet配置信息 public java.lang.String getServletInfo(){ return null; } //销毁该servlet,从内存中清除,该函数被调用一次 public void destroy(){ } } 根据Servlet规范,我们还需要部署Servlet MyFirstServlet com.hsp.MyFirstServlet 注意:后面不要带.java④ MyFirstServlet /ABC 服务器调用流程:http://localhost:8088/ABC--->①--->②--->③--->④ 在浏览器中测试 在浏览器中输入 http://localhost:8088/hspweb1/ABC 分析一下自己写可能出现的错误 MyFirstServlet 名字不一样 (启动tomcat错误) com.hsp.MyFirstServlet 写成 MyFirstServlet.java,会报告500 资源名自己写错 404" http://localhost:8088/hspweb1/错误的资源url-pattern 404 错误 补充: 如果使用javac 去编译一个java文件,则需要带命令参数 javac –d . java文件 补充: 如何不重启tomcat,就指定去 reload 一个web应用,方法: 进入到 tomcat 的 manager: 点击reload即可. 课堂练习 自己使用 实现Servlet接口的方法,开发一个Servlet,该servlet 可以输出自己的名字 在显示当前日期. ②使用GenericServlet开发servlet 了解即可: 案例 : package com.hsp; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class MyGenericServlet extends GenericServlet { public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException{ res.getWriter().println("hello,world,i am geneirc servlet"); } } 将该Servlet部署到web.xml文件中: MyGenericServlet com.hsp.MyGenericServlet MyGenericServlet /MyGenericServlet ③使用继承 HttpServlet 的方法来开发Serlvet 在软件公司 90%都是通过该方法开发. 举例说明; 还是显示 hello,world 当前日期 代码: package com.hsp; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class MyHttpServlet extends HttpServlet { //在HttpServlet 中,设计者对post 提交和 get提交分别处理 //回忆
,默认是get protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException{ resp.getWriter().println("i am httpServet doGet()"); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException{ resp.getWriter().println("i am httpServet doPost() post name="+req.getParameter("username")); } } 还有一个login.html u: 小结 get 提交 和 post的提交的区别 从安全看 getpost Get可以保留uri中的参数,利于收藏 使用ide来开发servlet 使用ide (eclipse[java se]+myeclipse[插件 可以支持jsp/servlet/struts/hibernate/spring..])开发servlet 需求:使用 ide 开发一个servlet ,该servlet 显示 hello,world, 和当前日期 开发步骤: 建立web工程 在Src 目录下创建了一个包 com.hsp.servlet 开发一个Servlet MySerlvet 的代码: public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("hello "+new java.util.Date().toString() ); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } 配置tomcat 点击add 选择要发布到那个服务器即可: 启动tomcat 使用我们的老方法 从eclipse 启动 tomcat 在使用eclipse 开发servlet 可能会出现一个很麻烦事情,版本不一致错误. java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class com.hsp.servlet.MyServlet1) 原因是因为 tomcat 使用jdk 和 servlet 使用的 jdk不一样, 解决方法就是统一即可. 请大家使用eclipse 并配置继承 HttpServlet 开发一个servlet, 显示hello, 和当前日期. Servlet的细节问题 一个已经注册的Servlet可以被多次映射即: This is the description of my J2EE component This is the display name of my J2EE component MyServlet1 com.hsp.servlet.MyServlet1 MyServlet1 /MyServlet1 MyServlet1 /hsp 当映射一个servlet时候,可以多层 比如 /servlet/index.html ok 从这里还可以看出,后缀名是 html 不一定就是 html,可能是假象. 使用通配符在servlet映射到URL中 有两种格式: 第一种格式 *.扩展名 比如 *.do *.ss 第二种格式 以 / 开头 同时以 /* 结尾 比如 /* /news/* 通配符练习题: Servlet1 映射到 /abc/* Servlet2 映射到 /* Servlet3 映射到 /abc Servlet4 映射到 *.do 问题(面试题): 当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应 Servlet引擎将调用Servlet1。 当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应 Servlet引擎将调用Servlet3。 当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应 Servlet引擎将调用Servlet1。 当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应 Servlet引擎将调用Servlet2。 当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应 Servlet引擎将调用Servlet2。 在匹配的时候,要参考的标准: 看谁的匹配度高,谁就被选择 *.do 的优先级最低 Servlet单例问题 当Servlet被第一次访问后,就被加载到内存,以后该实例对各个请求服务.即在使用中是单例. 因为 Servlet是单例,因此会出现线程安全问题: 比如: 售票系统. 如果不加同步机制,则会出现问题: 这里我给大家一个原则: 如果一个变量需要多个用户共享,则应当在访问该变量的时候,加同步机制 synchronized (对象){ //同步代码 } (2)如果一个变量不需要共享,则直接在 doGet() 或者 doPost()定义.这样不会存在线程安全问题 servlet 中的 配置 需求: 当我们的网站启动的时候,可能会要求初始化一些数据,(比如创建临时表), 在比如: 我们的网站有一些要求定时完成的任务[ 定时写日志,定时备份数据.. 定时发送邮件..] 解决方法: 可以通过 配合 线程知识搞定. 先说明: 通过配置 我们可以指定某个Servlet 自动创建. 我们来模拟一个定时发送电子邮件的功能: 实现思路: sendEmailTable id content sendtime 1 “hello” 2011-11-11 20:11 2 “hello2” 2012-11-11 10:00 看看如何线程去完成任务: 这里的代码请参考项目: SendMailThread.java package com.hsp.model; public class SendEmailThread extends Thread{ @Override public void run() { int i=0; try { while(true){ //每休眠一分钟,就去扫表sendmail, 看看那份信件应当被发出 Thread.sleep(10*1000); System.out.println("发出 第"+(++i)+"邮件");//javamail } } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } } } MyInitServlet1.java public void init() throws ServletException { // Put your code here System.out.println("MyInitServlet1 的init被调用.."); //完成一些初始化任务 System.out.println("创建数据库,表,读取参数"); //创建一个线程 SendEmailThread sendEmailThread=new SendEmailThread(); sendEmailThread.start(); } 说明: 1 ServletConfig对象 该对象主要用于 读取 servlet的配置信息. 案例: ServletConfigTest com.hsp.servlet.ServletConfigTest encoding utf-8 如何使用 String encoding=this.getServletConfig().getInitParameter("encoding"); 补充说明:这种配置参数的方式,只能被某个Servlet独立使用.如希望让所有的Servlet都去读取某个参数,这样配置: 如果要把所有的参数都读取,则使用 如下方法 : Enumeration names=this.getServletConfig().getInitParameterNames(); while(names.hasMoreElements()){ String name=names.nextElement(); System.out.println(name); System.out.println(this.getServletConfig().getInitParameter(name)); } 补充,如何去修改Servlet的配置模板. 编写项目 先完成用户登录 添加在主界面,添加一个超链接,可以返回登录界面重新登录 http协议的再介绍 http协议是建立在tcp/ip协议基础上 http协议全称 超文本传输协议 http协议1.0 , 1.1版本 ,目前通用的是1.1版本 http1.0 称为短连接 http1.1 称为长连接. 所谓长,和短指的是 持续时间的 长连接 1.1 30s ,短连接是发送完数据就断掉. http的请求部分: 基本结构: GET /test/hello.html HTTP/1.1 [请求行] Accept: */* [消息名] 消息名:内容 Referer: http://localhost:8080/test/abc.html Accept-Language: zh-cn User-Agent: Mozilla/4.0 Accept-Encoding: gzip, deflate Host: http://www.sohu.com:80 Connection: Keep-Alive [消息头格式 (消息名: 内容 ) 特别说明: 并不是每一次请求的消息头都一样.] 空行 发送的内容 [格式 : 内容名字=内容体] 请求方式 请求行中的GET称之为请求方式,请求方式有:POST,GET,HEAD,OPTIONS,DELETE,TRACE,PUT 常用的有:POST,GET get和post 参看ppt,和以前的笔记 GET News/abc.jsp http请求消息头 Accept: text/html,image/* [告诉服务器,我可以接受 文本,网页,图片] Accept-Charset: ISO-8859-1 [接受字符编码 iso-8859-1] Accept-Encoding: gzip,compress [可以接受 gzip,compress压缩后数据.] Accept-Language: en-us,zh-cn [浏览器支持中,英文] Host: www.sohu.com:80 [我要找主机是 www.sohu.com:80] If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT [ 告诉服务器,我的缓冲中有这个资源文件,该文件的时间是 。。。] Referer: http://www.sohu.com/index.jsp [告诉服务器,我来自哪里,该消息头,常用于防止盗链] User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)[告诉服务器,浏览器内核] Cookie [cookie??] Connection: close/Keep-Alive [保持连接,发完数据后,我不关闭连接] Date: Tue, 11 Jul 2000 18:23:51 GMT [浏览器发送该http请求的时间] 关于Referer的实际案例: //获取用户浏览器Referer String referer=request.getHeader("Referer"); if(referer==null||!referer.startsWith("http://localhost:8088/servletPro")){ response.sendRedirect("/servletPro/Error"); return; } 红色的部分可以根据实际情况来修改. http的响应 基本结构: 状态行: 格式:HTTP版本号 状态码 原因叙述 举例:HTTP/1.1 200 OK 状态码 含义 100-199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程 200-299 表示成功接收请求并完成整个处理过程,常用200 300-399 为完成请求,客户需要进行一步细化请求。例如:请求的资源已经移动一个新的地址,常用302,307 400-499 客户端的请求有错误 404 500-599 服务器端出现错误,常用500 http响应的状态行举例说明 200 就是整个请求和响应过程没有发生错误,这个最常见. 302: 表示当你请求一个资源的时候,服务器返回302 表示,让浏览器转向到另外一个资源,比如: response.sendRedirect(“/web应用/资源名”) 案例: response.setStatus(302); response.setHeader("Location", "/servletPro/Servlet2"); // 上面两句话等价 response.sendRedirect("/servletPro/Servlet2"); 404: 找不到资源 500: 服务器端错误 http响应消息头详解 Location: http://www.baidu.org/index.jsp 【让浏览器重新定位到url】 Server:apache tomcat 【告诉浏览器我是tomcat】 Content-Encoding: gzip 【告诉浏览器我使用 gzip】 Content-Length: 80 【告诉浏览器会送的数据大小80节】 Content-Language: zh-cn 【支持中文】 Content-Type: text/html; charset=GB2312 [内容格式text/html; 编码gab2312] Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 【告诉浏览器,该资源上次更新时间】 Refresh: 1;url=http://www.baidu.com 【过多久去,刷新到 http://www.baidu.com】 Content-Disposition: attachment; filename=aaa.zip 【告诉浏览器,有文件下载】 Transfer-Encoding: chunked [传输的编码] Set-Cookie:SS=Q0=5Lb_nQ; path=/search[后面详讲] Expires: -1[告诉浏览器如何缓存页面IE] Cache-Control: no-cache [告诉浏览器如何缓存页面火狐] Pragma: no-cache [告诉浏览器如何缓存页面] Connection: close/Keep-Alive [保持连接 1.1是Keep-Alive] Date: Tue, 11 Jul 2000 18:23:51 GMT ①定时刷新Refresh使用 response.setHeader("Refresh", "5;url=/servletPro/Servlet2"); ②文件下载 Content-Disposition public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); //PrintWriter out = response.getWriter(); //演示下载文件 response.setHeader("Content-Disposition", "attachment; filename=winter.jpg"); //打开文件.说明一下web 站点下载文件的原理 //1.获取到要下载文件的全路径 String path=this.getServletContext().getRealPath("/images/Winter.jpg"); //System.out.println("path="+path); //2创建文件输入流 FileInputStream fis=new FileInputStream(path); //做一个缓冲字节数组 byte buff[]=new byte[1024]; int len=0;//表示实际每次读取了多个个字节 OutputStream os=response.getOutputStream(); while((len=fis.read(buff))>0){ os.write(buff, 0, len); } //缺点: 没有进度条./图标/ //关闭 os.close(); fis.close(); } ③缓存讲解 提出问题:浏览器默认情况下,会缓存我们的页面,这样出现一个问题:如果我们的用户习惯把光标停留在地址栏,然后回车来取页面,就会默认调用cache中取数据。 有些网站要求及时性很高,因此要求我们不缓存页面 代码: //指定该页面不缓存 Ie response.setDateHeader("Expires", -1);【针对IE浏览器设置不缓存】 //为了保证兼容性. response.setHeader("Cache-Control", "no-cache");【针对火狐浏览器等】 response.setHeader("Pragma", "no-cache");【其他浏览器】 有些网站要求网页缓存一定时间,比如缓存一个小时 response.setDateHeader("Expires", System.currentTimeMillis()+3600*1000*24);后面一个参数表示设置的缓存保持时间,-1表示永远缓存 练习: 加入防止盗链下载. HttpServletResponse的再说明 getWriter() getOutputStream(); 区别 getWriter() 用于向客户机回送字符数据 getOutputStream() 返回的对象,可以回送字符数据,也
本文档为【韩顺平Servlet视频笔记】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_036912
暂无简介~
格式:doc
大小:3MB
软件:Word
页数:56
分类:互联网
上传时间:2013-08-19
浏览量:35