JSP简介和会话技术

来源:互联网 发布:java wait 当前线程 编辑:程序博客网 时间:2024/05/18 10:53

课程回顾:request和response对象

response对象

1.代表的响应的对象(从服务器端到客户端),由Tomcat服务器创建的.2.ServletResponse接口,子接口HttpServletResponse

重定向的例子

1.重定向,完成页面的跳转!!2.登陆的例子    * 设置302的状态码    * 设置location的响应头(客户端绝对路径--包含项目名称)3.response提供了方法    * 直接完成重定向  sendRedirect("路径")

refresh头

1.完成页面定时刷新2.值response.setHeader("refresh","5;url=客户端绝对路径")

禁用浏览器的缓存

1.记住三个头 C E(值-1) P2.设置日期的头方法  setDataHeader(-1)

response对象乱码的问题

1.输出中文两种方式    * 字节流        * response.getOutputStream().print("哈罗我的".getBytes());        * 可能会有乱码的问题(编码不一致)            * getBytes("UTF-8")            * 设置浏览器打开文件的时采用的编码                * response.setHeader("Content-Type","text/html;charset=UTF-8")    * 字符流        * 一定会产生。        * response缓冲区输出内容,response对象由Tomcat服务器创建的,Tomcat服务器默认编码ISO-8859-1        * 设置response缓冲区的编码            * setCharacterEncoding("UTF-8")        * 设置浏览器打开文件的编码            * response.setHeader("Content-Type","text/html;charset=UTF-8")        * 简便的方式            * response.setContentType("text/html;charset=UTF-8");

文件下载的案例

1.记住一句话:两个头,一个流2.两个头    * Content-Type          使用ServletContext.getMimeType(文件名称);    * Content-Disposition       值是固定的:attachment;filename= +文件名称3.一个流    * 获取下载文件的输入流

验证码的案例

1.BufferedImage  画布2.获取画笔3.画一些内容4.ImageIO

request对象

1.从客户端到服务器端

获取客户端的信息

1.http://locatlhost:8080/demo1?username=xxx&password=yyy2.就可以通过一些方法来获取上面链接的中的每一块的信息3.获取IP,获取项目名称  request.getContentPath()

获取请求头的信息

1.request.getHeader("")2.referer       记住当前网页的来源    * 防止盗链3.user-agent    判断浏览器的版本    * 文件下载的时候

获取请求的参数

1.获取text  password   request.getParameter("name")2.Map<String,String[]> map = request.getParameterMap();    * map的key是表单中name的名称    * map的value是用户输入的内容3.request.getPatameterValues("name")  获取的复选框

获取请求参数会乱码

1.分成两种情况    * POST        * 设置request缓存的编码        * request.setCharacterEncoding("UTF-8")    * GET        * 设置Tomcat整体环境(不推荐)        * 先获取到请求的参数            * name = new String(name.getBytes("ISO-8859-1"),"UTF-8")

request域对象

1.域对象的范围    * 代表的一次请求的范围!!(发送一次请求,得到一次响应)    * 传递一些数据(提示的信息,或者展示的数据)

今天内容:JSP简介和会话技术 ##

转发和重定向的区别

1.会编写转发的代码,理解转发的含义。2.掌握转发和重定向的区别(什么使用转发,什么使用重定向)3.转发:和重定向的功能比较类似的,转发也可以完成页面的跳转的功能!!4.转发代码怎么写?    * 重定向 response.sendRedirect("路径");    * 转发,找request对象,提供了一个方法        * RequestDispatcher getRequestDispatcher(String path)  ,返回的是RequestDispatcher一个对象        * RequestDispatcher提供了一个方法,void forward(ServletRequest request, ServletResponse response)              * forward帮咱们转发的功能!!    * 代码怎么写?        * request.getRequestDispatcher("").forward(request,response)        -- 转发的代码的编写!!5.转发和重定向路径的写法    * 重定向的地址(客户端的绝对路径,包含项目名称)    * 转发的路径(服务器端的绝对路径,不包含项目名称) 6.转发和重定向区别    * 共同点:都可以完成页面跳转的功能!    * 不同点        * 重定向是两次请求,两次响应,转发是一次请求,一次响应,就可以request域来传递一些数据!!        * 重定向的地址栏会发生变化,转发的地址栏不会发生变化。        * 重定向可以定向到任何的页面(项目的中的页面,网络上的资源),转发只能在服务器的内部完成跳转!!

JSP的简介

