最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

cookie_session的详细用法

来源:动视网 责编:小OO 时间:2025-10-03 04:20:30
文档

cookie_session的详细用法

相对路径与绝对路径相对路径:链接地址表单提交地址重定向response.sendRedirect("list.jsp");转发request.getRequestDispatcher("listEmp.jsp");(1)什么是相对路径?不以"/"开头的路径。(2)什么是绝对路径?以"/"开头的路径。(3)怎样写绝对路径?链接地址、表单提交地址、重定向绝对路径应该从应用名开始写,而转发应该从应用名之后开始。获得appname:Stringrequest.getContextPath()如:重定向
推荐度:
导读相对路径与绝对路径相对路径:链接地址表单提交地址重定向response.sendRedirect("list.jsp");转发request.getRequestDispatcher("listEmp.jsp");(1)什么是相对路径?不以"/"开头的路径。(2)什么是绝对路径?以"/"开头的路径。(3)怎样写绝对路径?链接地址、表单提交地址、重定向绝对路径应该从应用名开始写,而转发应该从应用名之后开始。获得appname:Stringrequest.getContextPath()如:重定向
相对路径与绝对路径

    相对路径:

链接地址

    表单提交地址

    重定向 response.sendRedirect("list.jsp");

    转发  request.getRequestDispatcher("listEmp.jsp");

    (1)什么是相对路径?

        不以"/"开头的路径。

    (2)什么是绝对路径?

        以"/"开头的路径。

    (3)怎样写绝对路径?

        链接地址、表单提交地址、重定向绝对路径应该从应用名开始写,而转发应该从应用名之后开始。

        获得appname:String request.getContextPath()

    如:    

        重定向——response.sendRedirect(/*重定向从应用名开始写*/

                request.getContextPath() 

                + "/app3/sub/some.jsp");

                                      /*转发从应用名之后写*/

        转发——request.getRequestDispatcher("/app3/sub/some.jsp")

        .forward(request, response);*/    

状态管理

    (1)什么是状态管理

        将客户端(浏览器)与服务器之间多次交互当作一个整体来看,并且将多次交互所涉及的数据(状态)保存下来。

    (2)如何进行状态管理

        第一类方式:将状态保存在客户端(Cookie)

        第二类方式: 将状态保存在服务器端(Session)

    (3)cookie技术:

        1) 什么是cookie?

        a,cookie是一种客户端的状态管理技术

        b,当浏览器向服务器发送请求的时候,服务器会将少量的数据以set-cookie消息头的方式发送给浏览器,

    浏览器会将这些数据保存下来。当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送给服务器。

        2)如何创建一个cookie?

            Cookie c = new Cookie(String name,String value);    

            response.addCookie(c);

        3)cookie的查询

            Cookie[] request.getCookies();

            注意,该方法有可能返回null。

            String cookie.getName();

            String cookie.getValue();

        4)cookie的生存时间

            cookie.setMaxAge(int seconds);

            注意:单位是秒

         seconds >0 : 浏览器会将cookie保存在硬盘上,超过

            指定的时间,会删除该cookie。

         seconds < 0 : 缺省值,浏览器会将cookie保存在内存

            里,只要浏览器不关闭,cookie一直保存,当浏览器

            关闭,cookie会被清空。

            seconds = 0 : 删除cookie

                    比如,要删除一个名叫userId的cookie:

                    Cookie c = new Cookie("userId

                    c.setMaxAge(0);

                    response.addCookie(c);

        5)cookie的编码问题

        cookie只能保存ascii字符,对于不合法的字符(比如中文)需要进行编码,即转换成合法的ascii字符。

        可以使用URLEncoder.encode()方法和URLDecoder.decode()方法来进行这种转换。

        

        6)cookie的路径问题

            a,什么是cookie的路径问题?

            浏览器在向服务器发送请求时,会比较cookie的路径与要访问的服务器的路径是否匹配,只有

            匹配的cookie才会发送给服务器。

            b, cookie的默认路径

                默认路径等于创建该cookie的组件的路径。

            c,匹配规则

                浏览器要访问的路径必须是cookie的路径或者

            其子路径时,才会发送对应的cookie。

            d,    设置cookie的路径cookie.setPath(String path);

                比如  cookie.setPath("/web07");

                将cookie的路径一般设置为应用名,这样可以保证

            该cookie可以被该应用的其它组件都能访问到。

        7) cookie的

            a, cookie可以被用户禁止。

            b, cookie不安全,敏感数据,比如密码,帐号等等需要加密。

            c, cookie的大小有,大约是4k左右(具体大小跟浏览器有关系)。

            d, cookie的个数也有,大约是300个(具体个数跟浏览器有关系)。

            e, cookie只能够保存字符串。

            

        8)保存和查询Cookie流程

            a. 浏览器向服务器发送addCookie请求

            服务器中的AddCookieServlet创建了两个Cookie:cookie和cookie2

            b. 服务器端执行语句response.addCookie(cookie);生成消息头“set-cookie”,

            并将两个Cookie以键值对的方式(“name=aaa”、“passwd=123”)存放在消息头中发 送给浏览器

            c. 浏览器将Cookie信息保存到本地内存中

            d. 浏览器继续向服务器发送请求(带着消息头cookie)

            服务器端的FindCookieServlet找到Cookie信息,并显示给浏览器

    (4)session技术

        1)什么是session?

            a, session是一种服务器端的状态管理技术。

            b, 当浏览器访问服务器时,服务器创建一个session对象(该对象有一个唯一的id号,称之为sessionId),服务器在默认情况下,会将sessionId以cookie的方式(set-cookie消息头)发送给浏览器,浏览器会将sessionId保存到内存。当浏览器再次访问服务器时,会将sessionId发送给服务器,服务器依据sessionId就可以找到之前创建的session对象。

        2)如何获得session对象?

            方式一:

                HttpSession s = request.getSession(boolean flag);

        当flag=true时:服务器会先查看请求当中有没有sessionId,如果没有,则创建一个session对象。

        如果有,会依据sessionId查找对应的session对象,如果找到,则返回该session对象,如果找不

        到,则创建一个新的session对象。

        当flag = false时:服务器会先查看请求当中有没有sessionId,如果没有,会返回null。

        如果有,会依据sessionId查找对应的session对象,如果找到,则返回该session对象,如果

        找不到,返回null。

            方式二:

                    HttpSession s = request.getSession();

                    等价于 request.getSession(true)。

            

            3)常用方法

        String session.getId();

        //obj类型最好实现Serializable接口,因为服务器在持久化session时,会使用java序列化协议。

        session.setAttribute(String name,Object obj);

        //如果name对应的值不存在,返回null。

        Object session.getAttribute(String name);

        //解除绑订

        session.removeAttribute(String name);

    4)session超时

        所谓session的超时,指的是服务器会空闲时间过长的

    session对象从内存空间里删除掉。原因是,过多的session

    的对象会占用服务器过多的内存空间。

        大部分服务器都会有一个缺省的超时,一般是

    30分钟。可以修改服务器的缺省的超时。

        比如,可以修改tomcat的web.xml配置文件(conf/web.xml)

    

         30

    

        修改完之后,需要重新启动服务器。

        也可以将以上配置放到某个应用的web.xml文件当中。

        另外,还有一个方法:

            session.setMaxInactiveInterval(int seconds);

    5)删除session

            session.invalidate();

    6)session案例:

        a, session验证

            step1, 在登录成功以后,在session对象上绑订数据

            比如: session.setAttribute("user",user);    

            step2, 对需要保护的资源(只有登录成功以后,才能

            访问的资源,比如 main.jsp)    ,添加session验证代码:

                Object obj = session.getAttribute("user");

                if(obj == null){

                    //跳转到登录页面

                }

