一、jsp简介
1.jsp的作用
Servlet:
缺点:不适合设置html响应体,需要大量的response.getWriter().print("***")
优点:动态资源,可以编程
html:
缺点:html是静态页面,不涉及动态信息
优点:不用为输出html标签而发愁
jsp:java server pages
优点:在原html的基础上添加java脚本,构成jsp页面
2.jsp和servlet的分工:
jsp:
作为请求发起页面,例如显示表单、超链接
作为请求结束页面,例如显示数据
Servlet:
作为请求中数据处理的环节
原理如下:
3.jsp的组成
jsp=html+java脚本+jsp标签(指令)
jsp中无需创建即可使用的对象一共有9个,被称之为9大内置对象,例如:request对象,out对象
3种java脚本:
<%...%>:java代码片段(常用),用于定义0-N条java语句
方法内可以写什么,它就可以写什么
<%=...%>java表达式,用于输出(常用),用于输出一条表达式(变量)的结果
response.getWriter().print(...)这里能放什么,它就可以放什么
<%!...%>声明,用来创建类的成员变量和成员方法(基本不用,但容易考到)
class Myclass{....} 里面能放什么,它就可以放什么
4.jsp原理
jsp其实是一种特殊的Servlet
当jsp页面第一次被访问时,服务器会把jsp编译成java文件(这个java文件其实就是一个Servlet类)
然后再把java编译成.class文件
然后创建该类对象
最后调用它的service()方法
第二次请求同一jsp时,直接调用service()方法
注:out.write()和out.println()是相同的功能
5.jsp注释
<%.......%>当服务器把jsp编译成java文件时已经忽略了注释部分
二、Cookie
1.Cookie的用途
服务器使用Cookie来跟踪客户端状态
保存购物车(购物车中的商品不能用request来保存,因为他是一个用户向服务器发出的多个请求信息)
显示上次登录信息(也是一个用户多个请求)
2.javaweb中使用Cookie
原始方式:
使用response发送Set-Cookie响应头
使用request获取Cookie请求头
便捷方式:
使用response.addCookie()方法向浏览器保存Cookie
使用request.getCookie()方法获取浏览器归还的Cookie (null)
注意:Cookie是不能跨浏览器的!!!!
3.Cookie详解
Cookie不只有name和value两个属性
Cookie的maxAge:最大生命周期,即Cookie可保存的最大时长,以秒为单位。
maxAge > 0:保存在本地硬盘上,单元为秒
maxAge < 0:只在内存中存活;
maxAge = 0:浏览器会马上删除这个Cookie
4.Cookie的path
三、HttpSession
1.HttpSession简介
HttpSession是由javaweb提供的,用来会话跟踪的类,ses sion是服务器端对象,保存在服务器端。
HttpSession是Servlet三大域对象之一(request、session、application(ServletContext),有setAttribute()\get\remove
HttpSession底层依赖Cookie,或是URL重写
2.HttpSession作用
会话范围:从用户首次访问服务器端开始,到用户关闭浏览器结束(30分钟不发起session也会消失)
会话:一个用户对服务器端的连贯性请求,所谓连贯性请求,就是该用户在多次请求间未关闭浏览器
服务器会为每个客户端创建一个Session对象
Servlet中得到Session对象:HttpSession session=request.getSession();
jsp中得到Session对象:内置对象,不用创建,直接可使用
服务器不会马上给你创建session,在第一次获取session时(request.getSession(),才会创建!)
注:request.getSession(flase):如果session缓存中(如果cookie不存在),不存在session,那么返回null,而不会创建session对象
3.其他api
void invalidate():让session失效,可用在 “退出”超链接,当用户点击时调用此方法
boolean isNew()
4.url重写
session依赖Cookie,目的是让客户端发出请求是时归还sessionId,这样才能找到对应的session
若客户端禁用了Cookie,就无法得到sessionId,那么session也就无用了
此时可以使用URL重写来替代Cookie
让网站的所有超链接、表单中都添加一个特殊的请求参数,即sessionId
这样服务器可以通过获取请求参数的sessionId,从而找到session对象
respose.encodeURL(String url)
该方法会对url进行智能的重写,当请求中没有归还sessionId这个cookie,那么该方法会重写url,否则不重写!