A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 厦门校区   /  2018-6-6 20:38  /  4990 人查看  /  52 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

林文辉

获得Session:  request.getSession();

将商品添加到购物车:

String pid = request.getParameter("pid");
Integer count = Integer.parseInt(request.getParameter("count"));
//封装购物项
CartItems cartItems = new CartItems();
ProductService productService = (ProductService) BeanFactory.getBean("ProductService");
cartItems.setProduct(productService.findByPid(pid));
cartItems.setCount(count);
Cart cart =getCart(request);
cart.addToCart(cartItems);
response.sendRedirect(request.getContextPath()+"/jsp/cart.jsp");

销毁:三种情况销毁session:
session过期. 默认过期时间为30分钟.
非正常关闭服务器.如果正常关闭session序列化到硬盘.
手动调用session.invalidate();

验证码的校验:
String code1 =  request.getParameter("code");
String code2 = (String)request.getSession().getAttribute("code");
request.getSession().removeAttribute("code");
//校验验证码是否一致
if(!code1.equalsIgnoreCase(code2)) {
request.setAttribute("msg", "验证码输入错误");
return "/jsp/login.jsp";
                        }

切换验证码:
$(function(){
                $("#ImgCheck").click(function(){
                        $(this).attr("src","${pageContext.request.contextPath}/CheckImgServlet?time="+new Date().getTime());
                });
        });

<%!   %>                :翻译成Servlet中的成员内容. 定义变量,方法,类. -- 不建议.
<%    %>                :翻译成Servlet中service方法内部的内容. 定义类,变量
<%=   %>                :翻译成Servlet中service方法中out.print();

Jsp有9大内置对象:
request
response
session
application
page
pageContext
config
out
exception
jsp4个领域有效范围:
pageContext:当前页面
request:响应之前
session:一次会话
applicatiton或者servletContext:只要服务器正常运行。
回复 使用道具 举报
本帖最后由 COLDER 于 2018-10-18 19:16 编辑



[Session And Jsp]

1.Session是什么?
Session是会话技术,也是域对象.ps:会话技术是从打开浏览器浏览各种页面到关闭浏览器的过程.

2.Session的作用?
Session的作用是将数据保存到服务器端.

3.Session的原理?
Session是通过request.getSession()的方法,从浏览器端发送请求到服务器端查找在服务器端
有没有存在Session的开辟的空间,如果没有找到Session则会创建一个新的Session来存放数据;如果找到了Session
则利用其存放在浏览器端的钥匙来打开Session空间,进行数据的添加.
*注意:每个用户的浏览器端都有在服务器端所对应的Session空间,互不干涉,所以Session是一个私有的空间,具有一定的
安全性.

4.Session的创建和销毁?
Session的创建是从服务器端第一次调用getSession()方法开始.
Session的销毁有三种情况:
(1)Session默认过期时间为30分钟.
(2)非正常关闭服务器,也就是点击console界面的Terminate按键,非正常关闭服务器将不会创建备份文件到硬盘中;
正常关闭服务器是点击Servers界面中的Stop the server按键,此时会在硬盘的阿帕奇文件夹中Work文件夹中创建备份文件(序列化),
当再次启动服务器就会加载备份文件(反序列化).
(3)手动调用session.invalidate()方法.
*注意:Session技术的底层是基于Cookie技术,所以如果是关闭浏览器的话,如果不设置Cookie的最大保存时间的话,Cookie将会被销毁,
那么基于Cookie的Session的钥匙传输也会丢失,也就是说存放于服务器端的Session空间也会丢失,当然如果是有记录下Session的钥匙
的话,那么服务器端的Session空间是可以被找回的.

5.案例:将商品添加到购物车
思路:
(1)点击商品列表中商品名或图片跳转到商品详情页面,然后点击添加到购物车按钮,跳转到CartServlet,
(2)首先是拿到商品的名字,然后将请求的Session空间赋值给map集合,判断map集合是否为空,如果为空,则创建新的map集合;
(3)判断map集合中有没有包含拿到的商品名称,如果有则将数量进行加1,再把商品名称和新的数量传入map集合(已经有添加到购物车过),
如果没有则默认将商品名称和数量1传入map集合(第一次添加到购物车).
(4)将map集合保存到Session空间中.

6.案例:进行一次性验证码的校验
思路:
(1)拿到浏览器端输入的验证码.
(2)拿到服务器端产生的验证码.
(4)判断这两个验证码是否一致.
(5)清空服务器端产生的验证码.

7.JSP是什么?
Java Server Pages(Java服务器端的页面),JSP=HTML+JAVA+JSP,JSP的本质是Servlet,可以查看其编译后的.java文件,JSP实现了servlet接口

8.JSP的指令?
JSP有三个指令:page指令,include指令,taglib指令
page指令:<%@ page%>,page指令的属性有contentType(设置浏览器打开JPS的默认字符集的编码),pageEncoding(设置文件保存到本地硬盘,以及生成Servlet后,Servlet保存到硬盘上的编码),
import(在JSP中引入类对象.但是import可以出现多次).

9.JSP的内置对象:
pageContext可以获得其他8个内置对象,pageContext.getAttribute();
pageContext可以向JSP的四个域中存取数据.






回复 使用道具 举报 1 0
万冕


今天学了第二种会话技术:

session:session的底层代码是基于Cookie的,但是session存的数据是在服务器内,session也是一个对象
生命周期:

