菜单

工具Servlet流、作用域和其它流说明

2018年11月15日 - jQuery

/………………………………………………………………工程共动时就尽servlet 里之措施…………………————————/

作用域:在不同的限制实现多少的共享。

假设如惦记让 servlet 的 init ()
方法以服务器启动 时即令叫实践,则需以
web.xml 中相应的 servlet 下配置

名称 类型 描述
page PageContext 当前页面操作,在Jsp中使用较多
request HttpServletRequest 当前的一次请求,在同一次请求中可以获取该作用域的共享数据
session HttpSession 表示一次会话,只要是在同一次会话中就能共享数据
application ServletContext 表示一次应用,在服务器启动的时候创建,在关闭服务器时候销毁

<servlet >

留神:往哪个作用域中存放数据,就不得不从哪个作用域中获。

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

设置共享数据
作用域对象.setAttribute(name, value);

获取共享数据
作用域对象.getAttribute();

修改共享数据
重新设置一个同名的共享数据

删除共享数据
作用域对象.removeAttribute(name);

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

ServletContext 对象获得与常用API

ServletContext接口:表示手上全方位应用对象,在服务器被的时光创建,在关门的时销毁

public class AServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //父类GenericServlet 实现了该接口
        super.getServletContext();

        //Servlet3.0往后
        req.getServletContext();

        //Servlet3.0之前
        req.getSession().getServletContext();
    }
}

@WebServlet(value = "/include/a")
public class AServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //Servlet3.0往后
        req.getServletContext().setAttribute(name, object);;

        //拿取全局参数

        req.getServletContext().getInitParameter(name);

        //根据文件相对路径拿去绝对路径
        req.getServletContext().getRealPath("/index.html");
    }
}

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0" metadata-complete="false">

    <!-- 全局初始化参数 在所有Servlet中都能获取 -->
    <context-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </context-param>

</web-app>

<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方法,简化重定向同转化的操作

 

 

 

 

 

相关文章

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图