*1 ServletContext对象
1)在web应用中,由服务器创建的唯一的一个对象是ServletContext
2)ServletContext对象在每一个Servlet中取得都是相同到
3)ServletContext对象在存取方法:
存ServletContext.setAttribute(String,Object):void
取ServletContext.getAttribute(String):Object
4)在web应用中,可以取得web应用的初始化参数
5)ServletContxt对象能够实现转发功能,即307+location
ServletContext context = this.getServletContext();
//定位需要转发的路径
RequestDispatcher rd = context.getRequestDispatcher("/success.html");
//真正转向页面
rd.forward(request,response);
6)如果以传统方式读取资源文件(txt/xml/properties),是相对于web服务器的bin/目录而言
*7)如果以ServletContext方式读取资源文件(txt/xml/properties),是相对于web服务器的当前web应用目录而言
此时/表示:当前web应用,即day06
*8)类加载器只能加载IDE工具下src目录下的资源文件,其它目录无法加载
此时/表示:/WEB-INF/classes/目录
10)其实浏览器访问的静态资源,本质上是由一个缺省的Servlet来帮你处理的
2 关于路径的问题
1)二种加载方式的区别?
服务端
ServletContext方式:
1)资源的文件的位置任意
2)加载文件时,只会以流的方式读取,不会一次性加载全部
3)/表示当前web应用,即day06
类加载器方式:
1)资源文件的位置只能放置类路径下,即IDE工具的src目录下
2)加载文件时,会一次性加载全部文件
3)/表示当前/WEB-INF/classes/
2)有关/的问题?
物理硬盘路径使用\[window系统]
网络路径使用/
如果/表示客户端路径的话,表示tomcat/webapps/目录
*3 缓存应用
1)对于浏览器的刷新而言,当浏览器缓存中有资源,也会找服务端要资源,只有在回车访问情况下,才找缓存
2)可以通过重写getLastModified()方法来阻止每次刷新都访问服务端,以减轻服务端的压力
*4 response的应用
1)web容器会传入与web容器相关的HttpServletRequest和HttpServletResponse对象的实现
2)每次浏览器请求,web容器会创建新的请求和响应对象,这二个对象的生命周期仅限于web容器内
3)对于字节方式来说,输出数字,respnse会编查ISO8859-1编码表,将码表的中的数字对应的字符取出来显示,即遇数字转字符
4)如果要输出数字,提前将数字转化成字符串
5)对于字符方式来说,可以直接输出数字
6)将中文转成字节数组时,查UTF-8码表,如果不写的话,默认查ISO8859-1码表
7)以字符方式输出中文,提前设置编码方式;以字节方式输出中文,提前设置转化编码方式
字符:
response.getOutputStream().write("中国".getBytes("UTF-8"));
字节:
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("美国");
8)HTML中的所有<meta/>标签,类似于response.setHeader(),目的是通知浏览器以特定的方式显示页面的信息
9)重定向是客户端和服务端的共同行为,
response.sendRedirect("/day06/message.html")其中/表示webapps目录
5 response细节
1)以字符或字节方式输出内容的话,只能使用其中一种
2)响应头会以叠加的方式设置,在相同的情况下,后者起决定作用
3)在没有关闭流的情况下,web容器帮你自动关闭所有从response中取得IO流
6 request应用
1)表示web浏览器向web服务端的请求
2)url表示访问web应用的完整路径:http://localhost:8080/day06/Demo1
uri表示访问web应用的资源路径:/day06/Demo1
queryString表示?开头的参数;name=jack
pathInfo:路径之外的信息,如果没有,返回null