作用范围是:多次请求,但是是存在于一次会话           随着第一次调用getSession()方法会创建session
有三种情况会摧毁session:
1.session的有效期过期,默认的过期时间为30分钟
2.非正常关闭服务器(直接拔电源),但是如果正常关机session会序列化到硬盘,等服务器再次启动时,服务器会将session
读取进去.
3.手动调用session.invalidate();也能摧毁session.


Jsp的九大内置对象

request(域对象)    response  session(域对象)   application(域对象)   page   pageContext(域对象)   config  out  exception

pageContext:
可以获得其他的八个内置对象:但是这个功能一般用在编写通用性非常高的代码或者框架里
可以向四个域中存放数据
session的生命周期:一次会话范围
request:一次请求范围
application: 类似于ServletContext全局变量,在整个工程内有效
pageContext:当前页面有效
回复 使用道具 举报
郑阳阳
Session的作用范围,及创建、销毁时间:
session的作用范围就是一次会话,因为session是基于cookie的.
创建:在服务器第一次调用getsession()的时候创建session.
销毁有三种情况:
1.session的默认销毁时间是三十分钟.
2.非正常关闭服务器,正常关闭的的话会序列化session.
3.调用session.invalidate();方法
JSP脚本、JSP内置对象和四大域及作用范围:
JSP的脚本:
<%! %> 翻译成Servlet中的成员部分,定义成员变量方法和类,不过线程不安全,不建议使用
<% %>  翻译成Servlet中的service方法中的内容,定义类和变量
<%= %> 翻译成Servlet方法中的out.print();
Jsp的九大内置对象:
request 对应真实对象 HttpServletRequest 方法getParameter(),setAttribute(String name,Object value);
response 对应真实对象 HttpServletResponse 方法setHeader(String name,String value);getOutputStream();getWriter();
session 对应真实对象 HttpSession 方法setAttribute();getAttribute();
application 对应真实对象 ServletContext 方法setAttribute();getAttribute();
page 对应真实对象 Object 方法 toString();wait();
pageContext 对应真实对象 PageContext 方法 setAttribute();getAttribute();
config 对应真实对象 ServletConfig 方法getServletName();getServletContext();
out 对应真实对象 JspWriter 方法write(),print();
exception 对应真实对象 Throwable 方法getMessage(),getCause(); 设置isErrorPage=”true”
Jsp四大域的范围:
RequestScope 一次请求
SessionScope 一次会话
ApplicationScope 应用范围
PageScope 当前页面有效
回复 使用道具 举报
陈强
Session&jsp的一天
首先是学习了之前学过的域对象的另一个----session
为什么会有session呢?因为cookie本身有大小和个数的限制.而且cookie和session对于数据存储的位置也是不同的.
Session----将数据保存到服务器端
Cookie-----将数据保存到客户端—即浏览器端
而session是怎么执行的呢?每个session都会有一个JsessionID,第一次浏览器请求服务器的时候,就会创建一个session.而在第二次请求服务器的时候,就会带着JsessionID去服务器,然后服务器就会根据JsessionID找到之前创建的那一块空间,去进行数据的查询或者添加.
Session的作用范围是一次会话,(多次请求)
关于session的销毁就是三种情况,过期\非正常关闭服务器\手动invalidate方法,所以这边有一个值得注意的就是,关闭浏览器并未销毁session,而是销毁了带有JsessionID的cookie,在服务器端的session并未因为浏览器的关闭而被删除.
然后就是JSP的学习---JAVA SERVER PAGES
这部分都是关于JSP的一些注释\指令\内置对象等学习,主要都是相当于理论性的知识,比较少逻辑性的东西就不做过多的整理了.
回复 使用道具 举报
林荣彬
   今天主要学习会话技术session,Session的执行原理:利用Cookie回写一个Session的ID.获得Session对象域的方法:request.getSession();   cookie和session的区别Cookie本身是有大小和数量限制的,Session是没有限制的.
Session是域对象:作用范围:多次请求(一次会话)

创建:服务器端第一次调用getSession()的时候创建session,
销毁:三种情况
1. session过期,默认过期时间为30分钟
2. 非正常关闭服务器,如果正常关闭session序列化到硬盘
3. 手动调用session.nvalidate()

JSP的脚本
<%!   %>                :翻译成Servlet中的成员内容. 定义变量,方法,类. -- 不建议.
<%    %>                :翻译成Servlet中service方法内部的内容. 定义类,变量
<%=   %>        :翻译成Servlet中service方法中out.print();
JSP指令的语法:
<%@ 指令名称 属性名称=”属性值” 属性名称=”属性值” ...%>
JSP中有三个指令:page指令, include指令, taglib指令.
JSP的9大内置对象:
1.requst  2.response  3.session  4.application  5.page  6.pageContext  7.config  8.out  9.exception
page内置对象:真实对象是Object,就是JSP翻译成Servlet后的类的引用.

pageContext内置对象: 获得其他的8个内置对象:编写通用性代码或者框架的时候.向JSP的四个域中存取数据:
JSP的四个域范围:
PageScope :当前页面中有效.               
RequestScope :一次请求范围.               
SessionScope  :一次会话范围.               
ApplicationScope :应用范围

