您的位置:首页 > Web前端 > JavaScript

读head first servlet and jsp(二)

2015-01-31 17:41 288 查看
1.使用session保存多个请求会共同用到的属性,因为只要是同一浏览器发过来的多个请求,都属于同一个会话(同一个浏览器多个窗口发送都属于同一个会话,这个求解)

2.容器通过会话id得知哪个客户是谁,因为如果你的ip地址是路由器的地址,就不能唯一地表示你。第一次会话时,客户发送请求到服务器,然后服务器接收到请求后,作出响应并且将响应发回到客户那里,然后在响应首部加上会话id,以后每次浏览器发送请求到服务器的时候,都会在首部加上这个会话id,那么每次服务器都会知道是哪个客户发送请求过来,就会调用响应的httpSession对象。(session对象通过request.getSession())得到),实质上的会话id是通过cookie对象设置进去首部的

3.当你调用request.getSession的时候,容器会自动帮你做一下工作

     (1)创建新的httpSession对象

     (2)产生位移的会话id,并且创建新的cookie对象,将会话id与cookie相连

     (3)将cookie对象加进去响应的set-cookie首部下面

4.当浏览器禁用cookie的时候,会话id会放在url后面,作为参数传收,但是不能使用request.getParameter()得到,这里有点不理解,求指教

5.删除会话,通过设置会话超时或者调用invalidate()方法

    (1)在dd中配置, <session-config><session-timeout>15</session-timeout></session-config>

    (2)session.setMaxInactiveInternal(20*69)

    (3)cookie都是服务器先发送第一个响应的时候设置的,当你i想在客户和服务器之间每次都知道用户的名字时候,可以在第一次服务器做响应的时候把名字设置在cookie上,因为cookie是一个名/值对,并且它的交互是自动的。cookie就是客户和服务器之间交换的一小段数据

             第一次在服务器端的时候,

             Cookie cookie = new Cookie("username",name);

             Cookie.setMaxAge();//设置cookie的存货时间

             response.addCookie(cookie)//把cookie发送到客户

             //从客户请求得到cookie

              Cookie[] cookies = request.getCookies();

              for(int i = 0;i < cookies.length;i++){

                    Cookie cookie = cookies[i];

                     if(cookies[i].getName.equals("username")){

                     再通过getValue得到这个username对应的值

}

              当你的对象需要每次都在客户和服务器中交流的时候,即每次都要在浏览器中显示的数据,则一般应该产生一个cookie对象,然后将它设置在set-cookie首部中

}

     session保存的是对象,cookie中保存的是字符串

6.jsp的使用

(1).jsp会变成一个servlet对象

(2).<%%>里面的语句会放在具体的jspService()方法里面,<%=%>等价于out.println()

(3).<%!%>是声明,会变成转化后的servlet的类范围里面,方法或语句都可以

(4).在建立jspService()方法的时候,会产生一大堆隐式对象,例如httpServletRequest和jspWriter这种,会有一半servlet应该有的所有隐式对象

(5).将jsp转换成java源代码和编译成一个class文件只会发生一次在一个jsp中

(6).可以在dd中使用jsp-file配置初始化参数

(7).pageContext是jsp特有的隐式对象,并且可以通过这个对象得到其他所有的对象(而且能得到所有域的属性)

7.jsp动作和el

(1).<jsp:useBean id="" class="" scope="" />来声明和初始化一个bean属性,如果没有这个id属性的话,会创建一个新的对象,然后set进去,相当于定义一个变量

useBean中的id要与getProperty中的name相匹配,默认是page属性域

(2).<jsp:getProperty name="" property="" />相当于从name找到在useBean中已经定义的变量,然后得到这个属性对象的property值,通过get方法

(3).当在jsp:useBean中使用type属性的时候,生产的servlet会是类型,class属性是指当你要新创建对象的时候new的类型

     Type p = null;

      if(p==null){

       p = new class();

}

(4).el表达式

当使用el表达式的时候,第一个是使用findAttribute找到这个名字对应的对象,后面都是调用get方法。先找页面,再找请求,会话,到应用作用域

.和[]来访问,使用[]的时候,可以用它来访问list或数组或者map,例:${musicList[0]}

使用musicMap["Ambient"]是查找ambient对应的键值,如果没有引号,则先查找ambient对应的建,再查找到这个建对应的键值

请求参数,可以在el中通过param得到,例:

<input type="text" name="food" />  在jsp中,${param.food}

el中有cookie隐式对象,可以使用${cookie.属性名.value}来得到你要的cookie的值

只有pageContext是真正得到对象,其他都只是得到作用域不是真正得到对象(例如request),只是作用域属性的map

(5)include指令和jsp:include动作的区别

include指令:将整个jsp代码放进去,只会编译一次,如果代码修改后,web容器是不会知道的(不过一般现在web容器已经支持这个功能),静态 使用file

include动作:只是将include进去的jsp的响应与本来的响应合起来,每次有请求到来时,include动作中的jsp页面都会重新编译一次,所以为动态包含 使用page

可以使用jsp:param来给包含的页面添加东西

<jsp:forward page="" />来转向到另一个jsp中,使用这个的时候,缓冲区会在转发之前清空,等于转发之前的内容不会打印出来

           

            

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java jsp servlet