工具Servlet流作用域和其他流说明

Posted yao-zhen-peng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工具Servlet流作用域和其他流说明相关的知识,希望对你有一定的参考价值。

/………………………………………………………………工程一起动时就执行servlet 里的方法…………………------------------------/

如果要想让 servlet 的 init () 方法在服务器启动 时就被执行,则需要在 web.xml 中相应的 servlet 下配置

<servlet >

   <servlet -name>test</servlet -name>

<servlet -class>com.zzk.test.MyServlet</servlet -class>

<load-on-startup>1</load-on-startup>

</servlet >

<servlet -mapping>

   <serlvet-name>test</servlet -name>

   <url-pattern>/test</url-pattern>

</servlet -mapping>

即将: <load-on-startup>1</load-on-startup>设置为正整数(包括0)

这样此SERVLET 就会在服务器启动 时执行了。(注意:如果设置为负整数,则不会在启动 服务器时执行)

如果不配置,启动 服务器时也不会执行,而要等此SERVLET 被调用时才会被执行。

 

 

/************************ServletdoXXX方法中的编码方式和6个标准对象**********************************************/

//*****************ServletdoXXX方法中的编码方式

//设置请求对象的编码方式

request.setCharacterEncoding("utf-8");

//这句话的意思,是告诉servletUTF-8转码,而不是用默认的ISO8859

response.setCharacterEncoding("utf-8");

//这句话的意思,是让浏览器用utf8来解析返回的数据

response.setContentType("text/html;charset=utf-8");

 

//请求转发器:浏览器地址栏不变,页面内容到显示跳转的页面,request对象有转发,所以,

//相关数据可以取到

//request.getRequestDispathcer("member.jsp"),forward(request,response);

//响应重写向:浏览器地址栏变化,页面内容到显示跳转的页面,request对象未转发,所以,

//相关数据取不到

//响应重定向相当于,手工改变浏览器的地址栏

//******************ServletdoXXX方法中的6个标准对象(requestresponse )

//request里获取session的对象和application对象

javax.servlet.http.HttpSession session=request.getSession();

javax.servlet.ServletContext application=request.getServletContext();

//调用继承的方法来获取config对象

javax.servlet.ServletConfig config=getServletConfig();

//response对象里获取out对象-response.getWriter()之前,要先设置页面的编码

java.io.PrintWriter out=response.getWriter();

 

 

 

 

-----------------------------------------------------------------------------------Servlet 返回到页面的流说明-----------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------response对象

---------------------------------------------------------------------------------------------response.getWriter().write()说明

//write():仅支持输出字符类型数据,字符、字符数组、字符串等

//java.io.PrintWriter

//直接将数据输出到页面

//response.getWriter()响应信息通过out对象输出到网页上,当响应结束时它自动被关闭,与jsp页面无关,

无需刷新页面

//response.getWrite()方法的printprintln中都是抑制ioexception异常的,不会有ioexception

 

response.setHeader("Content-type", "text/html;charset=UTF-8"); //

-------------------------------------------------------------------------------------------------------------------response.setHeader设置页面无缓存
response.setHeader("pragma", "no-cache");
response.setHeader("cache-control", "no-cache");

 

 

 

----------------------------------------------------------------------------------------------out.print()说明

//print():可以将各种类型(包括Object)的数据通过默认编码转换成bytes字节形式,

这些字节都通过write(int c)方法被输出

//JspWriter

//:JspWriter相当于一个带缓存功能的printWriter,它不是直接将数据输出到页面,

而是将数据刷新到response的缓冲区后再输出

//outjsp的内置对象,刷新jsp页面,自动初始化获得out对象,所以使用out对象是需要刷新页面的,

//outprint()方法和println()方法在缓冲区溢出并且没有自动刷新时候会产生ioexception

//out.println(""); 方法并不能也页面布局换行,只能领html代码换行,要实现页面布局换行可以:out.println("</br>")

 

-------------------------------------------------------------------------------------------------------------------------------------------------------request对象

request的各种方法说明  https://www.cnblogs.com/xrq730/p/4903161.html

request.getRemoteAddr();//获得客户端的ip地址
request.getRemoteHost();//获得客户端的主机名

读取资源文件。

1、由于相对路径默认相对的是java虚拟机启动的目录,所以我们直接写相对路径将会是相对于tomcat/bin目录,所以是拿不到资源的。如果写成绝对路径,当项目发布到其他环境时,绝对路径就错了。

