工具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 被调用时才会被执行。
/************************Servlet的doXXX方法中的编码方式和6个标准对象**********************************************/
//*****************Servlet的doXXX方法中的编码方式
//设置请求对象的编码方式
request.setCharacterEncoding("utf-8");
//这句话的意思,是告诉servlet用UTF-8转码,而不是用默认的ISO8859
response.setCharacterEncoding("utf-8");
//这句话的意思,是让浏览器用utf8来解析返回的数据
response.setContentType("text/html;charset=utf-8");
//请求转发器:浏览器地址栏不变,页面内容到显示跳转的页面,request对象有转发,所以,
//相关数据可以取到
//request.getRequestDispathcer("member.jsp"),forward(request,response);
//响应重写向:浏览器地址栏变化,页面内容到显示跳转的页面,request对象未转发,所以,
//相关数据取不到
//响应重定向相当于,手工改变浏览器的地址栏
//******************Servlet的doXXX方法中的6个标准对象(含request和response )
//从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()方法的print和println中都是抑制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的缓冲区后再输出
//out为jsp的内置对象,刷新jsp页面,自动初始化获得out对象,所以使用out对象是需要刷新页面的,
//out的print()方法和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)跳转到其他资源 其身上提供了forward和include方法,简化重定向和转发的操作
以上是关于工具Servlet流作用域和其他流说明的主要内容,如果未能解决你的问题,请参考以下文章