1.SUN公司提供Servlet的技术,后来提供JSP的技术。这两个技术都属于动态WEB资源的技术。2.为什么有Servlet,又提供了JSP的技术?    * Servlet存在缺点        * Servlet技术需要配置的。        * 在Servlet中向页面输出一个表单。response.getWriter().write("<form action='' method='post' >");             * 编写前台的页面非常非常麻烦的!!不好维护!!            * 美工添加样式    * SUN推出JSP的技术,很好去解决上述这些个问题!!刚推出的时候比较火的,使用JSP已经完全把Servlet给替代了!!3.JSP    * java  server pages    java服务器的网页们    * 和servlet一样,也是运行在服务器端!!4.JSP的组成    * java代码 + HTML的代码(CSS  JS) + JSP本身自己的代码    5.JSP创建文件时,可以指定文件的编码    * 设置创建文件时的编码        * window -- 首选项 -- 搜素jsp  --  选择JSP  -- 修改编码,选择UTF-8编码!!

JSP的执行原理(理解)

1.执行的原理    * 把demo1.jsp的程序翻译成.java的文件        * 把页面上写的HTML的内容,使用输出流输出到页面上。        * 以后输出的内容不用咱们自己编写,JSP后台的源文件帮咱们去输出了        * 正常编写HTML的代码。    * 把.java的文件编译成.class的文件    * 执行了   

JSP的脚本元素

1.JSP中提供脚本元素,目的:就可以在脚本元素中编写Java代码!!2.JSP的脚本元素    * <%!   %>      -- 不常用,把JSP的文件翻译.java的文件,翻译类的全局的变量    * <%=   %>      -- 输出的语句    * <%    %>      -- 定义的变量,编写语句(if  for)

JSP开发中占用的角色

1.JSP已经入门了,Servlet学习两天了!!2.JSP的功能和HTML的功能是一样的,但是不同点是JSP属于服务器端的技术,在JSP的页面中就可以读取域对象中的内容,就可以完成前后台的页面的交互工作!!3.JSP的功能    * 收集用户输入的数据    * 显示提示的信息

cookie和session 会话技术(重要) ##

会话的概念(理解)

1.概念:打开浏览器,点击超链接(发送请求,得到响应),可以点击多次链接。最后把整个浏览器都关闭,这个过程称为一次会话!!2.什么的样的应用?    * 使用会话的技术可以保存用户相关的数据(每个不同的用户)3.例子:去网上的商城购买商品,第一次点击了手电筒的商品,把手电筒保存起来,下一次购买了冰箱,冰箱保存起来。最后去结账,需要把手电筒和冰箱同时拿出来,去结账!!    * 讨论的问题:Servlet把手电筒和冰箱保存在哪呢?

Cookie的技术

理解cookie原理(理解)

1.cookie的原理    * 基于客户端的技术。把数据保存到客户端上!!    * cookie的技术基于Http的头信息来完成的。(set-cookie(从服务器端到客户端)  cookie(从客户端到服务器端))    * 点击购买商品,在后台程序中把商品保存到cookie中,回写cookie(把cookie回写到客户端上)    * 客户端默认把cookie的内容保存在浏览器的缓存中。    * 下一次再点击购买其他的商品,默认携带cookie的信息过去的,在后台,通过cookie来获取之前购买的商品。再回写    * 浏览器就把最新的cookie的内容覆盖掉缓冲区的cookie的内容!!

cookie对象的api

1.查找JavaEE的文件,搜索Cookie的类。2.Cookie提供的一些方法    * Cookie(String name, String value)         -- 例子:Cookie c = new Cookie("product","sdt");Cookie中不能存在中文!    * String getName()                      -- 获取的Cookie的名称,c.getName() 返回的内容 product    * String getValue()                     -- 获取的Cookie的值,c.getValue() 返回的内容 sdt    * response.void addCookie(Cookie cookie)    -- 回写Cookie,把创建的Cookie回写到浏览器端!    * Cookie[] getCookies()                     -- 获取所有的Cookie,返回的是Cookie的数组!!

显示用户上次访问的时间(和Cookie的原理)

1.需求:显示用户上一次的访问时间!!弄明白需求!!2.看图

cookie的api(另外)

1.设置Cookie的相关的信息!!2.方法    * void setValue(String newValue)            -- 设置Cookie的值    * void setMaxAge(int expiry)                -- 设置有效时间        * 默认的Cookie,把Cookie默认的保存在浏览器的缓存中。一旦关闭浏览器,Cookie就被清除了。        * 通过setMaxAge(秒),把Cookie持久的Cookie。把Cookie保存在磁盘上。关闭浏览器是不会清除掉。        * 应用在哪?保存用户名。    * void setPath(String uri)                  -- 设置有效路径        * 有效路径决定什么问题?            * 访问其他资源的时候,是否会携带cookie的信息!!        * 现在没有设置过有效路径,说明默认的有效路径。/day11        * 结论:现在访问/day11/目录下的任何的资源,都会携带cookie的信息!!        * 修改内容:LasttimeServlet的访问路径。/web/lasttime        * 默认的有效路径已经改变了:/day11/web        * 现在再去访问demo1.jsp  没有携带cookie.        * 下面我要手动设置有效路径了。            * c.setPath("/day11")3.删除持久的cookie    * 假如:cookie.setMaxAge(60*60*24);    设置过一天的时间。如果之前设置过有效路径的话    * 时间刚过3个小时,就想把刚才的cookie删除掉。需要再设置一遍有效路径。cookie.setMaxAge(0);