标签的作用:简化代码.
<jsp:forward />:用于页面的转发.
<jsp:forward page="/demo1-jsp/demo3-object/demo3.jsp"></jsp:forward>
<jsp:include />:用于页面的包含.(动态包含)
*****静态包含和动态包含的区别?(<%@ include%>和<jsp:include>)
<jsp:param />:用于带有路径的标签下,传递参数.
<jsp:useBean />:用于在JSP中使用JavaBean.
<jsp:setProperty />:用于在JSP中向JavaBean设置属性的.
<jsp:getProperty />:用于在JSP中获得JavaBean的属性.      
回复 使用道具 举报
张述明
今天讲了session和jsp的一些内容
两个案例一个是商品添加到购物车另一个是验证码的问题
下面是重点的部分
Session
Cookie有大小和数量的限制,session没有.
Cookie的数据保存在客服端,session保存在服务器端
Session执行的原理基于cookie
Session是域对象

创建:服务器端第一次调用get  Sesssion(),创建session

销毁:三种情况销毁
1.        session过期:默认时间30分钟
2.        非正常关闭服务器.     正常关闭 如点击stop servers,序列化到硬盘
3.         手动调用session.invalidate();
作用范围
多次请求(一次会话)
Jsp的注解
1.        html的注释:<!--注释-->  存在JSP的源码中,翻译成servlet中
2.        java代码注释: //单行注释   存在JSP的源码中,翻译成servlet中
/* 多行注释*/
/**  文档注释*/
3.         jsp注释:只会存在于JSP 的源代码中,被翻译成servlet后,jsp的注释就消失了

Jsp的指令(了解)
<%@   指令名称  属性   属性值 %>
三大指令    page指令  include指令   taglib指令
<%@page%>--设置jsp的
* language                :JSP脚本中使用的语言.现在只能写java.
* contentType        :设置浏览器打开这个JSP的时候采用的默认的字符集的编码.
* pageEncoding        :设置文件保存到本地硬盘,以及生成Servlet后,Servlet保存到硬盘上的编码.
* import                :在JSP中引入类对象.但是import可以出现多次.
    <%@page import="java.util.ArrayList"%>
    <%@page import="java.util.List"%>
Extends:被翻译成servlet后继承的类,默认继承 :org.apache.jasper.runtime.HttpJspBase,
Autoflush:设置jsp的缓存自动刷出   默认是true
Buffer: :设置jsp的缓冲区的大小  默认是8kb.
Session:设置在jsp中是否可以直接使用session对象  默认是true
IsElignored:设置在jsp中是否忽略el 表达式
ErrorPage:设置友好页面的提示
IsErrorpage:通过这个设置来显示错误


设置全局错误提示  web.xml

    Eeror-page
      Error-code
           Location
Jsp中的include指令   :指示jsp包含其他的页面
J
JSP中的include指令:指示JSP包含其他的页面.
<%@ include file="logo.jsp" %>
<%@ include file="menu.jsp" %>
<h1>BODY部分</h1>
<%@ include file="footer.jsp" %>

JSP中的taglib指令:指示JSP引入标签库.
<%@ taglib uri="标签的URI的路径" prefix="标签的别名" %>

Jsp的内置对象:在JSP中可以直接使用的对象
九大对象
JSP的内置对象:在JSP中可以直接使用的对象.
JSP中有9大内置对象:
request,response,out,session,page,application,config,exception,pageContext
pageContext内置对象                :
* 获得其他的8个内置对象        :编写通用性代码或者框架的时候.
* 向JSP的四个域中存取数据        :
    JSP的四个域范围:
    * PageScope                                :当前页面中有效.                pageContext                PageContext
    * RequestScope                        :一次请求范围.                request                        HttpServletRequest
    * SessionScope                        :一次会话范围.                session                        HttpSession
    * ApplicationScope                :应用范围                                application                ServletContext

回复 使用道具 举报
凌辉:
Cookie本身是有大小和个数的限制.Session没有限制.Cookie的数据保存在客户端,Session数据保存在服务器端.
Session的执行原理:基于Cookie的.
使用Session:
* 获得Session:
    * request.getSession();
session何时创建和销毁?作用范围:
* 创建:服务器端第一次调用getSession()创建session.
* 销毁:三种情况销毁session:
    * 1.session过期. 默认过期时间为30分钟.
    * 2.非正常关闭服务器.如果正常关闭session序列化到硬盘.
    * 3.手动调用session.invalidate();
* 作用范围:多次请求.(一次会话)
回复 使用道具 举报
邵倩

session
cookie的数据保存在客户端,有大小和个数限制  而session保存在服务器,没有限制
session的执行原理基于cookie
获得session: request.getSession();
创建: 服务器第一次调用getSession() 时创建session
销毁: 1.session过期,默认为30分钟
2.非正常关闭服务器. 如果是正常关闭 session序列化到硬盘
3.手动调用session.invalidate();
作用范围: 多次请求(一次会话)


JSP=HTML元素+JAVA代码+JSP内置对象


JSP的执行:JSP翻译成servlet,编译这个servlet的类,生成class文件,加载到JVM,打印html


JSP的脚本: <%!    %>      <%     %>      <%=    %>


JSP的注释  
<%-- JSP的注释 :只会存在于 JSP的源代码中.翻译成Servlet后,JSP的注释就消失了. --%>  权限最高
<!-- HTML的注释:存在JSP源码中,存在于JSP翻译后的Servlet中,存在于生成的HTML中 -->  
java代码的注释 和java中一样

JSP的指令: page include  taglib
page指令中有3个重要的属性:

contentType   设置浏览器打开这个jsp的时候才用的字符集编码

pageEncoding:设置文件保存到本地硬盘,以及生成Servlet后,Servlet保存到硬盘上的编码
import   在JSP中引入类对象,但是import可以出现多次

