javaee分校课件day11-cookie与session笔记介绍_第1页
javaee分校课件day11-cookie与session笔记介绍_第2页
javaee分校课件day11-cookie与session笔记介绍_第3页
javaee分校课件day11-cookie与session笔记介绍_第4页
javaee分校课件day11-cookie与session笔记介绍_第5页
已阅读5页,还剩10页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Javaweb-与 sesJsp 简单介绍问题:jsp,它作用?Jsp 是 java servage,它的本质就是一个 servlet.显示数据问题。可以使用 jsp 来代替 servlet 来处理对于 jsp可以简单理解成是在html 页面中可以书写 java 代码。Jsp 文件的后缀名是.jsp分析:jsp 就是一个 servlet?在 tomcat 中有一个目录叫work,它里面就了 jsp 页面生成的源代码。通过查看 jsp 翻译后的 java 源代码知道它们生成的类会继承 HttpJspBase,而这个类的父类就是 HttpServlet,所以说 jsp 也是一个 servlet.J

2、sp 原理.5.6.当在浏览器上输入服务器 tomcat 得到,会通过 JspServlet 将后缀名是.jsp 的请求处理,会将 index.jsp 翻译成 index_jsp.java 文件在将 index_jsp.java 文件编译成 index_jsp.class 文件jvm 将.class 加载运行服务器生成响应,响应信息中就包含了 jsp 页面上的html 代码。Jsp 中的1.2.片段3.表达式例如:通过查看源代码知道以下:内容会生成在成员位置上。在中可以变量,方法或类内容会生成在_jspService 方法上,也就是一个局部的位置,在这个位置上可以变量(局部变量)

3、,也可以类内容就会被输出到页面上,它就是通过 out.pr(),注意在使用可以在最后以分号结尾表达式时,不Jsp 页面上的注释1.2.3.因为 jsp 页面上可以写 html 代码,可以使用 html 注释因为 jsp 页面上可以写 java 代码,可以使用 java 注释也可以使用 jsp 自己的注释 jsp 注释内容它不会在生成的 java文件中存在。案例-登陆操作代码实现:1.创建一个 login.jsp 页面2.创建一个 LoginServlet3.在 login.jsp 页面上显示错误信息通过它输出错误信息,但是如果没有错误信息会显示null,应该怎样处理哪?也可以使用后续要学习的e

4、l 表达式来完成上述操作会话技术介绍会话技术分为与 ses它是浏览器端的会话技术Ses它是服务器端的会话技术问题:会话技术?使用会话技术可以解决什么问题?会话可以简单理解成,通过浏览器直到关闭浏览器过程叫做会话服务器的资源,点击超连接可以进行资源的跳转,使用会话技术可以解决的是在整个会话过程中产生的数据的保存问题。使用 HttpServletRequest 与ServletContext 来保存会话过程中产生的数据问题分析?是网景公司发明是由服务器端创建,发送给浏览器,浏览器可以将的 key/value 保存到浏览器端,下一次在请求同一个的资源时,就可以将送给服务器。发在 javaee 的 a

5、pi 中有一个类 javax.servlet.http.造方法,它就可以创建一个,它的构是由 http 协议制定的,并不是 java 语言特有的,或.net 都可以使用。问题 1:如果将一个响应到浏览器端?可 以 通 过response.addHeader(“set-在 http 协议中生成的格式response对 象 来 操 作 , 可 以 通 过”,”one=aaa”);也可以通过简便的方法set-:one=aaa; two=bbbresponse.add();问题 2:如何在服务器端得到一个?要想得到一个在 http 请求头中有一个可以通过 request 对象来获取。:one=aaa;

6、 two=bbb可以通过request 的一个方法总结: gets()得到所有的创建将new响应到浏览器端(String name,String value);response.addrequest.get();3.在服务器中获取s();得到了一个数组。对象后, 可以使用 getName()与 getValue()方法来得到得到的名称与值。http 协议对1.规定如下:(笔试题)用于携带少量数据最大为 4kb2.3.一个服务器最多向一个浏览器保存 20 个一个浏览器最多可以保存 300 个.关于持久化问题:默认情况下,它是会话级别的,简单说,就是是在浏览器的内存中,如果将浏览器关闭,就。这个方

