day07笔记.docx

上传人:b****8 文档编号:10947533 上传时间:2023-02-23 格式:DOCX 页数:21 大小:287.36KB
下载 相关 举报
day07笔记.docx_第1页
第1页 / 共21页
day07笔记.docx_第2页
第2页 / 共21页
day07笔记.docx_第3页
第3页 / 共21页
day07笔记.docx_第4页
第4页 / 共21页
day07笔记.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

day07笔记.docx

《day07笔记.docx》由会员分享,可在线阅读,更多相关《day07笔记.docx(21页珍藏版)》请在冰豆网上搜索。

day07笔记.docx

day07笔记

今日任务:

1、request介绍

2、JSP相关技术简单介绍

3、Cookie技术

4、Seesion技术

课堂笔记

1、Request请求

1.1、URL编码问题

在浏览器端给服务器发送请求的时候,请求的数据URL,都会被浏览器先进行编码。

然后把编码后的数据先通过请求发给tomcat服务器。

服务器接收到数据之后会对其中的编码数据进行ISO8859-1解码。

当在Servlet程序中我们通过HttpServletRequest对象获取到数据时已经是tomcat服务器解码后的乱码数据。

浏览器为什么要进行URL数据的编码呢?

浏览器把数据提交给服务器的时候,必须以安全数据的方式提交。

安全数据ascii码表中的数据。

sex=%E7%94%B7

男------》编码--------》E794B7------》编码后的数据,每个字节使用%作为分割符

服务器端拿到数据之后,会按照ISO-8859-1进行解码。

我们也可以自己手段的进行URL编码:

在学习js的时候,学习过全局函数。

1.2、request利用请求转发传递数据

演示请求转发:

需要2个Servlet程序。

在第一个Servlet程序中转到第二个Servlet中,然后在第二个Servlet中给用户响应数据。

publicclassAServletextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

response.setContentType("text/html;charset=utf-8");

//在AServlet中转到BServlet中,给用户响应数据

/*

*RequestDispatcher称为转发器,主要实现从一个Servlet中转到其他的Servlet中

*forward转发,forward(request,response)接收的Request和response对象

*就是当前这个Servlet中的request和response对象

*

*request.getRequestDispatcher("")

*我们通过request对象中的getRequestDispatcher方法,可以得到一个转发器,转到其他的Servlet中

*getRequestDispatcher方法需要一个字符串数据。

这个字符串表示的是转发的目的地

*转发的路径是给服务器使用的,在写路径的时候千万别加项目名

*/

System.out.println("数据正在转发.......");

RequestDispatcherdispatcher=request.getRequestDispatcher("/b");

dispatcher.forward(request,response);

//request.getRequestDispatcher("/b").forward(request,response);

/*

*给客户端响应数据

*在使用转发的时候,在forward之后,不要使用response给客户端写数据,

*只有在最后的那个Servlet中才能通过response给客户端写响应数据,数据才会写给客户端。

*/

response.getWriter().write("转发之后数据不会到客户端");

}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

doGet(request,response);

}

}

publicclassBServletextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

System.out.println("转发过来的.........");

response.getWriter().write("转发后的数据在最后的一个Servlet中是可以写给客户端的......");

}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

doGet(request,response);

}

}

1.3、request对象在转发中当作容器使用

ServletContext对象就可以保存项目中的共享数据。

在任何一个Servlet中都可以取出其中的数据。

用户的本次请求中需要保存一些参数,最后在响应到页面上的时候,把这些数据全部给当前用户这次请求而服务。

当用户下次在请求的时候,就会是一个新的request对象,保存新的数据,和上次的没有任何关系。

**

*在当前的Servlet中通过requeset对象保存数据,然后转发到其他的Servlet中取出数据,并处理

*@author上海传智播客

*@2015年1月31日上午10:

46:

28

*

*/

publicclassServletForward1extendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

//把requeset对象当作容器来使用

request.setAttribute("name","张三");

request.setAttribute("addr","天上人间");

System.out.println("数据已经保存到request对象中");

//转发过去

request.getRequestDispatcher("/forward2").forward(request,response);

}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

doGet(request,response);

}

}

 

/**

*处理转发过来的数据

*@author上海传智播客

*@2015年1月31日上午10:

47:

16

*/

publicclassServletForward2extendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

//取出request中的数据

Objectname=request.getAttribute("name");

Objectaddr=request.getAttribute("addr");

System.out.println("从request中取出的数据:

"+name+"....."+addr);

response.setContentType("text/html;charset=utf-8");

response.getWriter().write("从request中取出的数据:

"+name+"....."+addr);

}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

doGet(request,response);

}

}

1.4、客户端访问服务器的流程图解

2、JSP相关技术简单介绍

JSP:

JavaServerPage。