设置全局的错误友好页面: 写一个404.jsp和一个500.jsp  再去web.xml配置
  <error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/500.jsp</location>
  </error-page>


JSP的9大内置对象
request  response  session  application(ServletContext)   page(Object)   pageContext   config(ServletConfig)  out(JspWriter)   exception(Throwable)

pageContext内置对象:
获得其他8个内置对象(编写通用性代码或者框架的时候)
向JSP的四个域中存取数据(PageScope 当前页面有效,RequestScope 一次请求范围,SessionScope  一次会话范围,ApplicationScope  应用范围)

JSP的6个动作标签:
<jsp:forward/>
<jsp:include/>
<jsp:param/>
<jsp:useBean/>
<jsp:setProperty/>
<jsp:getProperty/>

静态包含
相当于代码的copy 直接将logo中的代码复制到index中
<jsp:include page="/demo1-jsp/demo4-tag/logo.jsp"></jsp:include>   翻译成   index_jsp.java  编译成class文件 执行

回复 使用道具 举报
   xuyu
Session及Jsp总结
   创建
  Session的创建:服务器端第一次调用getsession()时创建 (jsp会在底层默认调用getsession)
  Servletcontext的创建:服务器加载完web项目,就会为每个web项目即刻创建一个servletcontext对象
  Request的创建:每次页面访问都会为这次访问创建一个request对象
  作用范围
   Session作用范围: 一次会话 (多次请求).
   Servlet作用范围: web项目
   Request:当前页面
生命周期
Session生命周期:默认时间是30分钟 非正常关闭会因为来不及序列化而销毁.
Servletcontext 生命周期: 服务器开启到关闭
Request生命周期:页面响应结束就销毁.
Jsp内置对象(无需创建,可以直接调用)
1 request 域对象  httpreques   一次请求
2 response        httpresponse
3 session 域对象  httpsession   一次会话
4 application 域对象 servletcontext 应用
5 page            object
6 pagetext 域对象 pagecontext 当前页面
7 config     servletconfig
8 out   jspwriter
9 exception   throwable
Pagecontext.findattribute(“  ”) 根据名字从小范围的域对象开始查找 找到直接返回
静态包含<%@include >和动态包含的区别<jsp:include> 静态包含相当于将包含部分的页面代码拷贝过来然后在进行编译 动态包含一边编译一边将包含部分代码添加进来 添加部分的代码继续自己编译 本身也处于动态编译过程,主要特点是主体部分不能使用编译部分定义的局部变量,就像java不同类之间的变量不通用一样 ,而静态包含因为是直接copy过来的缘故是可以使用的 .
回复 使用道具 举报
谢洪彬:
Session: 域对象
Cookie,ServletContext,Session作为Servlet中的三大域对象,其作用范围和生命周期也是有所区别的
ServletContext:作用于整个项目工程
Cookie:作用与一次回话
Session:作用与一次回话
Session不同于Cookie,Session是数据保存在服务器,然后会生成一把钥匙,并把这个钥匙响应回浏览器并由浏览器保存,待下次浏览器再访问的时候就是携带这个钥匙回服务器,当然这个钥匙的数据传输是由Cookie来完成的.
当然作为Servlet的与对象Session的存取数据的方法是一样的
getAtturibute() 获取数据
setAtturibute() :存取数据
当然说了这么久还没有介绍怎么去获的Session对象,当然不是去new,是:
Request.getSession(String name)
如果说没有这个Session 服务器就会去创建一个Session对象
如果有的话就会根据浏览器带过来的钥匙找到指定的Session对象
还有就是Session的销毁:
1.非正常关闭服务器.
2.session过期(默认30分钟)
3.手动调用invalidate方法的时候
后面我们又学习了jsp ,动态网页开发技术,可以理解为在html中写java代码的存在
Jsp的脚本
<%!  %> 可以定义在Servlet中的成员变量,成员方法,内部类
<%   %>可以定义在Servlet中service中的局部局部变量,内部类
<%=   %>可以理解为作为输出打印使用

JSP的九大内置对象
* request                                HttpServletRequest       
*response                         HttpServletResponse
* session                                HttpSession                                       
* application                        ServletContext                                       
* page                                Object                                               
* pageContext                        PageContext                                               
* config                                ServletConfig                                       
* out                                JspWriter       
* exception                        Throwable                                       
其中pageContext又可以获取其他的八大内置对象,应用的话就是:比如要传参数的时候传这一个就行了,他就可以获取其他的八个.






Jsp中的四大域
    JSP的四个域范围:
    * PageScope                        :当前页面中有效.                pageContext                PageContext
    * RequestScope                :一次请求范围.                request                HttpServletRequest
    * SessionScope                :一次会话范围.                session                        HttpSession
    * ApplicationScope        :整个项目                        application                ServletContext
在Jsp中可以使用这三种注释:
1.java注释
2.Html注释
3.Jsp注释
其他两个都一个,就是jsp的注释是<%--写注释--%>
回复 使用道具 举报
郑学馨
案例一:利用session实现购物车功能
        新建一个servlet类
        步骤一:获得的客户端传输的商品信息(比如:name值)
        步骤二:根据session键值获得对应的values值(返回一个map集合)
        步骤三:判断获得map集合是否存在
        步骤四:如果(map==null)说明我们要的集合不存在,这时要新建一个集合
        步骤五:判断集合中是否有我们需要的键值对(比如key="name")
        步骤六:如果判断为false;说明我们是第一次添加该商品进购物车,这是往集合中添加map("name",1);
        步骤七:如果判断为true:说明我们之前已经添加过该商品了,这时要将它对应的value值取出来加1;再添加进集合中
        步骤八:将集合存进session中;
        步骤九:利用重定向转到购物车页面中

      :购物车页面如何显示商品信息(显示:商品名+数量)
        步骤一:新建一个jsp页面
        步骤二:获取客户端传送的session值.返回的是一个集合
        步骤三:将集合进行遍历;获得对应的键值对的值
        步骤四:将键值对的值打印到页面上进行显示

