ImageVerifierCode 换一换
格式:DOC , 页数:61 ,大小:507KB ,
资源ID:2126040      下载积分:15 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-2126040.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(javaweb基础知识整理.doc)为本站会员(hw****26)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

javaweb基础知识整理.doc

1、一、 TOMCAT 服务器的安装与配置1.常见服务器:WebLogic(BEA) 、webSphere(IBM) 、Tomcat(Apache)2.Tomcat 的下载与安装下载地址:http:/tomcat.apache.org/安装目录不能包含中文和空格JAVA_HOME 环境变量指定 Tomcat 运行时所要用的 jdk 所在的位置,注意,配到目录就行了,不用指定到 bin。端口占用问题:netstat -ano 命令查看端口占用信息Catalina_Home 环境变量:startup.bat 启动哪个 tomcat 由此环境变量指定,如果不配置则启动当前 tomcat,推荐不要配置此环

2、境变量。3.Tomcat 的目录结构bin-存放 tomcat 启动关闭所用的批处理文件conf-tomcat 的配置文件,最终要的是 server.xml*实验:修改 servlet.xml,更改 tomcat 运行所在的端口号,从 8080 改为 80lib-tomcat 运行所需 jar 包logs-tomcat 运行时产生的日志文件temp-tomcat 运行时使用的临时目录,不需要我们关注webapps-web 应用所应存放的目录work-tomcat 工作目录,后面学 jsp 用到4.虚拟主机一个真实主机可以运行多个网站,对于浏览器来说访问这些网站感觉起来就像这些网站都运行在自己的

3、独立主机中一样,所以,我们可以说这里的每一个网站都运行在一个虚拟主机上,一个网站就是一个虚拟主机。4.1 配置虚拟主机在 server.xml 中 标签下配置,其中 name 属性指定虚拟主机名, appBase 指定虚拟主机所在的目录只在 servlet.xml 中配置 Hosts,还不能使其他人通过虚拟主机名访问网站,还需要在 DNS 服务器上注册一把,我们可以使用 hosts 文件模拟这个过程。默认虚拟主机:在配置多个虚拟主机的情况下,如果浏览器使用 ip 地址直接访问网站时,该使用哪个虚拟主机响应呢?可以在标签上设置 defaultHost 来指定。5.web 应用web 资源不能直接

4、交给虚拟主机,需要按照功能组织用目录成一个 web 应用再交给虚拟主机管理。5.1web 应用的目录结构web 应用目录| - html、css、js、jsp 静态资源和 JSP 文件都可以直接放置在 web 应用的目录下,直接放在 web 应用下的内容,浏览器可以直接访问到| - WEB-INF 可以没有,但是最好有,如果有则一定要保证他的目录结构是完整的。放置在 WEB-INF 目录下的所有资源浏览器没有办法直接进行访问。| - classes 动态 web 资源运行时的 class 文件要放在这个目录下。| - lib 动态 web 资源运行时所依赖的 jar 包要放在这个目录下。| -

5、 web.xml 整个 web 应用的配置文件,配置主页/Servlet 的映射/过滤器监听器的配置都需要依赖这个文件进行。5.2web.xml 文件的作用某个 web 资源配置为 web 应用首页将 servlet 程序映射到某个 url 地址上为 web 应用配置监听器为 web 应用配置过滤器但凡涉及到对 web 资源进行配置,都需要通过 web.xml 文件*实验:配置一个 web 应用的主页5.3web 应用的虚拟目录映射5.3.1 在 server.xml 的标签下配置如果 path=“则这个 web 应用就被配置为了这个虚拟主机的默认 web 应用。5.3.2 在 tomcat/

6、conf/引擎名/ 虚拟主机名 之下建立一个.xml 文件,其中文件名用来指定虚拟路径,如果是多级的用#代替/表示,文件中配置,如果文件名起为 ROOT.xml 则此 web 应用为默认 web 应用。这种配置方式不需要重启服务器,推荐。5.3.3 直接将 web 应用放置到虚拟主机对应的目录下,如果目录名起为 ROOT 则此 web 应用为默认 web 应用。如果三处都配置默认 web 应用则 server.xml config/./xx.xml webapps。5.4 杂项(1)打 war 包:方式一: jar -cvf news.war * 方式二:直接用压缩工具压缩为 zip 包,该后