jsp的出现主要是方便我们书写网页的。

2.1、Servlet的缺点

Servlet程序主要是用来处理用户的请求和响应。

但是通过Servlet动态的给客户端响应html相关的数据时,十分的麻烦。

直接通过html文件CSS文件、JS文件等书写的资源都属于静态的web资源。

而通过Servlet程序生成的html数据都称为动态的web资源。

使用Servlet书写html标签十分麻烦。

并且网页的设计和维护一般不是后台程序员管理。

而是公司的美工(网站前端工程师)通过专业的软件来制作。

在开发中一般是由美工写好静态的html页面,然后交给后台的程序员使用。

后台程序员书写的代码如果在生成html数据,导致美工无法维护。

后台书写的过程十分麻烦。

并且美工是不懂后台程序,这样导致工作无法进行。

sun公司也发现Servlet的缺点。

因此研发了JSP技术。

jsp技术,主要是用来书写html代码。

同时在jsp文件中可以嵌入CSS、JS以及Java代码。

JSP文件和html几乎一样。

这样我们就可以在jsp中书写html代码。

后期开发我们使用JSP显示Servlet处理完的数据。

一般开发模式:

用户请求Servlet程序程序,在Servlet中处理数据,处理完成之后,使用请求转发技术,转发到JSP页面上,在JSP页面上使用html代码显示处理完的数据(MVC设计模式)。

2.2、JSP快速入门

使用MyEclipse的模版创建JSP页面:

修改MyEclipse打开JSP文件的默认方式:

jsp文件的保存位置:

jsp页面访问过程:

JSP翻译完成之后,其中有三个方法,表示的是jsp的生命周期方法:

在service中为用户服务。

 

MyEclipse的jsp模版编码表修改:

2.3、JSP三种脚本元素

--

由于在jsp可以书写htm代码,也可以书写java代码。

在jsp页面上书写html和直接写html文件没有区别。

但是如果要写java代码就必须使用对应的JSP脚本嵌入。

-->

--

JSP的脚本声明

-->

<%!

//称为jsp的脚本声明

intx=100;

classPerson{

}

%>

--

JSP脚本表达式

jsp脚本表达式中不能书写分号

-->

<%="你好jsp"%>

--

jsp脚本片段

-->

<%

for(inti=0;i<10;i++){

%>

<%

out.println(i);

%>

<%

}

%>

 

总结三种脚本:

1、脚本声明

格式:

<%!

java代码

%>

2、脚本表达式

格式:

<%=表达式%>表达式后面不能加分号

3、脚本片段

格式:

<%

java代码

%>

html代码

<%

java代码

%>

html代码

2.4、EL表达式入门

EL表达式:

expressionlanguage表达式语言。

它的主要作用是在jsp页面中取出不同范围(ServletContext,request容器)中保存的数据。

使用EL表达式简化JSP页面上的Java代码。

EL表达式的格式:

${表达式}

3、Cookie介绍&Cookie案例

3.1、Cookie和Session技术概述

会话技术:

当用户打开浏览器开始访问某个网站,到用户关闭浏览器,不再做任何操作,这个过程称为一次会话。

基于这次会话,用户的操作后台会有相应的数据需要通过用户的操作进行保存。

在会话的过程中,每次的请求服务器都会记录住用户的操作,并把这些操作写给浏览器,浏览器下次在进行其他操作时,就会显示上次的操作轨迹。

在会话中要保存用户的操作,就需要使用到其他的对象来专门负责保存这些操作中的数据。

sun公司给我们提供了2个对象:

Cookie对象:

Cookie对象主要是在服务器端把数据保存在其中之后,最后在给用户响应的时候,会把Cookie对象中保存的数据写给浏览器,然后浏览器会保存在自己的缓存目录中。

当用户下次在访问服务器的时候,会携带上次服务器给用户写的Cookie信息,服务器接收到Cookie之后,就会知道用户上次的操作。

Seesion对象:

Seesion对象是在服务器端把用户的操作保存在其中,在给用户响应的时候,不会把Session对象中的数据写给客户端,只要客户端不关闭浏览器,那么服务器端就一直会有一个Session对象和用户当前的这个浏览器一一对应。

并保存当前浏览器所有会话期间操作的数据保存工作。

3.2、Cookie案例演示

 

3.3、Cookie的API介绍

案例:

记录用户的上次访问时间。

需要一个Servlet程序专门处理每次用户的请求时间,和携带的上次访问时间的信息,以及给客户端回送访问时间。

3.3.1、创建Cookie

使用Cookie的构造方法就可以直接创建Cookie对象,在创建的时候,需要指定key和value值,当浏览器携带Cookie到服务器端,获取到Cookie对象之后,就需要根据key值判断是不是我们需要的Cookie数据。

3.3.2、获取Cookie