案例二:验证码功能的实现:
        步骤一:在登录功能servlet类中重新dopost方法;
        步骤二:获得客户端输入的验证码值(保存为string类型)
        步骤三:获得客户端中带过来的session中的验证码值(也就是验证码图片上的信息,我们再生成验证码同时将信息提取出来,保存进session中)
        步骤四:将session中的验证码值删除(因为验证码只能使用一次,这次使用后下次会生成新的,我们需要将旧的删除)
        步骤五:判断我们输入的验证码值与session中的值是否相等,如果相等才能登录成功,如果不等,显示验证码错误,且验证码信息刷新

什么是jsp:jsp是动态页面,jsp页面中可以添加java代码(jsp相当一个servlet类)
如何再jsp中添加java代码:
        <%!   %>        :翻译成Servlet中的成员内容. 定义变量,方法,类. -- 不建议.
        <%    %>        :翻译成Servlet中service方法内部的内容. 定义类,变量
        <%=   %>        :翻译成Servlet中service方法中out.print();
jsp的三大指令:page指令;include指令;taglib指令

jsp九大内置对象:
* request                        HttpServletRequest                getParameter(),setAttribute(String name,Object value);
* response                        HttpServletResponse                setHeader(String name,String value);getOutputStream();getWriter();
* session                        HttpSession                        setAttribute();getAttribute();
* application                        ServletContext                        setAttribute();getAttribute();
* page                                Object                                toString();wait();
* pageContext                        PageContext                        setAttribute();getAttribute();
* config                        ServletConfig                        getServletName();getServletContext();
* out                                JspWriter                        write(),print();
* exception                        Throwable                        getMessage(),getCause();         设置isErrorPage=”true”

jsp的动作标签:
        1:转发:forward  2:传参:param  3:包含:include  4:设置属性:setproperty  5:得到属性:getproperty  6:使用javabena :usebean
回复 使用道具 举报
黄进安:
1.    session:服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)
l  创建:在服务器启动时,浏览器访问服务器,第一次调用Servlet中Request.getSession();可以用isNew()方法来判断Session是不是新创建的
l  销毁:
1.        默认30分钟没有使用,则服务器会自动销毁session,在web.xml文件中可以手工配置session的失效时间
<!-- 设置Session的有效时间:以分钟为单位-->
<session-config>
<session-timeout>15</session-timeout>
</session-config>
2.        调用session.invalidate();
3.        非正常关闭服务器.如果正常关闭session序列化到硬盘.
2.       商品添加购物车案例
利用map集合的key保存商品名,value保存商品数量,将map集合保存在session中,在购物车页面中利用jsp技术将session保存的map中的信息提取出来即可
3.       验证码案例
在处理验证码的servlet中,将生成的字符添加到字符串中(用stringbuffer,方便添加),在将字符串保存在session中,然后在处理登入页面的servlet的中,获得登入页面客户提交的验证码的信息和保存验证码信息的session中的信息,两者在用户名和密码判断之前进行对比,根据对比进行相关登入处理即可.
--->注意的是在获得完保存验证码的session之后把这个session移除,符合现实生活中验证码的即时性: request.getSession().removeAttribute("要移除的session名 ");
4.      关于点击验证码图片更新图片的时间戳扩展:
代码:通过点击鼠标事件(onclick)触发changeImg()函数
function changeImg(){
document.getElementById("img").src="/day0606/CheckImgServlet?time="+newDate().getTime();
   }
根据获取的系统时间的即时性,所以每次点击图片提交的URL地址就变了,浏览器就会刷新缓存,否则,浏览器会认为,URL地址没变化,默认数据没变化,所以,不刷新缓存(你没变化,刷新干吗啊,不浪费我动作嘛)
5.      Jsp:
浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet,所以当访问一个jsp页面时,其实也是在访问一个Servlet,服务器在执行jsp的时候,首先把jsp翻译成一个Servlet,所以我们访问jsp时,其实不是在访问jsp,而是在访问jsp翻译过后的那个Servlet
基础语法:
l  JSP脚本表达式(expression)用于将程序数据输出到客户端
语法:<%= 变量或表达式 %>
l  JSP脚本片断(scriptlet)用于在JSP页面中编写多行Java代码。
l  语法:
    <%
            多行java代码
    %>
在<% %>中可以定义变量、编写语句,不能定义方法。
l  JSP页面中编写的所有代码,默认会翻译到servlet的service方法中,而Jsp声明中的java代码被翻译到_jspService方法的外面。
语法:
    <%!
        java代码
    %>
所以,JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法
6.      Jsp中的三个指令和九大内置对象,概念性知识,还需多理解和代码实现一下.


回复 使用道具 举报
张裕
说实话 最近的学习状态感觉非常的差 知识量的增多 睡眠不足 听课越加乏味 连总结都腾不出时间写
每晚都在补当天的视频 超哥的话一巴掌打醒了我 现在在不努力 以后就没机会了

