jsp 中的三种 Java 脚本
- <%…%>:Java代码片段,可以放N跳Java代码!方法内能写什么,他就能放什么.
- <%=…%>:Java表达式,用于输出(常用),用于输出一个表达式(或变量)的结果。
response.getWriter.print(…);这里能放什么,它就能放什么。 - <%!..%>:声明,用来创建类的成员变量和成员方法。类体中可以放什么,他就可以放什么。
Class MyClass{
}
JSP 原理
jsp 其实就是一种特殊的 Servlrt
Cookie
- Cookie
- Cookie 是 Http 协议制定的。先由服务器保存 cookie 到浏览器,下次浏览器请求服务器时把上次请求得到的 Cookie 再归还给服务器。
- 由服务器创建保存到客户端浏览器的 Cookie 是一个键值对。
- JavaWeb 中使用 Cookie
- 使用 response.addCookie() 方法向浏览器保存 cookie
- 使用 request.getCookie() 方法获取浏览器归还的 cookie
- Cookie 详解
- cookie 的 maxAge:Cookie 可保存的最长时间,以秒为单位。例如:cookie.setMaxAge(60) 表示 Cookie 会被浏览器保存到硬盘。
maxAge > 0:
maxAge = 0:
maxAge < 0:Cookie 只会在浏览器内存中保存0
- Cookie 的 path
- Cookie 的 path 并不是设置这个 Cookie 在客户端的保存路径!!
- Cookie 的 path 由服务器创建 Cookie 时设置
- 当浏览器访问服务器的某个路径时,需要归还哪些 Cookie 给服务器呢?这由 Cookie 的path 决定。
- 浏览器访问服务器的路径,如果包含某个 Cookie 的路径,那么就会归还这个 Cookie
例如:
aCookie.path=/day11; bCookie.path=/day11/jsps; cCookie.path=/day11/jsps/cookie;
访问:/day11/index.jsp时,归还:aCookie
访问:/day11/jsps/a.jsp时,归还aCookie和bCookie
- Cookie path 的默认值:当前访问路径的父路径。
- Cookie 的域
HttpSession(*****)
- HttpSession 概述
- HttpSession 是由 JavaWeb 提供的,用来会话跟踪的类。session 是服务器端对象,保存在服务器!!!
- HttpSession 是 Servlet 三大域对象之一(resquest、session、application(ServletContext)),所以它也有 setAttribute() 等。
- HttpSession 底层依赖 Cookie,或 URL 重写!
- HttpSession 的作用
- 会话范围:会话范围是某个用户从首次访问服务器开始,到该用户关闭浏览器结束!
会话:一个用户对浏览器的多次连贯性请求!所谓连贯性请求,就是该用户多次请求中间没有关闭浏览器!
- 服务器会为每个客户端创建一个 session 对象,session 就好比客户在服务器端的账户,它们被服务器保存到一个 Map 中,这个 Map 被称之为 session 缓存!
Servlet 中得到 session 对象:HttpSession session = request.getSession();
JSP 中得到 session 对象:session 是 JSP 的内置对象,不用创建可以直接使用!
- session 域相关方法:
void setAttribute(String name, Object value)
Object getAttribute(String name)
void removeAttribute(String name)
JSP 三大指令
- page
- include --> 静态包含
- taglib --> 导入标签库
JSP 动作标签
这些 JSP 动作标签与 html 提供的标签有着本质的区别。
-
动作标签是由 tomcat 来解释执行的,它与 Java 代码一样,都是在服务器端执行。
-
html 由浏览器执行
-
<jsp:forward>:转发!它与RequestDispatcher 的 forward 方法是一样的,一个是在 Servlet 中使用,一个实在 JSP 中使用。
-
<jsp:include>:包含!它与RequestDispatcher 的 include 方法是一样的,一个是在 Servlet 中使用,一个实在 JSP 中使用。
-
<%@include> 和 <jsp:inclue> 的区别?
第一个是真正的合并,第二个相当于一个调用。 -
<jsp:param>:它用来作为 forward 和 include 的子标签,用来给转发或包含页面传递参数!
JavaBean
JavaBean 的规范
- 必须要有一个默认构造器
- 提供 get/set 方法,如果只有 get 方法,那么这个属性就是只读属性
- 属性:有 get/set 方法的成员,还可以没有成员,只有 get/set 方法。属性名称由 get/set 方法来决定,而不是由成员名称。
JSP 中与 javaBean 相关的标签