7、缀为.war 。(2)通用 context 和通用 web.xml,所有的 都继承子 conf/context.xml,所有的 web.xml 都继承自 conf/web.xml(3)reloadable 让 tomcat 自动加载更新后的 web 应用,当 java 程序修改后不用重启,服务器自动从新加载,开发时设为 true 方便开发,发布时设为 false,提高性能。(4)Tomcat 管理平台,可以在 conf/tomcat-users.xml 下配置用户名密码及权限。6.作业配置一个 这样一台虚拟主机,其中包含 news 应用和 mail 应用,news 应用中有一个 new.ht

8、ml。实现在浏览器中输入 直接看到 new.html 中的芙蓉姐姐。二、HTTP 协议1.HTTP 协议概述HTTP 协议用于定义客户端与 web 服务器通迅的格式。HTTP 是 hypertext transfer protocol(超文本传输协议)的简写,它是 TCP/IP 协议的一个应用层协议HTTP 使用请求- 响应的方式进行传输,一个请求对应一个响应,并且请求只能是由客户端发起的。HTTP 协议的版本:HTTP/1.0、HTTP/1.1 ,其中 1.0 一次请求发起一次连接,响应过后连接自动断开。 1.1 里每次请求响应后连接将保持一段时间,这段时间内可以再执行请求响应。一次请求对

9、应一次响应,请求只能由客户端发出,服务器只能被动的等待请求做出响应2.HTTP 请求2.1 请求行GET /books/java.html HTTP/1.1请求方式 请求的资源名 所遵循的协议2.2 请求方式:GET、POST七种请求方式: POST、GET 、HEAD 、OPTIONS、DELETE 、TRACE、PUT其中 GET 方式在请求资源的 URL 后跟“?参数名= 参数值 MSIE 5.5; Windows NT 5.0) 客户端的一些基本信息Cookie 会在后面讲会话技术的时候单讲Connection: close/Keep-Alive 指定是否继续保持连接Date: Tue

10、, 11 Jul 2000 18:23:51 GMT 当前时间4.实体内容5.HTTP 响应5.1 状态行HTTP/1.1 200 OK格式: HTTP 版本号 状态码 原因叙述状态码:200:请求处理成功302:请求重定向304、307 :服务器通知浏览器使用缓存404:资源未找到500:服务器端错误5.2 若干响应头Location: http:/www.it315.org/index.jsp 配合 302 实现请求重定向Server:apache tomcat 服务器的基本信息Content-Encoding: gzip 服务器发送数据时使用的压缩格式Content-Length: 80

11、 发送数据的大小Content-Language: zh-cn 发送的数据使用的语言环境Content-Type: text/html; charset=GB2312 当前所发送的数据的基本信息, (数据的类型,所使用的编码)Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 缓存相关的头Refresh: 1;url=http:/www.it315.org 通知浏览器进行定时刷新,此值可以是一个数字指定多长时间以后刷新当前页面,这个数字之后也可以接一个分号后跟一个 URL 地址指定多长时间后刷新到哪个 URLContent-Disposition: att

12、achment;filename=aaa.zip 与下载相关的头Transfer-Encoding: chunked 传输类型,如果是此值是一个 chunked 说明当前的数据是一块一块传输的Set-Cookie:SS=Q0=5Lb_nQ; path=/search 和 cookie 相关的头,后面课程单讲ETag: W/“83794-1208174400000“ 和缓存机制相关的头Expires: -1 指定资源缓存的时间,如果取值为 0 或-1 浏览就不缓存资源Cache-Control: no-cache 缓存相关的头,如果为 no-cache 则通知浏览器不缓存Pragma: no-c

13、ache 缓存相关的头,如果为 no-cache 则不缓存以上三个头都是用来控制缓存的,是因为历史原因造成的,不同的浏览器认识不同的头,我们通常三个一起使用保证通用性。Connection: close/Keep-Alive 是否保持连接Date: Tue, 11 Jul 2000 18:23:51 GMT 当前时间3.3 实体内容三、Servlet 的开发1.servlet 简介sun 提供的一种动态 web 资源开发技术。本质上就是一段 java 小程序,可以将 Servlet 加入到 Servlet 容器中运行。*Servlet 容器 - 能够运行 Servlet 的环境就叫做 Serv