最近学习了Cookie Session JSP 先说下个人对这三玩意的理解
Cookie 可在服务器端返回一个数据到浏览器端 这就是Cookie(本地文件数据)
        在一次会话过后(浏览器关闭)后销毁 但是可以通过setMaxAge来控制保存时间 单位为秒
        也可以设置为0来销毁持久性的Cookie 也可设置有效的路径以及域名来控制存在的范围(然而没用过 不了解)

Session 服务器端数据 第一次request.getSession创建 会在服务端开辟一片空间来存储数据 (保险柜)
        并且返回一个Cookie(钥匙)?到浏览器端  然而我想问 关闭浏览器后Cookie销毁了 保险柜还在 那么怎么获取之前的钥匙
        销毁的时间:有效时间过后 默认30min 非正常关闭服务器(控制台关闭 拔电源?) 手动调用invalidate()销毁

JSP 说实话 对这玩意还是不了解 视频说的多了? 所以懵了?
        Java Server Pages(Java服务器页面) 动态网页开发技术
        让我们可以在页面中写入java代码 提高了便利性

        指令:可以直接设置一些JSP属性 嘛 感觉就include比较给力 可以直接进行页面的转发

        内置对象:可以直接在JSP中使用的Java对象 免去了创建对象的操作
                其中需要重点掌握的是pageContext 这货比较牛 可以召唤其他8个小弟(内置对象)
                还可以在指定的作用域内存取数据 从小范围到大范围查找指定的属性
                在四个域中存储数据
                                        域范围                存储数据的对象
                PageScope        :当前页面有效        PageContext
                RequestScope        :一次请求到响应之间        request
                SessionScope        :浏览器为关闭之前        session
                ApplicationScope        :应用(???)范围                application

        动态标签:<jsp:xxx />简化代码 可以直接使用代码的功能
        静态和动态包含的区别:
        静态包含是直接复制了页面中的代码拿来使用  而动态包含是把代码的执行结果拿过来使用(操作方式区别不同)

虽然视频看了挺多遍了,但是感觉知识点还是太抽象了,不知道哪里是必须掌握的地方,总想把全部都吸收 然而捡芝麻丢西瓜
我比较不愿听到关于以后工资的事情 说的多了也就烦了 我不期望有什么月薪过万 付出和收获是相对的 还没付出就讨论结果是最搞笑的一件事情
我觉得只要工资不是太过分就OK 毕竟刚入行不要太膨胀 需要慢慢积累经验
希望自己接下来能更加努力吧 现在的状态差都是之前膨胀的结果吧
回复 使用道具 举报
叶身辉:
主要学习的是session和jsp,
session和cookie是一对好基友,只是session是域对象,cookie用来连接浏览器,结合案例主要是购物车的案例,需要用session域对象和cookie来和浏览器传输数据,session是保存在服务器中的各种数据,需要使用cookie保存的钥匙才能打开,实际上浏览器和服务器仍然是传递的cookie,他们的生命周期都是一次会话,但是cookie有大小限制,而session因为保存在服务器中所以没有大小限制,通过这样的方式可以提高了传输的效率和安全性,session默认保留时间是30分钟,
学习jsp主要是学了如何在jsp页面输出java代码和一些底层代码是如何实现这些功能的,但是我们要尽量避免在jsp上写java代码,
之后是结合前几天的知识所完成的案例的互相关联和一些注意事项

一, 首先,需要完成一个基本的环境配置准备工作():
1;准备四个jsp文件:
cart.jsp                        购物车界面
login.jsp                        登陆界面
product_list.jsp        商品列表界
regist.jsp                        注册界面
2;导入需要的jar包:
c3p0-0.9.1.2.jar                                        c3p0jar包
commons-dbutils-1.4.jar                                DBUtils 的jar包
mysql-connector-java-5.0.8-bin.jar                mysql的jar包
3;C3P0所需要的xml文件
c3p0-config.xml  固定的xml文件名
4,创建项目,将以上文件全部拷贝到项目中,
二, 开始准备java代码
(一)注册的servlet
1.处理中文乱码request.setCharacterEncoding("utf-8");
2.接收从页面传过来的参数:request.getParameter();
3.将接收到的参数保存到一个实体类中:创建实体类对象调用set方法
4.调用service业务处理层
5.在service中调用dao先查询是否存在用户名,如果不存在就添加到数据库
6.再跳转页面request.getRequestDispatcher("/login.jsp").forward(request, response);或者重定向,
(二)登陆的servlet
1.处理中文乱码问题
2.接收页面传过来的参数账号和密码
3.将参数保存到实体类中,传给service
4.调用Dao核对账号密码是否正确
5.传回servlet,跳转页面
(三)购物车cart 的servlet
1,处理中文乱码的问题:
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
2,调用购物车的session域对象,request.getSession().getAttribute("cart");购物车的域对象是session(“cart”, map);名字+map集合
3,如果不存在就创建一个,map = new LinkedHashMap<String ,Integer>();因为linkedhashmap比较方便增删数据
4,如果存在就直接判断map中是否存在传过来的参数key,存在的话将其value加1再存进去,不存在的话就直接给map添加一个数据
5,将处理好的数据存入session对象中
6,输出的中文编码和跳转页面
三 ,使用到的不熟悉的知识点和方法
1.中文的get请求的编码
2.Session(“cart ”,map)域对象格式map=LinkedHashMap<String ,Integer>();
3.遍历map集合的方法需要复习
4.注意跳转的时候保存数据什么时候该用什么域对象request/session/servletcontext
注意每个域对象的作用范围和生命周期.
5.${域对象的名称},可以把值显示在页面上
6.商品的连接要改成"/Demo0607/CartUserServlet?name=苹果"这种样式而不是定义参数name
回复 使用道具 举报
何平波
Cookie本身是有大小和个数的限制.Session没有限制.Cookie的数据保存在客户端,Session数据保存在服务器端.
Session的执行原理:基于Cookie的.
使用Session:
* 获得Session:
    * request.getSession();
