分享

Servlet(二)

 风吹乱了流年 2016-10-15

           Servlet只是一种规范,满足我们的软件开发,还需要其它很多相关联的对象,这里介绍一下:1,ServletConfig,ServeltContext  2,HttpServletRequest    3Cookie,Session

 

   一,关于Servlet的两个对象:


         1,ServletConfig:Javax.servlet.ServletConfig:SUN制定的接口。


        ServletConfig对象是Servlet配置信息对象,Servlet类在web.xml文件中配置的信息会自动被封装到对应的ServletConfig对象中,一个Servlet对象对应一个ServletConfig对象。ServletConfig对象的创建时刻和Servlet几乎在同一时间创建。这个好比,我们每个人都有一份档案,档案随着我们的出生而来,随着我们的死亡而去,记录着我们的所有相关信息。

 

          2ServletContext:javax.servlet.ServletContextSUN制定的接口。


          ServletContext对象在Tomcat服务器启动阶段解析web.xml文件的时候被创建,一个webapp对应一个ServletContext对象。该对象一旦被创建不会被销毁,除非Tomcat服务器关闭。(web.xml文件和ServletContext对象是对应关系。一个web.xml文件对应一个ServletContext)。这个其实就相当于JSP中的九大内置对象之一——application


          这个看一下它的几个方法,还是会经常用的,例如一个网站的访问量等,设计到整个项目的变量,所有用户共享的数据需要存储在ServletContext中:


  1. 获取上下文初始化参数的所有name
    1. Enumeration<String> names = application.getInitParameterNames();
  1. 通过上下文初始化参数的name获取value
    1. String value = application.getInitParameter(String name);
  1. 获取绝对路径
    1. String path = application.getRealPath(“/index.html”); / 开始,代表webapp的根
  1. 存储数据
    1. application.setAttribute(String name,Object obj);
    2. 取数据
    3. Object o = application.getAttribute(String name);
  1. 删除数据
    1. application.removeAttribute(String name);

 


     分析总结一下:


          对于Servlet这三个对象,他们之间的关系可以看做这张图的:





     二,HttpServletRequest   ,这个是和HttpServlet关联的一个对象,但是在应用中,它在数据传输方面起着非常重要的作用,所以拿出来总结一下:

            

           1javax.servlet.http.HttpServletRequestSUN制定的规范、接口。

 

           2,简介:HttpServletRequest我们称作请求,这个请求对象的创建是Tomcat服务器完成的。代表一次请求,一次请求对应一个request对象。“HTTP请求协议”中所有的数据都被封装到request对象中,所以我们通过request对象可以获取用户提交的所有数据。


                3,常用方法:

       获取请求路径

  • String path = request.getContextPath();

获取请求URI

  • String uri = request.getRequestURI();

获取参数Map

  • Map<String,String[]> parameterMap = request.getParameterMap();

获取参数Map集合的所有key,获取用户提交数据的所有name

  • Enumeration<String> parameterNames = request.getParameterNames();

通过参数Map集合的key,获取参数Map集合的value(适合于复选框checkbox

  • String[] parameterValues = request.getParameterValues(String name);

通过参数Map集合的key获取参数Map集合value(一维数组)的首元素

  • String value = request.getParameter(String name);

获取客户端IP地址

  • String ip = request.getRemoteAddr();

转发(转发的下一个资源可能是ServletJSPHTML),转发是一次请求。

  • request.getRequestDispatcher(资源路径”).forward(request,response);

     

           分析总结:HttpServletRequest在数据传递方面非常重要,代表着一次请求。在下边的Session中,会对比一下request,session,application三者。



       三,CookieSeesion对象:


           1Cookie:


              aCookie的原理:Cookie是在服务器上创建,发送到浏览器客户端,并保存在浏览器上的一个Java对象;


              bCookie和路径的关系:默认情况下,Cookie绑定其路径本身,相同根路径,子路径,都可以触发Cookie的发送;绑定情况下,只受固定的路径进行触发。

 

             cCookie和时间的关系和保存方式的关系:默认情况下,Cookie会存储到缓存当中,关闭浏览器,其当自动消失,当设定时间值>0时,会保存到硬盘上,0为无效的Cookie<0则相当于没有设置时间相当于默认的情况。


            分析总结:也就是在我们浏览器上保存了访问服务器的一些信息,(这个在我们使用的浏览器上应该经常见到的,例如访问历史记录,几周内自动登录等功能)方便我们对服务器的访问。

         

          2HttpSession


              aSession的工作原理:javawebsession是一个存储在WEB服务器端的java对象,该对象代表用户和WEB服务器的一次会话,通过session对象可以完成数据的存取,而放在session对象中的数据都是用户相关的。系统为每个访问者都设立一个独立的session对象,用以存取数据,并且各个访问者的session对象互不干扰。sessioncookie是紧密相关的。客户端通过将cookie中数据发送到服务器端,服务器从session中读取数据,进行数据展示,加快速度。例如用户姓名等信息会存放到session中。


              b,Session的常用方法:

     

  • 获取session对象(1):request.getSession(true); request.getSession();
    • 获取session对象,如果获取不到则新建
  • 获取session对象(2):request.getSession(false);
    • 获取session对象,如果获取不到则返回null
  • session中存储数据:session.setAttribute("name",ObjectValue);
  • session中获取数据:Object value = session.getAttribute("name");
  • 删除session中某个数据:session.removeAttribute("name");
  • 使session失效:session.invalidate();

           


               c,Session对象的超时设置的三种方式:


  • CATALINA_HOME/conf/servler.xml文件中定义:

             <Context path="/test"

docBase="/test"

defaultSessionTimeOut="3600"

isWARExpanded="true"

isWARValidated="false"

isInvokerEnabled="true"

isWorkDirPersistent="false"/>



  • web.xml中定义:

<session-config>

<session-timeout>30</session-timeout>

</session-config>



  • 在程序中定义:

session.setMaxInactiveInterval(30*60);

 


          分析总结:request,session,aplication,都是用来专门存储数据的,那么他们都是存储什么数据呢?有什么选择原则么?


               1,request是请求范围的,只针对一次请求有效,范围最小,用来存储一次请求中需要的数据,消耗内存较少,最优选择;

               2,session是用户级别的,一个用户一个session,范围中间,用来存储和用户级别有关的数据,选择次之;

              3,application是程序级别的,一个应用程序,一个application,用来存储和整个程序有关的数据,消耗内存较大,能不用则不用,但是向访问量等全局数据还是需要使用的。

 



          综上为Servlet开发中用到的一次重要对象,相互之间的关系,相互之间的区别,每一个对象的功能,使用,都需要我们熟练掌握,非常重要的。


 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多