Java Web总结六ServletContext、Response、Request

一、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。

原文地址:https://www.cnblogs.com/FlySheep/p/3624711.html