案例二添加购物车
案例步骤解析加理解
1.首先需要有商品页面,且将商品添加超链接并且为超链接设置解析路径和name属性
<a href="/Test/AddServlet?name=xxx">加入购物车</a>
2.一个Servlet类,获得商品的name属性
//获取商品数据
String name = request.getParameter("name");
3.//获取map集合,这里可以将map集合的数据直接存入session中,这里的cart是session寻找想对应的存取值,
Map<String,Integer> map=(Map <String,Integer>)request.getSession().getAttribute("cart");
//先判断map是否为空,如果为空的话,创建一个map的linkenHashMap,防止出现空指针异常,而且linkenHashMap是对于数据的增删改会比较方便
                if(map==null){
                        map=new LinkedHashMap<String,Integer>();
                }
                //在判断map的键也就是商品的名称是否包含
                if(map.containsKey(name)){
                        //如果包含的话就获取商品的数量,进行累加数量
                        Integer count = map.get(name);
                        //累加数量
                        count++;
                        //再存入map中
                        map.put(name, count);
                }else{
                        //如果不包含商品名称的话就是第一次添加
                        map.put(name,1);
                }
                //将map集合存入session中
                request.getSession().setAttribute("cart", map);
                //响应跳转超链接继续购物或者是结算商品
                response.setContentType("text/html;charset=utf-8");
                response.getWriter().println("<font color='red'><h4><a href='/Test/produts.jsp'>继续购物</a>|<a href='/Test/cars.jsp'>结算商品

</a></h4></font>");
4.最后是创建一个商品结算页面
在<% %>里编写java代码
<%
                //获取session域对象的值  用map集合接收,这里就可以同时得到商品的名称和数量
                Map<String, Integer> map = (Map<String, Integer>) request.getSession().getAttribute("cart");
                //遍历商品获得名称和数量 ,用key键寻找数量
                for (String name : map.keySet()) {
                        //获取商品名称和数量
                        Integer count = map.get(name);
        %>

        <font size="5" color="yellow">你添加的商品是<%=name%>,购买数量是<%=count%>
        </font><br>

        <%
                }
        %>
回复 使用道具 举报
陈昆明:
22.cookie本身是有大小和个数的限制的,session是没有限制的,session能够较高地提高效率,存取会比cookie简单(cookie的存取是字符串,需要指定符号连接再切割,,,)session的强大之处在于,它存的是一个对象,cookie存的是字符串,所以操作会更为灵活
session ID只有在创建后的第一次响应才会带回浏览器,否则每次服务器使用ID的话,浏览器都只是将ID副本带到服务器,服务器响应则不会将ID再次带回
Session的生命周期:
创建:当用户第一次调用getSession时,服务器内部就会创建指定名字的Session,并自动生成ID
销毁:1.session过期,默认过期时间为30分钟
         2.非正常关闭服务器,如果是正常关闭,session会序列到硬盘
         3.手动调用session中的invalidate方法
作用范围:多次请求,(一次会话)
验证码更换清除缓存的操作,加上一个时间戳?time=new Date().getTime();
23.jsp的注释只会存在于jsp的源代码中,翻译成Servlet后,JSP注释就会消失,Java中的代码块用html注释是注释不了的
24.JSP的九大内置对象
Request
Response
Session
Application
Page
pageContext
config
out
exception
out和response.getWriter不是同一个对象,out的真实对象是JspWriter
回复 使用道具 举报
李思贤:Session:是将数据保存到服务器端.利用Cookie回写一个Session的ID.获得Session对象域的方法:request.getSession();

Session的作用范围:为一次对话(多次请求)

生命周期:
Session创建:第一次调用getSession方法时创建
Session销毁:
* 1.session过期. 默认过期时间为30分钟.
* 2.非正常关闭服务器.如果正常关闭session序列化到硬盘.
* 3.手动调用session.invalidate();

JSP脚本元素(JSP中嵌入Java代码):
1* <%!    %>:翻译成类中的成员部分. 定义变量,定义方法,定义类.Servlet是线程不安全的,尽量少在类中定义成员属性!!
2* <%     %>:翻译成类的service方法内部的内容. 定义变量,定义类,直接写代码块.
3* <%=    %>:翻译成service方法内部的out.print();

JSP九大内置对象(在Jsp中不用new就可以直接使用的对象)
1`request 2`response 3`session 4`application 5`page 6`pageContext(重要) 7`config 8`out 9`exception

pageContext :
1 可获得其它8个内置对象
2 向jsp的4个域中存取数据
4个域:
(1):PageScope      :当前页面中有效
(2):RequestScope   :一次请求范围中有效
(3):SessionScope     :一次对话范围中有效
(4)ApplicationScope     :应用范围(在服务器正常开启至关闭中有效?)
JSP九大内置对象(在Jsp中不用new就可以直接使用的对象)
1`request 2`response 3`session 4`application 5`page 6`pageContext(重要) 7`config 8`out 9`exception



案例总结:
1注册
在regist页面中填写数据后,跳转到registServlet中
在registServlet中接收参数(要注意中午乱码问题),然后调用Service中的regist方法,返回一个参数来判读是否注册成功.
,在Service中先要做出判断数据库中用户名是否被占用,调用个query方法,,给registServlet返回参数,若没被占用再执行regist方法向数据库添加注册对象.
我们registServlet中接收到返回值就可以在页面中打印是否注册,用request.setAttribute(“msg”,”xxx”)方法转发给页面,页面内用<span>${ msg }</span>接收显示在页面上,这里我们不论是否注册成功都用msg,因为request作为域对象,一次请求一次响应就没了.不会影响下次使用.

2登录
在loginServlet中接收参数,然后调用Service中的login方法,返回一个参数来判读是否注册成功,去数据库查找是否含有这个对象,若无,跳转到登录页面,把错误信息打出来,注意此时request.setAttribute(“msg1”,”xxx”)  这里不能再用msg了,和上面的msg会混淆,发生错误.,若有找个对象,把登录人信息保存在session中,用重定向跳转到商品页面.在product_list.jsp中
开头欢迎这个人,用<span>${aaa.nickname},欢迎光临</span>.

3商品列表(必须登录才能访问)
刚才登录人信息已经保存在session中了,我们在页面中只要查询session是否含有这个信息就可以了,在product_list.jsp的body开头中
注意导包和强转User
<%
                User realname= (User) request.getSession().getAttribute("existUser");
                if (realname== null) {
%>
        <h3>请先<a href='/Test/login.jsp'>登录</a></h3>
<%
                } else {
%>
.......
<%>
}
</%>
在最后body结束前还要<%> }</%>