我们在连接mysql数据库的时候一般都会在url后面添加    useUnicode=true&characterEncoding=UTF-8 ,但是问什么要添加呢?

添加的作用是:指定字符的编码、解码格式。

             例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码。这时候如果添加useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下两个方面:

1. 存数据时:

     数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。

2.取数据时:

     在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。

注意:在xml配置文件中配置数据库utl时,要使用&的转义字符也就是&

                                                        例如:

1、用户禁止cookie,如何继续使用session?(了解)

    (1)当用户禁止cookie以后,服务器仍然会发送sessionId(以set-cookie消息头的方式),但是,浏览器会拒绝接受,这样,session机制会失效。

    (2)可以使用url重写来解决该问题

        a,什么是url重写?

            如果某个组件需要session机制的支持,则不能直接使用该组件的地址去访问,而应该使用服务器生成的组件的地址(会在组件的地址后面添加sessionId)去访问。

        b,如何重写?

            //用于链接地址,表单提交地址。

            response.encodeURL(String url);

            //用于重定向

            response.encodeRedirectURL(String url);

            比如:

                response.sendRedirect(response.encodeRedirectURL("list.jsp"));

            转发不用考虑。

2、session的优缺点

    优点:

        session相对安全

        session能够保存的数据类型更丰富

        session能够保存的数据大小更大

    缺点:

        session需要将所有数据写在服务器端,所以,服务器会占用过多的内存空间。可以考虑使用cookie来代替或者使用数据库来保存状态(即数据)。

