今天内容:
1.jsp介绍(了解)
2.cookie(重点)
3.session(重点)
====================================================
复习:
response
处理http响应
setStatus(int c)
setHeader()
ServletOutputStream response.getOutputStream();
PrintWriter response.getWriter();
响应数据的乱码:
setCharacterEncoding();
setHeader("Content-Type","");
setContentType();
request
getMethod();
getRequestURI();
getRequestURL();
getProtocol();
getRemoteAddr();
getContextPath();
获取请求参数
String getParameter(String name);
String[] getParameterValues(String name);
Enumeration getParameterNames();
Map<String,String[]> getParameterMap();
重要概念
request域
生命周期:请求发送到服务器,创建request,response对象,当响应产生时,request,response销毁。
它的作用域,是在请求转发的练中.
请求转发:
RequestDispatcher rd= request.getRequestDispatcher("/资源路径");
rd.forward(request,response);
重定向
response.sendRedirect("/虚拟目录/资源路径");
=====================================================================
1.jsp
jsp:java server page
jsp作用:jsp本质上也是一个servlet,它解决了servlet做展示不方便问题.
jsp可以简单理解成:在html中嵌入了java代码.
servlet:在java代码中嵌入了html代码.
jsp基本原理:
查看图
jsp脚本元素
<%! %> 所写的内容会生成成员位置上。
<% %> 所写的代码会生成_jspService方法中,也就是局部位置。
<%= %> 它是将信息直接输出到页面 out.println():
获取各种域中存储的数据
<%=request.getAttribute(“name”);>
${requestScope.name}
=====================================================
2.会话技术
什么是会话?
会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
会话技术有什么用?
通过会话技术可以存储用户在一次会话过程中产生的数据。
对于我们开发,使用的是http协议,它是无状态协议。
========================================================
会话有两种:
cookie:客户端会话技术
session:服务器端会话技术。
3.cookie
Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
4.关于cookie的API
1.创建cookie
javax.servlet.http.Cookie类
Cookie cookie=new Cookie(String name,String value);
2.通过cookie对象获取name,value
String cookie.getName();获取名称
String cookie.getValue();获取值.
3.怎样将cookie携带到浏览器与怎样从请求中获取cookie。
response.addCookie(Cookie c);
Cookie[] request.getCookies();
问题:为什么第二次访问时,cookie信息会带到服务器端?
原因:是因为cookie是有path的。
setPath()去设置其cookie的路径,那么当访问这样的路径时,cookie信息就会携带到服务器端。
可以简化写成 setPath("/");
5.cookie示例---显示用户上一次访问时间
6.cookie持久化问题
默认情况cookie是会话级别,它是存储在浏览器内存中,如果关闭浏览器,cookie消失.
可以通过setMaxAge这个方法来将cookie设置为持久化.
7.删除持久化cookie
setMaxAge(0); 直接删除
setMaxAge(负数); 浏览器退出时,才删除cookie文件.
注意:要想删除,必须要保证path值一致.
==========================================================
cookie示例:显示浏览商品信息
===============================================================================================
session
服务器端的会话技术.
session也是一个域对象.setAttribute() getAttribute();
它的真实类型是HttpSession.要想获取一个session对象,通过request对象获取
HttpSession session=request.getSession();
getSession()这个方法,它会根据http请求中的cookie是否存在jsessionid这样的值,如果存在,
会在服务器中根据jsessionid值去查找内存中是否存在对应id的session对象。如果有,直接拿来使用,
如果没有,创建一个新的session对象。
session示例--购物车功能
=======================================================
1.关于session失效
1.session有默认失效时间
在tomcat/conf/web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
这个就是session的默认失效时间 30分钟.
2.关闭服务器
当正常关闭服务器时,会将session持久化到文件中。
3.HttpSession类中提供session销毁操作方法
public void invalidate()
销毁session。
4.HttpSession类中设置session失效时间
public void setMaxInactiveInterval(int interval)
以秒为单位
2.禁用浏览器后的session处理
例如:
http://localhost:8080/day12_2/one 它会创建一个session,并向session中存储 setAttribute("username","张三");
这次创建session时的id 是 804C967456B1D4318E76F17D6E2C0123
在次访问
http://localhost:8080/day12_2/two,它会得到一个session,并从session中获取 getAttribute("username");
如果cookie没有禁用,那么会得到张三.
但是cookie禁用了,第二次得到的又是一个新的session对象,就得到了null.
现在
http://localhost:8080/day12_2/two;jsessionid=804C967456B1D4318E76F17D6E2C0123;
就会在two这个servlet中得到张三信息.
解决方案是使用url重定.
URL重写
response. encodeRedirectURL(java.lang.String?url)
用于对sendRedirect方法后的url地址进行重写。
response. encodeURL(java.lang.String?url)
用于对表单action和超链接的url地址进行重写
===============================================================================
示例----一次性验证码
===================================================
Servlet中的三个域对象
ServletContext 生命周期 与web应用是一样。
HttpSession 生命周期
HttpServletRequest 生命周期 请求来创建,响应回去销毁。
这三个都是域对象.
setAttribute()
getAttribute()
removeAttribute();
问题:什么时候使用域对象?
只要能使用request解决的就使用request.
ServletContext用于存储全局数据---与当前工程有关信息.
HttpSession,用于存储会话过程产生的数据,一般情况下,是与用户相关的信息。
HttpServletRequest 这个只有在请求转发过程中才存在。它一般存储错误信息。
===================================================================================
总结:
cookie
1.创建cookie
2.怎样将cookie携带到浏览器端
3.怎样从请求中获取cookie.
4.cookie的持久化与删除
setMaxAge()
setPath();
5.关于cookie信息(浏览器中最多可以有300个cookie,每个站点有20个cookie,cookie最大4kb)
代码要求:浏览记录
session
1.session获取 request.getSession();
2.session原理
它是需要cookie支持.
3.session域对象使用
购物车
4.关于session的销毁.
5.关于session笔试题
1.禁用cookie后使用session
url重写
2.关于浏览器关闭,session销毁。
会话是什么,它解决什么问题?
==============================================
补充:
关于RequestDispatcher中的include方法.
RequestDispatcher.include方法用于将RequestDispatcher对象封装的资源内容作为当前响应内容的一部分包含进来,从而实现可编程的服务器端包含功能
一般情况是用于页面的布局.
======================================
作业:
1.自己写出商品浏览记录显示代码
2.session实现购物车
3.一次性验证码会使用