JSP、Cookie和HttpSession

1. jsp的java脚本

  • <%...%>:java代码片段(常用),用于定义0~N条Java语句!作为方法内的内容
  • <%=...%>:java表达式,用于输出(常用),用于输出一条表达式(或变量)的结果。作为response.getWriter().print( … )的参数;
  • <%!...%>:声明,用来创建类的成员变量和成员方法(基本不用)。

2. jsp原理

jsp其实是一种特殊的Servlet:
> 当jsp页面第一次被访问时,服务器会把jsp编译成.java文件(这个java其实是一个servlet类)
> 然后再把.java编译成.class
> 然后创建该类对象
> 最后调用它的_jspService()方法
> 第二次请求同一jsp时,直接调用_jspService()方法。
在tomcat的work目录下可以找到jsp对应的.java源代码。
在这里插入图片描述
分析源码可知
html数据:out.write(“html数据”),即以字符串输出;
<%...%>:作为_jspService()方法的一部分内容;
<%=...%>:作为out.print()的参数,直接输出变量。
<%!...%>:作为类的成员变量或成员方法。
<%-- jsp注释 --%>:当服务器把jsp编译成java文件时已经忽略了注释部分!
<!-- html注释 -->:会保存作为html文件的注释

3. Cookie

HTTP协议是无状态协议,也就是说每个请求都是独立的!无法记录前一次请求的状态。但HTTP协议中可以使用Cookie来完成会话跟踪!在JavaWeb中,使用session来完成会话跟踪,session底层依赖Cookie技术。

3.1 Cookie的path:

浏览器访问服务器的路径,如果包含某个Cookie的路径,那么就会归还这个Cookie。
例如:

aCookie.path=/day11_1/; 
bCookie.path=/day11_1/jsps/;
cCookie.path=/day11_1/jsps/cookie/;
 
访问:/day11_1/index.jsp时,归还:aCookie
访问:/day11_1/jsps/a.jsp时,归还:aCookie、bCookie
访问:/day11_1/jsps/cookie/b.jsp时,归还:aCookie、bCookie、cCookie

Cookie的path默认值:当前访问路径的父路径。例如在访问/day11_1/jsps/a.jsp时,响应的cookie,那么这个cookie的默认path为/day11_1/jsps/。

3.2 JavaWeb中使用Cookie

使用repsonse.addCookie()方法向浏览器保存Cookie
使用request.getCookies()方法获取浏览器归还的Cookie

4.HttpSession

javax.servlet.http.HttpSession接口表示一个会话,我们可以把一个会话内需要共享的数据保存到HttSession对象中!

4.1 原理

session是依赖Cookie实现的。session是服务器端对象。

  • 当用户第一次使用session时(表示第一次请求服务器),服务器会创建session,并创建一个Cookie,在Cookie中保存了session的id,发送给客户端。但这个Cookie只在浏览器内存中存在。
  • 当用户第二次访问服务器时,会在请求中把保存了sessionId的Cookie发送给服务器,服务器通过sessionId查找session对象,然后使用。也就是说,只要浏览器容器不关闭,无论访问服务器多少次,使用的都是同一个session对象。这样也就可以让多个请求共享同一个session了。
  • 当用户关闭了浏览器窗口后,再打开浏览器访问服务器,这时服务器会创建一个session,再把sessionId通过Cookie保存到浏览器中,也是一个新的会话开始了。原来的session会因为长时间无法访问而失效。

4.2 URL重写

如果用户的浏览器关闭了Cookie功能,那么session不能使用了!需要如下设置:
使用response.encodeURL()方法对URL进行编码,这样URL中会智能的添加sessionId

<a href='<%=response.encodeURL("/day06_5/index.jsp") %>' >主页</a>

<form action='<%=response.encodeURL("/day06_5/index.jsp") %>' method="post">
	<input type="submit" value="提交"/>
</form>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值