servlet容器如何处理请求资源路径?

    比如,在浏览器地址栏输入http://ip:port/web04/abc.html

    请求资源路径是:  /web04/abc.html

    1, 容器依据应用名找到应用所在的文件夹。

    2,容器会假设要访问的是一个servlet,会比较web.xml文件中是否与"/abc.html"一致:

        a,精确匹配:

        b,通配符匹配:使用"*"来匹配任意的字符。比如/*

        /aaa   /aaa.bbb   /aaa/bbb/ccc

        c,后缀匹配:使用"*."开头,后接任意的字符。比如*.do

        会匹配所有以".do"结尾的请求。

    3,如果都不匹配,容器会查找静态页面,如果找到,就返回,找不到,返回404。

过滤器

    (1)什么是过滤器?

        servlet规范当中定义的一种特殊的组件,用来拦截容器的调用过程并进行相应的处理。

    (2)如何写一个过滤器

        step1,写一个java类,实现Filter接口。

        step2,将处理逻辑写在doFilter方法里面。

        step3,配置过滤器(web.xml)

    (3)过滤器的初始化参数

        step1,在web.xml,使用配置初始化参数。

        step2, 使用FilterConfig.getInitParameter(String paraname)来获取初始化参数值。

    (4)过滤器的优先级

        当有多个过滤器都满足过滤的条件,则容器依据的先后顺序来调用过滤器。    

    (5)优点:

        a,可以将多个web组件相同或者相近的处理逻辑(比如,session验证、权限的管理、编码的处理等等)集中写在过滤器里面,方便代码的维护。    

        b,可以实现代码的“可插拔性”:删除或者添加某些模块,不会影响到整个程序的正常运行。

   filter1

   web.Filter1

  

  

       illegalStr

       pig

  

   filter1

   /comment

过滤器运行过程:

1) 浏览器发送请求给服务器

2) 服务器的Servlet引擎创建Request对象&&Response对象

3) Servlet引擎先调用过滤器的doFilter方法,该方法有两个参数request和response,

(在过滤器中可以访问到Request对象&&Response对象)

4) 过滤器对拦截的内容迚行处理

5) 之后调用SomeServlet的service方法

6) service方法执行

7) service方法执行结束后,将结果返回到过滤器

8) 过滤器将service方法返回的结果再次迚行过滤

9) 最后,Servlet引擎将结果返回给浏览器

ServletContext的作用是什么?

WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。

   ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,

   可以通过ServletConfig.getServletContext方法获得ServletContext对象。

    由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。

 **

    1) 什么是?

    servlet规范当中定义的一种特殊的类,作用是监听容器当中产生的一些事件并迚行相应的处 理。 容器产生的事件指的是

              两大类事件: 第一大类 生命周期相关的事件,指的是当容器创建戒者销毁request,session,ServletContext对象时产 生的事件。

                 第二大类 绑订事件,指的是当调用request,session,ServletContext对象的 setAttribute,removeAttribute时产生的事件。

    2) 如何写

       step1 写一个java类,实现特定的接口类,如:HttpSessionListener (依据要监听的事件类型)。 

       step2 在接口声明的方法中,实现监听的逻辑:

session对象一旦创建(就是访问该应用,就创建了session对象)就会执行该方法--

      因为这两个方法sessionCreated,sessionDestroyed都是重写父类的

      课堂例子演示的本质是session的数量随着浏览器个数的变化而变化,

 step3 配置(web.xml)。

   web.CountListener       

    3) ServletContext接口

      web服务器在启动时,会为每一个已经部署的应用创建唯一的一个ServletContext实例。 该实例会一直存在,除非服务器关闭戒者应用被删除。

      注意:每个应用对应唯一的一个ServletContext实例

    a. 如何获得ServletContext实例。

     GenericServlet提供了getServletContext()方法。

     HttpSession提供了getServletContext()方法。 

     ServletConfig提供了getServletContext()方法。

b. 常用方法

 绑订数据

setAttribute(String name,Object obj); 

getAttribute(String name); 

removeAttribute(String name);

 

   配置全局的初始化参数

     step1 在web.xml中,使用配置的参数,可以被所有的servlet共享。 

       version2

       2

  

     step2 使用String ServletContext.getInitParameter(String paraName); 访问全局的初始化参数

依据逻辑路径获得实际部署时的物理路径:String ServletContext.getRealPath(String url);

注意:有先后顺序的要求:1,2,3,4

servlet线程安全问题

    (1)servlet为什么会有线程安全问题?

        默认情况下,servlet在容器内部只有一个实例;如果有多个请求同时访问某个servlet,容器会启动多个线程来调用这个servlet实例,就有可能发生线程安全问题:比如,多个线程同时去修改servlet实例的某个属性。

    (2)如何解决?

        a,使用synchronized关键字加锁

        b,让servlet实现SingleThreadModel接口(不建议使用)容器会为每一个线程创建一个对应的servlet实例来处理请求。因为会产生过多的servlet实例,所以,建议少用。

javabean其实就是一个java类,不过他是有某些规定的java类,例如它有属性,且属性名为全小写,对每个属性有get和set方法,叫做设置器与获取器,这个类还必须有一个无参数的构造函数。

javabean的提出是为了实现可重用组件的需求提出的。其实jdk里面的大部分类都是javabean。在通常情况下javabean被用作处理业务逻辑来使用。

文档

cookie_session的详细用法

相对路径与绝对路径相对路径:链接地址表单提交地址重定向response.sendRedirect("list.jsp");转发request.getRequestDispatcher("listEmp.jsp");(1)什么是相对路径?不以"/"开头的路径。(2)什么是绝对路径?以"/"开头的路径。(3)怎样写绝对路径?链接地址、表单提交地址、重定向绝对路径应该从应用名开始写,而转发应该从应用名之后开始。获得appname:Stringrequest.getContextPath()如:重定向
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top