14、let 容器。 - tomcat*web 容器 - 能够运行 web 应用的环境就叫做 web 容器。 - tomcat2.Servlet 的调用过程Servlet 程序是由 WEB 服务器调用, web 服务器收到客户端的 Servlet 访问请求后: Web 服务器首先检查是否已经装载并创建了该 Servlet 的实例对象。如果是,则直接执行第步,否则执行第步。 装载并创建该 Servlet 的一个实例对象。 调用 Servlet 实例对象的 init()方法。 创建一个用于封装 HTTP 请求消息的 HttpServletRequest 对象和一个代表 HTTP 响应消息的 HttpSe

15、rvletResponse 对象,然后调用 Servlet 的 service()方法并将请求和响应对象作为参数传递进去。 WEB 应用程序被停止或重新启动之前,Servlet 引擎将卸载 Servlet,并在卸载之前调用 Servlet 的 destroy()方法。 ie web一 servlthtp:/localhost:80/day05/x1: 一web一2: 一htp一GET /day05/x HTP/1.Acept: */t-Languae: zh-cnUA-CPU: x86Host: localhost:. 3: 一一一一4: 一一一一 web一5: 一一一一web一day05/x

16、6: 一一servlt一一一一一servlt一servlt一7: 一servlt一init一8: 一servlt一service一requstresponse String dat =“helo servlt!“;OutptStrem ut =r.getOutptStream();ot.writ(dat.getBytes();9: service 一一一一response一10: 1: web一一response一一ie3.Servlet 的生命周期生命周期的概念:一件事物,什么时候生,什么时候死,以及在其生存阶段的某一时点会触发的事件,统称为该事物的生命周期。Servlet 的生命周期:通常

17、情况下,服务器会在 Servlet 第一次被调用时创建该 Servlet 类的实例对象(servlet 出生) ;一旦被创建出来,该Servlet 实例就会驻留在内存中,为后续请求服务;直至 web 容器退出,servlet 实例对象才会被销毁(servlet 死亡) 。在 Servlet 的整个生命周期内,Servlet 的 init 方法只有在 servlet 被创建时被调用一次。而对一个 Servlet 的每次访问请求都导致 Servlet 引擎调用一次 servlet 的 service 方法。对于每次访问请求,Servlet 引擎都会创建一个新的 HttpServletRequest

18、 请求对象和一个新的 HttpServletResponse 响应对象,然后将这两个对象作为参数传递给它调用的 Servlet 的 service()方法,service 方法再根据请求方式分别调用 doXXX 方法。 servlet 被销毁前,会调用 destroy() 方法。 4.Servlet 接口的继承结构Servlet 接口:定义了一个 servlet 应该具有的方法,所有的 Servlet 都应该直接或间接实现此接口|-GenericServlet:对 Servlet 接口的默认实现,通用 Servlet,这是一个抽象类,其中的大部分方法都做了默认实现,只有 service 方法是

19、一个抽象方法需要继承者自己实现|-HttpServlet:对 HTTP 协议进行了优化的 Servlet,继承自 GenericServlet 类,并且实现了其中的 service 抽象方法,默认的实现中判断了请求的请求方式,并根据请求方式的不同分别调用不同的 doXXX()方法。通常我们直接继承 HttpServlet 即可。5. Servlet 的注意事项5.1Servlet 注册由于客户端是通过 URL 地址访问 web 服务器中的资源,所以 Servlet 程序若想被外界访问,必须把 servlet 程序映射到一个 URL 地址上,这个工作在 web.xml 文件中使用元素和 元素完成

20、。 元素用于注册 Servlet,它包含有两个主要的子元素: 和,分别用于设置 Servlet的注册名称和 Servlet 的完整类名。 一个元素用于映射一个已注册的 Servlet 的一个对外访问路径,它包含有两个子元素:和 ,分别用于指定 Servlet 的注册名称和 Servlet 的对外访问路径。例如:例如:AnyNameHelloServletAnyName/demo/hello.html同一个 Servlet 可以被映射到多个 URL 上,即多个 元素的 子元素的设置值可以是同一个 Servlet 的注册名。 在 Servlet 映射到的 URL 中也可以使用*通配符,但是只能有两

21、种固定的格式:一种格式是“*.扩展名” ,另一种格式是以正斜杠(/)开头并以“/*”结尾。由于匹配符的引入有可能一个虚拟路径会对应多个 servlet-mapping,此时哪个最像找哪个 servlet,并且*.do 级别最低。AnyName*.doAnyName/action/*5.2load-on-startup如果在元素中配置了一个元素,那么 WEB 应用程序在启动时,就会装载并创建 Servlet 的实例对象、以及调用 Servlet 实例对象的 init()方法。举例:invokerorg.apache.catalina.servlets.InvokerServlet25.3 缺省

22、servlet如果一个 servlet 的对外访问路径被设置为/ ,则该 servlet 就是一个缺省 servlet,其他 servlet 不处理的请求都由它来处理。在 conf/web.xml 中配置了缺省 servlet,对静态资源的访问和错误页面的输出就是由这个缺省 servlet 来处理的。如果我们自己写一个缺省 servlet 把爸爸 web.xml 中的缺省 servlet 覆盖的话,会导致静态 web 资源无法访问。所以不推荐配置。在confweb.xml 文件中,注册了一个名称为 org.apache.catalina.servlets.DefaultServlet 的Ser

23、vlet,并将这个 Servlet 设置为了缺省 Servlet。当访问 Tomcat 服务器中的某个静态 HTML 文件和图片时,实际上是在访问这个缺省 Servlet。 其实对于静态资源的访问就是由缺省 Servlet 来执行。设置 404 页面 500 页面等提示页面也是由缺省 Servlet 来执行。通常我们不会自己去配置缺省 Servlet。5.4servlet 线程安全产生原因:由于通常情况下,一个 servlet 在内存只有一个实例处理请求,当多个请求发送过来的时候就会有多个线程操作该servlet 对象,此时可能导致线程安全问题。(1)serlvet 的成员变量可能存在线程安全

24、问题*实验:定义一个成员变量 int i = 0;在 doXXX()方法中进行 i+操作并输出 i 值到客户端,此时由于延迟可能导致线程安全问题(2)serlvet 操作资源文件时,多个线程操作同一文件引发线程安全问题*实验:请求带着一个参数过来,servlet 将请求参数写入到一个文件,再读取该文件,将读取到的值打印到客户端上,有可能有线程安全问题。解决方法:(1)利用同步代码块解决问题。缺陷是,同一时间同步代码块只能处理一个请求,效率很低下,所以同步代码块中尽量只包含核心的导致线程安全问题的代码。(2)为该 servlet 实现 SingleThreadModel 接口,此为一个标记接口,

25、被标记的 servlet 将会在内存中保存一个 servlet 池,如果一个线程来了而池中没有 servlet 对象处理,则创建一个新的。如果池中有空闲的 servlet 则直接使用。这并不能真的解决线程安全问题。此接口已经被废弃。(3)两种解决方案都不够完美,所以尽量不要在 servlet 中出现成员变量。6. ServletConfig 和初始化参数代表当前 Servlet 在 web.xml 中的配置信息。代表 servlet 配置的对象,可以在 web.xml 中 中配置。例如:Demo5Servletcn.itheima.Demo5Servletdata1value1当 servle

26、t 配置了初始化参数后,web 容器在创建 servlet 实例对象时,会自动将这些初始化参数封装到ServletConfig 对象中,并在调用 servlet 的 init 方法时,将 ServletConfig 对象传递给 servlet。进而,程序员通过ServletConfig 对象就可以得到当前 servlet 的初始化参数信息。String getServletName() - 获取当前 Servlet 在 web.xml 中配置的名字String getInitParameter(String name) - 获取当前 Servlet 指定名称的初始化参数的值Enumeratio

27、n getInitParameterNames() - 获取当前 Servlet 所有初始化参数的名字组成的枚举ServletContext getServletContext() - 获取代表当前 web 应用的 ServletContext 对象7. ServletContext1.代表当前 web 应用的对象WEB 容器在启动时,它会为每个 WEB 应用程序都创建一个对应的 ServletContext 对象,它代表当前 web 应用。ServletConfig 对象中维护了 ServletContext 对象的引用,开发人员在编写 servlet 时,可以通过ServletConfig

28、.getServletContext 方法获得 ServletContext 对象。由于一个 WEB 应用中的所有 Servlet 共享同一个 ServletContext 对象,因此 Servlet 对象之间可以通过ServletContext 对象来实现通讯。ServletContext 对象通常也被称之为 context 域对象。2.作为域对象使用在不同 servlet 之间传递数据,作用范围是整个 web 应用。生命周期:当 web 应用被加载进容器时创建代表整个 web 应用的 ServletContext 对象。当服务器关闭或 web 应用被移除出容器时,ServletContex

29、t 对象跟着销毁。方法:void setAttribute(String,Object);Object getAttribute(String);void removeAttribute(String);域:一个域就理解为一个框,这里面可以放置数据,一个域既然称作域,他就有一个可以被看见的范围,这个范围内都可以对这个域中的数据进行操作,那这样的对象就叫做域对象。3.初始化参数在 web.xml 可以配置整个 web 应用的初始化参数,利用 ServletContext 去获得param1pvalue1this.getServletContext().getInitParameter(“para

30、m1“)this.getServletContext().getInitParameterNames()4.在不同 servlet 之间进行转发this.getServletContext().getRequestDispatcher(“/servlet/Demo10Servlet“).forward(request, response);方法执行结束,service 就会返回到服务器,再有服务器去调用目标 servlet,其中 request 会重新创建,并将之前的request 的数据拷贝进去。5.读取资源文件5.1 由于相对路径默认相对的是 java 虚拟机启动的目录,所以我们直接写相对

31、路径将会是相对于 tomcat/bin 目录,所以是拿不到资源的。如果写成绝对路径,当项目发布到其他环境时,绝对路径就错了。5.2 为了解决这个问题 ServletContext 提供了 this.getServletContext().getRealPath(“/1.properties“),给进一个资源的虚拟路径,将会返回该资源在当前环境下的真实路径。this.getServletContext().getResourceAsStream(“/1.properties“),给一个资源的虚拟路径返回到该资源真实路径的流。5.3 当在非 servlet 下获取资源文件时,就没有 Servlet

32、Context 对象用了,此时只能用类加载器classLoader.getResourceAsStream(“././1.properties“),此方法利用类加载器直接将资源加载到内存中,有更新延迟的问题,以及如果文件太大,占用内存过大。classLoader.getResource(“./1.properties“).getPath(),直接返回资源的真实路径,没有更新延迟的问题。四、Requestcharset=gb2312“)。 response.getWriter().write(“中文”); 输出数据,这是一个字符流,response 会将此字符进行转码操作后输出到浏览器,这个过程

33、默认使用 ISO8859-1 码表,而 ISO8859-1 中没有中文,于是转码过程中用?代替了中文,导致乱码问题。可以指定 response 在转码过程中使用的目标码表,防止乱码。 response.setCharcterEncoding(“gb2312“);其实 response 还提供了 setContentType(“text/html;charset=gb2312“)方法,此方法会设置 content-type 响应头,通知浏览器打开的码表,同时设置 response 的转码用码表,从而一行代码解决乱码。1.2 文件下载利用 Response 设置 content-dispositi

34、on 头实现文件下载。设置响应头 content-disposition 为“attachment;filename=xxx.xxx” 。利用流将文件读取进来,再利用 Response 获取响应流输出。如果文件名为中,一定要进行 URL 编码,编码所用的码表一定要是 utf-8。如果文件名中包含中文,则文件名要进行 URL 编码,URLEncoding.encode(啊啊.jpg,utf-8); 如果不进行编码则文件名显示错误并且不可下载。1.3refresh 头控制定时刷新设置响应头 Refresh 为一个数值,指定多少秒后刷新当前页面。设置响应头 Refresh 为 3;url=/Day0

35、5/index.jsp,指定多少秒后刷新到哪个页面。可以用来实现注册后“注册成功,3 秒后跳转到主页”的功能。在 HTML 可以利用标签模拟响应头的功能。1.4 设置缓存利用 response 设置 expires、 Cache-Control、Pragma 实现浏览器是否缓存资源,这三个头都可以实现,但是由于历史原因,不同浏览器实现不同,所以一般配合这三个头使用。控制浏览器不要缓存(验证码图片不缓存)设置 expires 为 0 或-1 设置 Cache-Control 为 no-cache、Pragma 为 no-cache。控制浏览器缓存资源。即使不明确指定浏览器也会缓存资源,这种缓存没

36、有截至日期。当在地址栏重新输入地址时会用缓存,但是当刷新或重新开浏览器访问时会重新获得资源。如果明确指定缓存时间,浏览器缓存是,会有一个截至日期,在截至日期到期之前,当在地址栏重新输入地址或重新开浏览器访问时都会用缓存,而当刷新时会重新获得资源。1.5 请求重定向古老方法:response.setStatus(302);response.addHeader(“Location“,“URL“);快捷方式:response.sendRedirect(“URL“);在大部分情况下请求重定向和转发的效果是差不多的,这时候我们推荐使用转发,以减少对服务器的访问。而在某些情况下是需要使用转发的,目的往往是

37、为了改变浏览器地址栏里的地址(如登录成功后转到主页) ,和更改刷新操作(如加入商品到购物车后转到购物车页面的操作)1.6 注意事项 getOutputStream 和 getWriter 这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。 Servlet 程序向 ServletOutputStream 或 PrintWriter 对象中写入的数据将被 Servlet 引擎从 response 里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。 Serlvet 的 service 方法结束后,Servlet 引擎将检查

38、getWriter 或 getOutputStream 方法返回的输出流对象是否已经调用过 close 方法,如果没有, Servlet 引擎 tomcat 将调用 close 方法关闭该输出流对象。2. RequestRequest 代表请求对象,其中封装了对请求中具有请求行、请求头、实体内容的操作的方法。ServletRequest - 通用 request,提供一个 request 应该具有的最基本的方法。|-HttpServletRequest - ServletRequest 的孩子,针对 http 协议进行了进一步的增强。2.1 获取客户机信息getRequestURL 方法返回客

39、户端发出请求完整 URLgetRequestURI 方法返回请求行中的资源名部分,在权限控制中常用getQueryString 方法返回请求行中的参数部分getRemoteAddr 方法返回发出请求的客户机的 IP 地址getMethod 得到客户机请求方式getContextPath 获得当前 web 应用虚拟目录名称,特别重要!,工程中所有的路径请不要写死,其中的 web应用名要以此方法去获得。2.2 获取请求头信息getHeader(name)方法 - String ,获取指定名称的请求头的值getHeaders(String name)方法 - Enumeration ,获取指定名称的

40、请求头的值的集合,因为可能出现多个重名的请求头getHeaderNames 方法 - Enumeration ,获取所有请求头名称组成的集合getIntHeader(name)方法 - int ,获取 int 类型的请求头的值getDateHeader(name)方法 - long(日期对应毫秒) ,获取一个日期型的请求头的值,返回的是一个 long 值,从1970 年 1 月 1 日 0 时开始的毫秒值*实验:通过 referer 信息防盗链String ref = request.getHeader(“Referer“);if (ref = null | ref = “ | !ref.st

41、artsWith(“http:/localhost“) response.sendRedirect(request.getContextPath() + “/homePage.html“); else this.getServletContext().getRequestDispatcher(“/WEB-INF/fengjie.html“).forward(request, response);2.3 获取请求参数getParameter(name) - String 通过 name 获得值getParameterValues(name)- String 通过 name 获得多值 checkb

42、oxgetParameterNames - Enumeration 获得所有请求参数名称组成的枚举getParameterMap - Map 获取所有请求参数的组成的 Map 集合,注意,其中的键为 String,值为 String获取请求参数时乱码问题:浏览器发送的请求参数使用什么编码呢?当初浏览器打开网页时使用什么编码,发送就用什么编码。服务器端获取到发过来的请求参数默认使用 ISO8859-1 进行解码操作,中文一定有乱码问题对于 Post 方式提交的数据,可以设置 request.setCharacterEncoding(“gb2312“);来明确指定获取请求参数时使用编码。但是此种方

43、式只对 Post 方式提交有效。对于 Get 方式提交的数据,就只能手动解决乱码:String newName = new String(name.getBytes(“ISO8859-1“),“gb2312“);此种方法对 Post 方式同样有效。在 tomcat 的 server.xml 中可以配置 http 连接器的 URIEncoding 可以指定服务器在获取请求参数时默认使用的编码,从而一劳永逸的决绝获取请求参数时的乱码问题。也可以指定 useBodyEncodingForURI 参数,令request.setCharacterEncoding 也对 GET 方式的请求起作用,但是这俩

44、属性都不推荐使用,因为发布环境往往不允许修改此属性。2.4 利用请求域传递对象生命周期:在 service 方法调用之前由服务器创建,传入 service 方法。整个请求结束,request 生命结束。作用范围:整个请求链。作用:在整个请求链中共享数据,最常用的:在 Servlet 中处理好的数据要交给 Jsp 显示,此时参数就可以放置在Request 域中带过去。 setAttribute 方法 getAttribute 方法 removeAttribute 方法 getAttributeNames 方法2.5request 实现请求转发ServletContext 可以实现请求转发,req

45、uest 也可以。在 forward 之前输入到 response 缓冲区中的数据,如果已经被发送到了客户端,forward 将失败,抛出异常在 forward 之前输入到 response 缓冲区中的数据,但是还没有发送到客户端,forward 可以执行,但是缓冲区将被清空,之前的数据丢失。注意丢失的只是请求体中的内容,头内容仍然有效。在一个 Servlet 中进行多次 forward 也是不行的,因为第一次 forward 结束,response 已经被提交了,没有机会再forward 了。在最终输出数据的 Servlet 执行完成后,response 实体内容中的数据将会被设置为已提交的

46、状态,再往里写数据也不会起作用。总之,一条原则,一次请求只能有一次响应,响应提交走后,就再没有机会输出数据给浏览器了。2.6RequestDispatcher 进行 include 操作forward 没有办法将多个 servlet 的输出组成一个输出,因此 RequestDispatcher 提供了 include 方法,可以将多个Servlet 的输出组成一个输出返回个浏览器。被包含的 Servlet 程序不能改变响应消息的状态码和响应头,如果它里面存在这样的语句,这些语句的执行结果将被忽略。request.getRequestDispatcher(“/servlet/Demo17Serv

47、let“).include(request, response);response.getWriter().write(“from Demo16“);request.getRequestDispatcher(“/servlet/Demo18Servlet“).include(request, response);常用在页面的固定部分单独写入一个文件,在多个页面中 include 进来简化代码量。2.7 重定向和转发的区别 RequestDispatcher.forward 方法只能将请求转发给同一个 WEB 应用中的组件;而 HttpServletResponse.sendRedirect 方

48、法还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对 URL 重定向到其他站点的资源。 如果传递给 HttpServletResponse.sendRedirect 方法的相对 URL 以“/”开头,它是相对于服务器的根目录;如果创建RequestDispatcher 对象时指定的相对 URL 以“/ ”开头,它是相对于当前 WEB 应用程序的根目录。 调用 HttpServletResponse.sendRedirect 方法重定向的访问过程结束后,浏览器地址栏中显示的 URL 会发生改变,由初始的 URL 地址变成重定向的目标 URL;调用 RequestDispatcher

49、.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的 URL 地址不变。 HttpServletResponse.sendRedirect 方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个 URL 的访问请求;RequestDispatcher.forward 方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。 RequestDispatcher.forward 方法的调用者与被调用者之间共享相同的 request 对象和 response 对象,它们属于同一个访问请求和响应过程;而 HttpServletResponse.sendRedirect 方法调用者与被调用者使用各自的 request 对象和response 对象,它们属于两个独立的访问请求和响应过程。 2.8 常用地址写法绝对路径:以/开头的路径就叫做绝对路径,绝对路径在

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。