一、ServletContext对象
1、在Web应用中,由服务器创建的唯一一个对象是ServletContext。
2、ServletContext对象在每一个Servlet中取得都是相同的。
3、ServletContext对象的存取方法:
存ServletContext.setAttribute(String , Object):void
取ServletContext.getAttribute(String):Object
4、在Web应用中,可以取得Web应用的初始化参数。
5、ServletContext对象可以实现转发功能,即307+location。转发代码如下:
ServletContext context = this.getServletContext();
//定位需要转发的路径
RequestDispatcher rd=context.getRequestDispatcher("/success.html");
//真正转向页面
rd.forward(request,response);
6、读取资源文件的三种方式:
1)传统方式:
File file = new File("src/cn/itcast/web/servlet/config.properties");
2)ServletContext加载:
InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/cn/itcast/web/servlet/config.properties");
3)类路径加载:
InputStream is = this.getClass().getClassLoader().getResourceAsStream("/cn/itcast/web/servlet/config.properties");
4)三种方式的区别:
(1)如果以传统方式读取资源文件(txt/xml/properties),是相对于web服务器的bin/目录而言。
(2)如果以ServletContext方式读取资源文件(txt/xml/properties),是相对于web服务器的当前web应用目录而言。此时/表示:当前web应用,即day06。
(3)类加载器只能加载IDE工具下src目录下的资源文件,其它目录无法加载。此时/表示:/WEB-INF/classes/目录。
7、其实浏览器访问的静态资源,本质上是由一个缺省的Servlet来帮你处理的。
二、关于路径的问题
1、两种加载方式的区别:
1)ServletContext方式:
(1)资源的文件的位置任意。
(2)加载文件时,只会以流的方式读取,不会一次性加载全部。
(3)/表示当前web应用,即day06。
2)类加载器方式:
(1)资源文件的位置只能放置类路径下,即IDE工具的src目录下。
(2)加载文件时,会一次性加载全部文件。
(3)/表示当前/WEB-INF/classes/
2、有关路径中/的问题:
1)物理硬盘路径使用\[window系统]。
2)网络路径使用/。
3)如果/表示客户端路径的话,表示tomcat/webapps/目录。
三、缓存应用
1、对于浏览器的刷新而言,当浏览器缓存中有资源,也会找服务端要资源,只有在回车访问情况下,才找缓存。
2、可以通过重写getLastModified()方法来阻止每次刷新都访问服务端,以减轻服务端的压力。
四、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目录
五、Response细节
1、以字符或字节方式输出内容的话,只能使用其中一种。
2、响应头会以叠加的方式设置,在相同的情况下,后者起决定作用。
3、在没有关闭流的情况下,web容器帮你自动关闭所有从response中取得IO流。
六、request应用
1、表示web浏览器向web服务端的请求。
2、url表示访问web应用的完整路径:http://localhost:8080/day06/Demo1
3、uri表示访问web应用的资源路径:/day06/Demo1
4、queryString表示?开头的参数;name=jack
5、pathInfo:路径之外的信息,如果没有,返回null。