4添加到购物车(登录才能访问)
登录才能访问同上
cartServlet中先接受参数String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "UTF-8");
Map<String , Integer> map =(Map<String, Integer>) request.getSession().getAttribute("cart");
                if(map==null){
                        map=new LinkedHashMap<String, Integer>();
                }
                //判断有无该商品
                if(map.containsKey(name)){
                Integer count=        map.get(name);
                count++;
                map.put(name, count);
                }else{
                        map.put(name, 1);
                }
               
                request.getSession().setAttribute("cart", map);
                response.setContentType("text/html;charset=UTF-8");


然后再cart.jsp接收
<%
        Map<String,Integer>map=(Map<String,Integer>)request.getSession().getAttribute("cart");
        for(String name:map.keySet()){
                Integer count =map.get(name);
%>
.....
<%
        }
%>

未完待续...
回复 使用道具 举报
吴鹏

总结

Session的作用范围是:一次会话,一次会话指的是打开浏览器,访问网站,关闭浏览器,这样的称为一次会话;
创建:服务器端第一次调用getSession()方法的时候;
销毁:浏览器关闭时只是销毁了JSESSIONID,如果直到此ID,依然可以访问;当Session过期(默认为30分钟),非正常关闭浏览器,手动调用
    session.invalidate()方法的时候,session就会销毁;
对比:
        作用范围    创建        销毁时间
Request        一次请求    浏览器向服务器发送请求时    服务器向浏览器响应
ServletContext    整个工程    服务器加载时    服务器关闭或项目被移除时
Session        一次会话    服务器调用getSession()方法时    超过默认设定时间或服务器非正常关机或调用session.invalidate()


JSP相关:
JSP脚本即为在JSP页面中使用的Java代码,所以,我们要记住引用Java代码的方式:
引用方式有三种:
<%    %>,service中的代码;变量,类
<%!    %>,成员的内容,方法,变量,内部类;但是会被其它调用,不建议使用;
<%=    %>,输出语句中的内容;out.print()的内容;

内置对象:

在JSP中可以直接使用的对象;
九大内置对象:
request        HttpServletRequest
response        HttpServletResponse
session        HttpSession
application    ServletContext   
page        Object
pageContext    pageContext
config        ServletConfig
out        JspWriter
exception        Throwable

四大域及作用范围:

request        作用范围是在一次请求中,一般与转发联立使用;

ServletContext    作用在整个项目;

Session        作用范围是一次会话中;

PageContext    作用在整个页面;




回复 使用道具 举报
郑志祥
四个域对象
1.ServletContext     context域  
2.HttpServletRequet  request域  
3.HttpSession        session域     Servlet时就能接触到  
4.PageContext        page域     --jsp学习的  



域的作用范围
1.page域:    只能在当前jsp页面使用                (当前页面)  
2.request域: 只能在同一个请求中使用               (转发)  
3.session域: 只能在同一个会话(session对象)中使用  (私有的)  
4.context域: 只能在同一个web应用中使用            (全局的)  
session何时创建和销毁?作用范围:
* 创建:服务器端第一次调用getSession()创建session.
* 销毁:三种情况销毁session:
    * 1.session过期. 默认过期时间为30分钟.
    * 2.非正常关闭服务器.如果正常关闭session序列化到硬盘.
    * 3.手动调用session.invalidate();
* 作用范围:多次请求.(一次会话)
Jsp既可以写html又可以写java代码(如下)
JSP的脚本: <%!    %>      <%     %>      <%=    %>
Jsp的九大内置对象
1 request 域对象  httpreques   一次请求
2 response        httpresponse
3 session 域对象  httpsession   一次会话
4 application 域对象 servletcontext 应用
5 page            object
6 pagetext 域对象 pagecontext 当前页面
7 config     servletconfig
8 out   jspwriter
9 exception   throwable
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马