当浏览器访问服务器的时候,只要访问的这个网站以前给客户端写过Cookie对象,那么浏览器在访问的时候,就会自动携带Cookie到服务端,在Servlet中我们可以使用Request对象中的getCookies方法拿到所有的携带Cookie对象。

在Servlet中获取到Cookie数组之后,首先需要判断当前的数组是否存在,如果不存在,浏览器没有携带Cookie到服务器。

如果存在,得到的是一个数组,需要遍历数组取出每个Cookie对象,然后获取Cookie的key值,判断是否是自己想要的Cookie数据。

使用Cookie对象中的getName方法,可以取到当前某个Cookie对的key值

使用getValue方法取到某个Cookie的value值。

3.3.3、发送Cookie

在Servlet中给客户端写Cookie数据,直接使用response完成。

3.3.4、Cookie分类

Cookie分类:

临时Cookie(会话级别的Cookie):

临时Cookie,仅仅在浏览器运行的期间有效。

关闭浏览器Cookie数据消失。

Cookie是在服务端写给客户端的数据,在客户端下次访问服务器的时候会携带给服务器。

持久Cookie:

可以使用Cookie对象中的方法,把Cookie设置成持久的Cookie,那么在关闭浏览器之后Cookie数据会被保存在浏览器的缓存文件中。

setMaxAge(intexpiry)设置Cookie过期时间。

3.3.5、设置路径

3.3.6、Cookie的有效域名

设置Cookie的有效域名。

可以不设置。

一般一个网站都会设置和自己网站相关的Cookie数据。

如果设置的域名不是自己网站的域名,这样的Cookie我们称为第三方Cookie。

一般的浏览器默认都会阻止第三方Cookie数据。

3.3.7、删除Cookie

删除持久Cookie信息:

1、创建一个Cookie对象,key值和以前保存的Cookie的key值必须一致。

然后value写“”

2、把过期时间设置成-1.这样在浏览器关闭之后,持久的所有Cookie全部无效了。

删除Cookie信息的时候,一定要保证新创建的Cookie的setPath和原始的path一定一致。

Cookiecookie=newCookie(“time”,””);

cookie.setMaxAge(-1);

cookie.setPath(“/day07”);

response.addCookie(cookie);

3.3.8、Cookie案例(商品浏览记录)

案例:

浏览记录

1、jsp页面显示所有的商品,同时用户可以点击商品,进行查询和购买

2、定义Servlet程序处理用户的请求,同时记录用户本次访问的商品信息,以Cookie的形式写给客户端

所有的商品

显示所有的商品

  • id=1">笔记本

  • id=2">手机

  • id=3">电视机

  • id=4">空调

  • id=5">冰箱

--

使用jsp脚本代码取出Cookie中的数据。

显示浏览记录

-->

您曾经浏览过的商品是

<%

String[]goods={"","笔记本","手机","电视机","空调","冰箱"};

//获取Cookie数据

Cookie[]cookies=request.getCookies();

if(cookies!

=null){

//遍历

for(Cookiec:

cookies){

if(c.getName().equals("good")){

Stringids=c.getValue();

String[]strs=ids.split(",");

//{"1","2","3","4","5"}

for(Strings:

strs){

inti=Integer.parseInt(s);

out.println(goods[i]);

}

}

}

}else{

out.println("您还没有浏览商品");

}

%>

 

/**

*处理用户的单个商品请求

*@author上海传智播客

*@2015年1月31日下午4:

30:

15

*/

publicclassGoodsServletextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

//获取用户携带的商品的id信息

Stringid=request.getParameter("id");

//获取携带的Cookie

Cookie[]cookies=request.getCookies();//Cookie("good","1")

Cookiecook=null;

Stringold_id=null;

//判断是否获取到Cookie

if(cookies!

=null){

//遍历数组,取出和商品相关的Cookie对象

for(Cookiecookie:

cookies){//遍历会获取到某个单独的Cookie对象

//获取Cookie的名字,判断是否和商品相关

if(cookie.getName().equals("good")){

cook=cookie;

//说明用户以前已经访问过某个商品了,获取访问过的商品的id信息

//Cookie("good","1")

StringgoodId=cookie.getValue();

//判断当前拿到的这个商品是否已经是访问过的商品

if(!

(goodId.contains(id))){

old_id=goodId+","+id;

}else{

old_id=goodId;

}

}

}

}

if(cook==null){

cook=newCookie("good",id);

}else{

cook=newCookie("good",old_id);

}

//把Cookie写给客户端

cook.setMaxAge(60*60);

cook.setPath("/day07");

response.addCookie(cook);

//重定向到显示所有商品的页面上

response.sendRedirect("/day07/allGoods.jsp");

}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

doGet(request,response);

}

}

 

4、Session原理和案例

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1