文章目录
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>