一、脚本Scriptlet:
1. <%
局部变量,Java语句
%>
2. <%
全局变量,定义方法
%>
3. <%=输出表达式 %>
4.注意:
一般而言,修改xml,配置文件,java 必须要重启Tomcat。修改JSP,HTML,CSS,JS不需要重启
5.注释
(1)HTML注释
(2)Java注释 // /* */
(3)JSP注释 <%-- 被注释内容 --%>
二、JSP三大指令
1.page指令:定义网页以来属性,比如脚本语言,error页面,缓存需求等。
<%@page ... %>
指定的属性:
*language:JSP页面使用的脚本语言
*import:导入类
*pageEncoding:JSP文件自身编码,JSP->Java用的编码
*contentType:浏览器解析时所用的编码
*errorPage: 指定错误的处理页面。
*session:默认是true,说明可以直接使用session
*buffer:设置输出缓冲区的默认大小是 8 kb
*autoflush:如果缓冲区满了,是否自动刷新
*extends :继承,(一个JSP的文件翻译,Java的文件,默认继承一个类)
*isELIgnored:是否忽略EL表达式,默认是false,表示不忽略,在页面上直接使用。
<%@ page contentType="text/html;charset=UTF-8" language="java"
charset="utf-8" pageEncoding="utf-8" import="java.util.Date" %>
2.include指令:包含其他文件
<%@include ... %>
**原理是把被包含的页面(header.jsp)的内容翻译到包含页面(index.jsp)中,合并成翻译成一个java源文件,再编译运行,这种包含 叫静态包含(源码包含)
**如果使用静态包含,被包含页面中不需要出现全局的html标签了!(如html、head、 body)。原因是各个页面在翻译之前是把所 有内容复制过去一起翻译成一个Java文件,再进行编译。全局标签会有赘余。
3.taglib 指令:引入标签库的定义
<%@taglib ... %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
三、JSP九大内置对象(自带的,不需要new也能使用的对象)
1.application
**javax.servlet.ServletContext 的实例,代表JSP所属的web应用本身,可用于页面之间交换信息
常用方法:
String getContextPath() 获得虚拟路径
String getRealPath(String name); 获得虚拟路径对应的绝对路径
2.config
**javax.servlet.ServletConfig 的实例,代表JSP的配置信息
常用方法:
getInitParameter(String paramName)
getInitParameternames()
3.exception
**java.lang.Throwable 的实例,代表其他页面中的异常和错误,只用当页面时错误处理页面,即page的isErrorPage=true 时,该对象才 可以使用。
常用方法:
getMessage()
printStackTrace()
4.out
**javax.servlet.jsp.JspWriter 的实例,该实例代表jsp的页面输出流,用于输出内容
5.page 代表页面本身,也就是servlet中的this,一般不用
6.pageContext
**javax.servlet.jsp.PageContext的实例,该对象代表该jsp的上下文,使用该对象可以访问页面中的共享数据
常用方法:
getServletContext();
getServletConfig();
7.request
**javax.servlet.http.HttpServletRequest 的实例,封装了一次请求。
常见方法:
String getParameter(String name):根据字段名key返回字段值value
String[] getParameterValues(String name):根据请求的字段名key,返回多个字段值value(checkbox)
void setCharacterEncoding("utf-8"):请求设置编码
getRequestDispatcher(“b.jsp”).forward(requset,response):请求转发
8.response
**javax.servlet.http.HttpServletResponse的实例,封装了一次响应。
常用方法:
void addCookie(Cookie cookie): 服务端向客户端增加cookie对象
void sendRedirrect(String location) throws IOException : 页面跳转的一种方式。
void setContetType(String type): 设置服务端响应的编码
9.session(服务端)
**javax.servlet.http.HttpSession 的实例,代表一次会话
10.注意:
请求转发和重定向的区别:
*请求转发地址栏不改变,重定向改变
*请求转发会保留第一次请求时的数据,重定向数据丢失。
*请求转发请求一次,重定向请求两次
*请求转发在服务端发生跳转,重定向在客户端发出第二次跳转时跳转
四、四种范围对象(小->大)
1.四种范围对象分别是:
pageContext JSP页面对象 (page对象)
-只在当前页面有效
request 请求对象
-同一次请求有效,其他请求无效 (请求转发后有效,重定向后无效)
session 会话对象
-同一次会话有效,(无论怎么跳转都有效,关闭/切换 浏览器后失效)
application 全局对象
-整个项目期间均有效,切换浏览器依然有效,关闭服务或者切换项目无效。如果多个项目共享,重启时依然有效。
2.以上4个对象共有的方法:
(1)Object getAttribute(String name) 根据属性名,或者属性值
(2)void setAttribute(String name,Object obj); 设置属性值(新增,修改)
eg: setAttribute("a","b"); //如果a对象之前不存在,则新建一个a对象,如果已经存在,则将a的值改为 b
(3)void removeAttribute(Strin g name); 根据属性名,删除对象
3.注意:以上四个对象尽量选择范围小的。
五、JSP七大动作标签
1. 转发的功能
page属性:转发到哪个页面上去。
路径:服务器的绝对地址,不包含项目名称。
2. 转发的饿时候可以传递参数
在转发时使用属性,放在标签内部
3, 动态包含(和静态包含效果一样,但是原理不一样)
是每个JSP文件各自编译执行,最后效果呈现在一起。
4. 创建一个JavaBean的实例。
5. 输出JavaBean实例的属性值
6. 设置JavaBean实例的属性值。
7. 用于下载JavaBean或Applet到客户端执行。
JavaBean后面再继续介绍
关于三大指令,七大动作的博文推荐
https://blog.csdn.net/huanyuminhao/article/details/52048947
六、Cookie Session
1.Session(服务端),是内置对象。
(1)session是一次会话。
(2)session机制:
客户端第一次请求服务端时,服务端会产生一个session对象(用于保存该客户的信息);并且每一个session对象都会有一个唯一的sessionID (用于区分其他的session)。服务端又会产生一个cookie,并且该cookie的name=JSESSIONID,value=服务端sessionID值;然后服务端会在响应客户端的同时,将该cookie发送给客户端。至此,客户端就有了一个cookie(JSESSIONID);因此,客户端的cookie就可以和服务端的session一一对应。
如果不是第一次请求,就可以直接根据JSESSION去服务端中的session中匹配,如果匹配成功,就说明此用户不是第一次访问。
(3)session机制总结
-session 储存在服务端
-session 是在同一个用户(客户端)请求时共享
-实现机制:第一次客户请求时,产生一个sessionID 并复制给cookie的jsessionid,然后发给客户端。
(4)session方法:
String getId(); 获取sessionId
boolean isNew(); 判断是否是新用户(第一次访问)
void invalidate(); 使session失效(退出登录。注销)
setAttribute();
getAttribute();
void setMaxInactiveInterval(秒); 设置最大有效非活动时间
int get MaxInactiveInterval(秒); 获取最大有效时间
(5)session 失效
session.invalidate();
失效只会使当前session失效
2.Cookie
(1)简介:Cookie(客户端,不是内置对象);Cookie由服务端产生,再发给客户端保存,相当于本地缓存的作用。
(2)作用:提高访问服务端的效率,但是安全性较差。
(3)cookie方法:(Cookie: name=value)
public Cookie(String name,String value)
String getName()
String getValue()
void setMaxAge(int expeiy) 最大有效期(秒)
(4)服务端准备Cookie:
response.addCookie(Cookie cookie);
(5)客户端获取Cookie:
request.getCookie();
(6)注意:
服务端增加Cookie:response对象;客户端获取对象:request对象
不能直接获取某一个单独对象,只能一次性将全部的Cookie拿到
3.cookie 和 session的区别:
(1)cookie客户端 session服务端
(2)cookie较不安全 session较安全
(3)cookie保留String session保留Object
4.客户端在第一次请求服务端的时候,如果服务端发现,此请求没有JSESSION,则会创建一个 name=JSESSION的cookie,并返给客户端
七、附录
之前有一篇详细的介绍cookie和session的文章,链接--http://zhouchenming.top/c/session%E4%B8%8Ecookie%E7%9A%84%E5%8C%BA%E5%88%AB.html