day07

来源:互联网 发布:window10装mac系统 编辑:程序博客网 时间:2024/05/22 14:23

1、Session的原理

    1HttpSession对象由容器创建,存在于服务器端。

       2HttpSession也是一个域对象:setAttribute(Stringname,Object obj)    

  getAttribute(String name)

       3.得到HttpSession对象:

              request.getSession

    获取客户端带过来的名字为JSESSIONID的cookie的值

    发现没有该Cookie,创建了一个session对象。

把刚创建的session对象的id以cookie形式写给了客户端。Cookie的名称固定为       JSESSIONID

 

 

    发现有名称为JSESSIONID的cookie

在服务器端查找id为cookie值的session对象,如果该对象存在,继续为你服务,不存

在创建新的session对象

 

 

       request.getSession(booleancreate):

              create=true:作用等同getSession()

              create=false:只获取不创建。

                    

2、案例

       简单购物车

 

       Response.encodeUrl()调用这个方法时,当客户端禁用Cookie,还可以把session的id

  带过来。

 

       完成用户一次性登录(结合随机验证码)

              MD5加密和Base64编码

              Base64编码是将数据的三个字节变成四个字节

       MessageDigest md = MessageDigest.getInstance("md5");

       byte b[] = md.digest(message.getBytes());//message的数据指纹

       //b重新编码:看得懂的字符Base64

       BASE64Encoder base64 = new BASE64Encoder();

       base64.encode(b);

       防止表单重复提交

        用户登录时

              生成一个随机的唯一的ID:

       一个放在放到HttpSession的属性中

              一个放在界面上

      

    然后在服务端把这两者比对:

      如果两者一致:证明没有重复提交;最后把session中的id干掉

      如果不一致:重复提交

 

3、客户端禁用Cookie后的会话数据保存问题

       当客户端禁用cookie后,如果访问地址是http://localhost,则禁用无效.(根据客户端的不同而不同)

       URL重写:

              http://127.0.0.1:8080/day07/servlet/BuyServlet  oldUrl

             

              http://127.0.0.1:8080/day07/servlet/BuyServlet;JSESSIONID=23432432newUrl

      

              response.encodeURL(oldUrl)------------>newUrl

              自动判断客户端有无禁用cookie,如果禁用了,就重写url,没有禁用,就不写了。

             

4、HttpSession对象的默认超时时间

       1修改session的默认超时时间(默认为30分钟)(web.xml)

              <session-config>

                     <session-timeout>1</session-timeout>分钟,至少一分钟

              </session-config>

       2浏览器会话的界定:

              IE:

               IE8+:开启的多个IE进程窗口共享同一个会话。

               IE7-:开启一个新的IE进程不共享同一次会话。

                           

               新开的标签(Tab)页也属于同一次会话。

               通过<a href=""target="_blank"/>开启的新窗口和原来的窗口属于同一次      

        会话。

5、Session的钝化和活化

1、session对象长时间没有使用了

2、用户在浏览过程中重新启动TOmcat或重新加载了当前应用

钝化(搁置)把Session这个对象保存在磁盘中(注意如果你Session里面保存的是对象就必须实现序列化接口)

 

1、session当前又活动了

2、重启成功了

活化(激活)把磁盘中的Session对象加载到缓存中

                           

6、JSP语法

       JSP实际上就是Servlet。

       jsp的request和Servlet的request是不一样的,只是共享数据

       学习JSP的最好办法:大脑中时刻想着Servlet。

       1.模板元素:指JSP中的html

       2.表达式:

              作用:向页面输出运算结果。

              语法:<%=表达式%>

                     实际上就是service中调用out.println(表达式);

       3.Java脚本片段(实际开发中在JSP中是不允许有java脚本的。自定义标签来代替)

              出现在JSP中的java代码。

              作用:组织逻辑

              语法:<%语句1;

                            语句2;%>

                     实际上会原封不动的被翻译到jsp对应serlvet的service方法中。

       4.JSP声明:

              作用:定义成员变量或方法

              语法:<%!

                            语句;

                       %>

       5.JSP注释

              作用:注释

              语法:<%--这是注释--%>

              JSP中尽量使用JSP注释,不要使用HTML注释。

              jsp注释不会翻译成Servlet,效率高

 

7、JSP的指令

       作用:为JSP引擎(Tomcat)而设计的

       语法:<% @指令名称属性1="value1" ....%>

       Tip:指令是服务整个JSP的,出现在JSP的位置无关。但是一般把指令放在页面的最前端。

       6.1:page

              属性:

                     language:指定JSP中使用的脚本语言。默认是java,目前只支持java

                     extends:指定JSP对应的Servlet的父类。不要改改属性。

                     *import:导入JSP中需要的包或类。

                                          可以import="java.util.UUID,java.util.Date"

                                          或者写到多个page指令中

                                          <%@pageimport="java.util.UUID"%>

                                          <%@pageimport="java.util.Date"%>

                                   JSP引擎会自动导入以下包:

                                          javax.servlet.*;

                                          javax.servlet.http.*;

                                          javax.servlet.jsp.*;

                     *session:指定是否生成HttpSession对象。默认值是true

                     buffer:输出流的缓存大小。none|8kb|sizeKb.默认值是8kb。

                     autoFlush:指定缓存满了是否自动刷新。默认值是true

                     isThreadSafe:是不是线程安全。true|false。默认值是true。

                            true:不安全的。

                            实际上是指定该JSP对应的Servlet是否实现SingelThreadModel接口。

                     *errorPage:指定当前页面出错后的显示页面。如果以"/"开头,表示绝对路径。

                            配置全局消息提示页面:

                                          web.xml

                                          <error-page>

                                                 <exception-type>java.lang.Exception</exception-type>

                                                 <location>/error.jsp</location>

                                            </error-page>

                                            <error-page>

                                                 <error-code>404</error-code>

                                                 <location>/404.jsp</location>

                                            </error-page>

8、JSP的图示


原创粉丝点击