2、为了解决这个问题ServletContext提供了:

  this.getServletContext().getRealPath("/1.properties"),给进一个资源的虚拟路径,将会返回该资源在当前环境下的真实路径。        

this.getServletContext().getResourceAsStream("/1.properties"),给一个资源的虚拟路径返回到该资源真实路径的流。

(了解)3、当在非servlet下获取资源文件时,就没有ServletContext对象用了,此时只能用类加载器     

classLoader.getResourceAsStream("../../1.properties"),此方法利用类加载器直接将资源加载到内存中,有更新延迟的问题,以及如果文件太大,占用内存过大。     

classLoader.getResource("../1.properties").getPath(),直接返回资源的真实路径,没有更新延迟的问题。

(了解)3、当在非servlet下获取资源文件时,就没有ServletContext对象用了,此时只能用类加载器     

classLoader.getResourceAsStream("../../1.properties"),此方法利用类加载器直接将资源加载到内存中,有更新延迟的问题,以及如果文件太大,占用内存过大。     

classLoader.getResource("../1.properties").getPath(),直接返回资源的真实路径,没有更新延迟的问题。

 

--------------------------------------------------------------------------------------四大作用域----------------------------------------------------------------------------------

-----------------------------------------------------------------------------------application  (ServletContext)

1、生命周期:当Web应用被加载进容器时创建代表整个web应用的application对象,当服务器关闭或Web应用被移除时,application对象跟着销毁。

2、作用范围:整个Web应用。

3、作用

a) application.setAttribute(“key”,Object value):存储整个web应用公用的数据

b) 在不同Servlet 之间转发(不常用)

       

-----------------------------------------------------------------------------------session   (HttpSession)

HttpSession 在服务器中,为浏览器创建独一无二的内存空间,在其中保存会话相关的信息。  

    1、生命周期:在第一次调用 request.getSession() 方法时,服务器会检查是否已经有对应的session,如果没有就在内存  中创建一个session并返回。   

当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session   

如果服务器非正常关闭(强行关闭),没有到期的session也会跟着销毁。   

如果调用session提供的invalidate() ,可以立即销毁session   

注意:服务器正常关闭,再启动,Session对象会进行钝化和活化操作。同时如果服务器钝化的时间在session 默认销毁时间之内,则活化后session还是存在的。否则Session不存在。  如果JavaBean 数据在session钝化时,没有实现Serializable 则当Session活化时,会消失。

 2、作用范围:一次会话。  

    3作用:保存登录的用户信息、购物车信息等

-----------------------------------------------------------------------------------request   --(HttpServletRequest)

1、生命周期:在service 方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。  

2、作用范围:整个请求链(请求转发也存在)。  

3、作用:  在整个请求链中共享数据。最常用到:在Servlet 中处理好的数据交给Jsp显示,此时参数就可以放置在Request域中带过去。

 

-----------------------------------------------------------------------------------pageContext—(PageContext)

     1、生命周期:当对JSP的请求时开始,当响应结束时销毁。  

    2、作用范围:整个JSP页面,是四大作用域中最小的一个。  

    作用:   

        (1)获取其它八大隐式对象,可以认为是一个入口对象。   

        (2)获取其所有域中的数据     

            pageContext  操作所有域中属性的方法      

             public java.lang.Object getAttribute(java.lang.String name,int scope)      

              public void setAttribute(java.lang.String name, java.lang.Object value,int scope)      

              public void removeAttribute(java.lang.String name,int scope)            

              pageContext 中代表域的常量     

                PageContext.APPLICATION_SCOPE      

                PageContext.SESSION_SCOPE      

                PageContext.REQUEST_SCOPE      

                PageContext.PAGE_SCOPE            

 

   findAttribute方法,在四大域中搜寻属性,搜寻的顺序是page域、request域、session域、application域,从小域到大域开始搜索,如果搜索到就直接获取该值,如果所有域中都找不到,返回一个null(el表达式不同,此处返回null,对网页是不友好的)         

  (3)跳转到其他资源      其身上提供了forwardinclude方法,简化重定向和转发的操作

 

 

 

 

 




以上是关于工具Servlet流作用域和其他流说明的主要内容,如果未能解决你的问题,请参考以下文章

js 基础 作用域和闭包

你必须知道的javascript(上)- 1.作用域和闭包

作用域和内置对象

JavaScript中作用域和预解析

关于作用域和预解析的不常见重要知识

jsp都有哪些内置对象?作用分别是啥?分别有啥方法