7、法可以让关闭浏览器后,持久化.也就是说可以在浏览器端产生一个文件,当也不会。注意:如果将 setMaxAge(0)代表的是删除.路径在删除时要注意一个关于。删除与创建时它们的路径必须一致。这个方法是用于设置路径。作用?问题:路径它的作用就是确定当服务器的资源时,是否要携带.例如 a c当/AndSesAndSes/b/jsps/AndSes/jsps/ c这时只有a会携带到服务器端,原因是路径中包含了 a的 path当 这时会有 a 与b携带到服务器端案例-上一次时间当资源(ShowTimeServlet),第一次显示的第一次,时间如果第二次,显示的是上一次时间是:x以后每一次显示的都是上一次

8、的时间。package cn.servlet.;import java.io.IOException; import java.util.Date;import javax.servlet.ServletException; import javax.servlet.http.; import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class ShowtTimeServlet

9、 extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException dot(request, response);public void dot(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException /解决响应信息乱码问题 response.setContentTy

10、pe(text/html;charset=utf-8);/ 先从 request 中获取名称叫 time 的次,如果获取不到,说明是第一次,如果可以获取到,说明不是第一 cs = request.gets(); / 获取所有的= findByName(time, cs);= null) / 第一次response.getWriter().write(if (第一次,时间是: + new Date().toLocaleString(); else /不是第一次不是第一次的 value 值表示的,要显示的时间其实是时间long time = Long.parseLong( Date date =

11、new Date(time);response.getWriter().write(上一次.getValue();,时间是: + date.toLocaleString();/ 1.创建一个= new们将当前时间的毫秒值对象,name=time value 就当前时间(time, String.valueOf(System.currentTimeMillis(); /为value我.setMaxAge(7*24*60*60);/ 2.将它携带到浏览器端response.add();/ 抽取一个方法,根据名称从数组中查找publicfindByName(String name, cs) if (

12、cs = null | cs.length = 0) return null;for (c : cs) if (c.getName().equals(time) return c;return null;案例-显示商品浏览信息Book.jsp 页面BookServletresponse.setContentType(text/html;charset=utf-8);/ 1.得到请求参数 idString id = request.getParameter(id);/ 2.将 id 拼接到中。/ 注意:需要判断是否是第一次=Utils.findByName(history, request.ge

13、ts(); if (= null) / 是第一次= new(history, id); else / 不是第一次,判断在的 value 中是否存在了现的 id/ 得到的 valueString value =.getValue();/ value 是以-分开的,可以使用 String 类的 split 方法将它转换成String,/ 在将数组转换成 List,通过 contains 方法来判断 id 在 value 中是否存在String st = value.split(-);history.jspSesSes是服务器端的会话技术, ses其实是 sun 公司定义的一个接口javax.ser

14、vlet.http.HttpSes.ses不是由 http 协议制定问题 1:ses是怎样解决会话过程中产生的数据的保存?问题 2:怎样获取一个 ses?想要获取一个HttpSes对象可以通过request 对象来获取.Ses的实现是依赖于List list = Arrays.asList(st);if (!list.contains(id) / 原来的的 value 值中不包含 id= new(history, value + - + id);/ 将 携带到浏览器端response.add();response.getWriter().write( 已 经 浏 览 了 商 品 , 继 续 浏

15、 览 ,查看浏览 );第一次请求,的请求头中没有一个叫 jsesid 的, 那么当到Demo1Servlet 时,它执行 request.getSes()就会创建一个 HttpSes对象(理解成new),当响应产生时,就将 ses的 id 做为的 value,响应到浏览器端Set-:jsesid=当一次在Demo2Servlet 时,http 请求中就会有一个:jsesid=x 信息,那么在 Demo2Servlet 中通过 request.getSes()时就会根据 jsesid 的值在服务器内存中查找对应的 ses对象,如果查找到,直接拿过来使用,不会再创建。HttpSes它也是一个域对象

16、,可以想像成是一个 Map.可以通过setribute(String,Object) getribute(String)方法来操作。Ses的生命周期:什么时候创建通过request.getSes()来获取一个HttpSes当jses时,如果请求头中没有id,那么就会创建一个 HttpSes对象。getSesgetSes()方法一定会获取一个HttpSes对象。()如果参数为 false,请求中没有 jsesid,那么就不会重新创建,而是返回一个 null.什么时候销毁立即销毁 ses.以指定的秒值为,超时后销毁 ses.在 tomcat/conf/web.xml 文件中有一段配置这段配置描述的

17、就是 ses默认在 30 分钟内没有使用,销毁。Ses案例-购物车Product.jspAddProductToCartServletpackage cn.servlet.ses;import java.io.IOException; import java.util.HashMap; import java.util.Map;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest; import javax

18、.servlet.http.HttpServletResponse;public class AddProductToCartServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException dot(request, response);public void dot(HttpServletRequest request, HttpServletResponse response)t

19、hrows ServletException, IOException response.setContentType(text/html;charset=utf-8);/ 1.得到商品的名称String name = request.getParameter(name); / 因为页面传递的是中文,并且是通过超连接方式传递,也就是 get,必须处理乱码name = new String(name.getBytes(iso8859-1), utf-8);/ 2.将商品添加到购物车/ 需要考虑是否是第一次购物,存不存在购物车Map cart = (Map) request.getSes()if

20、(cart = null) / 没有购物车,是第一次购物cart = new HashMap();/ 不是第一次购物,存在购物车,需要考虑商品在购物车中是否存在。eger count = cart.get(name);/ 如果 count=null,说明购物车中没有这个商品 if (count = null) cart.put(name, 1); else / 购物车中存在这个商品cart.put(name, count + 1);/ 将购物车request.getSes到 ses中。().setribute(cart, cart);response.getWriter().write(购物成

21、功,继续购物, 查看购物车);在 cart.jsp 页面上显示购物车品URL 重写url 重写?当浏览器,可以将 ses的 id 通过 url 路径发送给服务器。当用户通过的 id 就会自动的变成请求头的一部分,这种url 路径去将 ses服务器资源时,这时 ses的 id 自动生成的 url 路径的方式,叫 url 重写。url 重写解决当浏览器成使用 ses:了操作。,还需要使用 ses时,可以通过 url 重写的方式来完url 重写实现response.encodeRedirectURL(String path)来对重定向后的 url 地址进行 url 重写response.encode

22、URL(String path)来对表单的 action 或超连接进行 url 重写.案例-登陆案例1.创建一个 login.jsp 页面,在页面上有用户名与,还有。2.创建一个 LoginServlet,完成登陆操作,登陆成功后,会将用户信息封装到 User 对象中。并且将 user 对象会在 request 域中到 ses中,重写向到 sucs.jsp 页面。如果登陆失败,错误信息,请求转发到 login.jsp 页面,显示错误信息。3.在 sucs.jsp 页面上会从 ses中获取用户信息显示。Login.jsp 页面LoginServlet从页面获取输入的与生成的对比,问题是,生成的怎

23、样保存?中,在应该在 ImageCodeServletLoginServlet 中就直接从 sesses中将生成的又分为两码到内获取就可以,并且获取完成后,立即将 ses中的删除。package cn.servlet; import java.io.IOException;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRes

24、ponse;import cn.User;public class LoginServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException dot(request, response);public void dot(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException request.setCharacterEncoding(utf-8);/ 解决请求参数乱码/ 1.得到请求参数String username = request.getParameter(username); / 得到用户名Sucs.jsp 页面String

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论