Servlet第七天

9)cookie的限制

a.可以被用户禁止。
b.不安全。
    注:对于敏感数据,不建议保存在cookie里,如果一定要保存,则一定要加密。
c.只能保存少量数据。
    注: 大约4k。
d.cookie的数量也有限制。
    注:浏览器端大约只能保存几百个左右的cookie。
e.只能保存字符串

Session (会话)

(1)什么是Session?

服务器端为了保存用户状态而创建的一个特殊的对象。

(2)工作原理

当浏览器访问服务器时,服务器创建session对象(该对象有一个唯一的id,一般称之为sessionId),服务器会将sessionId以cookie的形式发送给浏览器;
当浏览器再次访问服务器时,会将sessionId发送过来,服务器利用sessionId找到对应的session对象。

 (3)如何获得session对象?

1)方式一

HttpSession s = request.getSession(boolean flag);
注:
    a. HttpSession是一个接口。
    b. 当flag为true时:
        先查看请求当中是否有sessionId,如果没有,则创建一个session对象;如果有sessionId,则依据该sessionId去查找对应的session对象,如果找到了,则返回该对象,如果找不到,则创建一个新的session对象。
    c. 当flag为false时:
        先查看请求当中是否有sessionId,如果没有,返回null;
        如果有sessionId,则依据该sessionId去查找对应的session对象,如果找到了,则返回该对象,如果找不到,返回null。

2)方式二

HttpSession s = request.getSession();
等价于 request.getSession(true);

(4)绑订数据相关的方法

setAttribute(String name,Object obj);
Object getAttribute(String name);
注:如果找不到对应的值,返回null。
removeAttribute(String name);

(5)统计访问次数

(6)session超时

1)什么是session超时?

服务器会将空闲时间过长的session对象删除掉。
注:
    a.这样做的目的是为了节省内存空间。
    b.缺省的超时时间长度为30分钟。

2)修改超时时间

可以修改web.xml文件,添加如下配置。
<session-config>
    <session-timeout>30</session-timeout>
</session-config>

setMaxInactiveInterval(int seconds) 
两次请求之间的间隔不能超过指定的时间长度,如果超过,session对象会被删除。

(7)删除session

invalidate()

(8)session验证 (案例)

1)step1.登录成功之后,在session对象上绑订一些数据,比如:

session.setAttribute("user",user);

2)当用户请求某个地址时,进行session验证:

Object obj = session.getAttribute("user");
if(obj == null){
    //没有登录,重定向到登录页面
    response.sendRedirect("login.jsp");
}

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

比如,在浏览器地址输入 http://ip:port/day07-2/abc.html
step1. 容器默认认为访问的是一个servlet,去查看web.xml,看是否有匹配的servlet。
    注:有三种匹配方式
    a. 精确匹配  
            <url-pattern>/abc.html</url-pattern>
    b. 通配符匹配 
            使用"*"来匹配零个或者多个任意的字符,比如
            <url-pattern>/*</url-pattern>
            <url-pattern>/demo/*</url-pattern>
    c. 后缀匹配
            使用"*."开头,后接一个任意的后缀,比如
            <url-pattern>*.do</url-pattern>
            以上配置会匹配所有以.do结尾的请求。

step2. 如果没有匹配的servlet,再去查找对应位置的文件。

3. 如何让一个Servlet处理多种请求?

step1. 该servlet采用后缀匹配。
<servlet-mapping>
    <servlet-name>actionServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

step2.分析请求路径,依据分析结果,进行不同的处理。
    //获得请求资源路径
    String uri = request.getRequestURI();
    System.out.println("uri: " + uri);

    //为了方便比较,截取请求资源路径的一部分,
    //我们把这一部分称之为请求路径
    String path = 
        uri.substring(uri.lastIndexOf("/"),
                uri.lastIndexOf("."));
    System.out.println("path: " + path);

    //依据请求路径,进行对应的处理
    if("/list".equals(path)){
        System.out.println("用户列表...");
    }else if("/add".equals(path)){
        System.out.println("添加用户...");
    }

猜你喜欢

转载自blog.csdn.net/anqing_liu/article/details/80636172