商品的浏览记录

1.需求:显示商品的浏览记录。2.分析:    /**     * 1.先判断是否是第一次访问     * 2.如果是第一次     *  * 创建cookie,把点击的商品的id保存在cookie中。回写cookie     *  * Cookie c = new Cookie("product","1");     * 3.如果不是第一次访问     *  * 从cookie中获取到手电筒     *  * 判断cookie中是否包含点击的商品的id。     *      * 如果cookie中包含,不用处理     *      * 如果不包含,做追加的操作     *          * 用户点击了冰箱。获取冰箱的id。追击的操作。product=1,2     * 4.可以使用重定向获取转发     * 5.在页面中可以cookie中获取值。显示到页面上就可以了!!     */3.代码:看程序!!

session的技术

seesion的原理

1.session的概述    * 大家去访问服务器,服务器为每一个用户的浏览器持久一个session(在服务器的内部创建的)。    * 大家就可以把和用户相关的一些数据,保存在各自的浏览器中。    * cookie基于客户端的技术,session基于服务器端的技术2.session的原理    * 服务器为浏览器创建一个session的空间,有一个为唯一的id值。就可以把东西存入在session的空间中。返回到页面上,把id通过cookie的方式保存在浏览器的缓存中。下一次再访问,通过cookie的头信息传递id值。通过id的值就可以找到session的空间。    * session的空间创建在服务器端。    * 如果我关闭了浏览器,session空间还有吗?有!!但是钥匙没了!!唯一的id值没有了!!会你再创建一个session的空间。    * session有默认的销毁的时间30分钟。

session对象的api

1.相关的方法    * HttpSession getSession()          -- HttpServletRequest接口中的一个方法。如果第一次访问服务器端,调用该方法,那么为你的浏览器创建一个session的空间。如果是的第二次访问(钥匙没丢呢),不会创建session的空间,找空间。如果是第二次访问,但是钥匙丢了,会你再创建一个新的session的空间。2.HttpSession接口的方法    * Object getAttribute(String name)     * void setAttribute(String name, Object value)      * void removeAttribute(String name)      * String getId()                            -- session有一把钥匙,获取钥匙。    * void invalidate()                             -- 销毁session

购物车的案例(代码需要编写)

1.需求:完成购物的功能。2.分析    /**     * 1.传过来参数,接收参数,但是传过来好像是id。购物车中存的是商品的名称和数量。     * 2.向购物车中存放商品     *  * 先判断是否是第一次访问     *      * 如果是第一次访问,创建一个购物车,把商品和数量存放在购物中,存放在session。     *      * 如果不是第一次访问,判断购物车中是否已经包含该商品了     *          * 如果包含,数量+1     *          * 如果不包含,直接存放商品和数量就OK了。     * 3.继续购物还是去去结算     */

session的追踪(了解)

1.session的追踪的技术?2.session基于cookie的技术,使用cookie技术传输钥匙。如果浏览器关闭了,钥匙丢了。但是session的空间还存在!session的追踪通过钥匙找到session的空间。

session域对象(掌握)

1.session域对象的范围    * 一次会话范围(可以发送多次请求,得到多次响应)2.学习3个域对象    * 域对象的作用传递数据(可以每个域对象中存入值,从域对象中取值,不同每个域对象的范围不同 )    * request           -- 代表一次请求的范围,显示提示的信息,前台后数据的交互。    * session           -- 代表一次会话的范围,每个用户,为每个用户的浏览器创建一个独享的session空间。保存用户相关的数据。    * ServletContext    -- 代表整个WEB应用。所有的资源都共享该对象。共享的信息存放该对象。

session的创建和销毁(掌握)

1.session的创建    * 发送请求,第一次访问后台,request.getSession()方法执行了,为浏览器创建session的空间。2.session的销毁    * 手动销毁,调用invalidate()方法。    * 非正常原因关闭服务器。    * 默认的销毁的时间(30分钟,不操作)        <session-config>            <session-timeout>1</session-timeout>        </session-config>