两类元素
(1)指令元素
<%@page%>: page指令指明JSP容器的沟通方式
language="java" 语言
importe="importList" 导入所需的包文件
contentType="contentType" 输出容使用的编码格式,告诉浏览器怎么解析 countentType="text/html;charset=UTF-8"
pageEncoding="utf-8" jsp翻译成servlet使用的编码
session="true/false" 设置是否可以直接使用session
inThreadSafe="true/false" 是否线程安全
info="infoText" jsp页面的相关信息
errorPage="errorPageUrl" 指定错误页面。。。。如果发生错误就会跳转到该页面
isErrorPage="true/flase" 指定当前页面为错误页面
autoflush="true/flase" 自动刷出缓冲区的内容,默认为true
*只有import属性可以重复使用
<%@inclued%>: 在JSP文件被转成Servlet之前将指定的文件包含进来
file="FileUrl"
*include只能是静态包含只能包含静态的资源,编译后生成的文件其实就是两个合起来生成的.Java文件最后编译成.class文件
<%@taglib%>
用于导入标签库
url="标签库名称" prefix="标签库的前缀"
(2)脚本元素
<%! %>声明 定义类 变量 方法 成员变量
<%= %>输出语句,尾部不能加分号
<% %>Java语句这个JSP语句中定义的变量为局部变量
六个动作(jsp动作)
本服务器,在用户请求时包含文件。包含文件个被包含文件各自编译,当用户请求页面时,才动态地包含其他文件
(和include指令的比较,指令执行速度相对较快,灵活性较差。动作执行速度相对较慢,灵活性较高。使用时若为静态页面则使用指令,若为动态则用动作)
配合include标签使用;给其他页面传递参数,参数为张三,键为name;
服务器的跳转,转发带请求的数据Url不变
javaBean:Java中的内省技术
创建一个Bean实例并制定他的名字和作用范围
要求:a.只一个公有类,b.具有一个公有的不带参数的构造方法c.类进行封装
设置Bean属性值(推荐使用插入java代码块实现)
获取Bean属性值(推荐使用插入java代码块实现)
会话技术:
会话的概念: 打开浏览器,可以访问web资源,多次访问web资源,关闭浏览器,整个过程称为会话
购买商品:用户点击超链接可以通过Servlet购买商品,程序应该保存用户购买的商品,以便于最后进行结算
Cookie(客户端)
setComment();设置注释
setPath();设置有效路径(***)
setDoMail();设置有效域名
setValue();设置cookie的值
setMaxAge(int expiry); (*****)
expiry:
默认有效期为当前会话结束时Cookie消亡
正数:从当前时间到 正数秒
0: 删除Cookie
Cookie存储中文时报错问题:
在Cookie中是不能直接存储中文的,我们要把中文进行编码才可以存储在Cookie中进行传输,要获取Cookie中编码的中文数据要进行解码操作.
解决方案:
编码:URLEncoder.encode("中文", "UTF-8");
解码:URLDecoder.decode("%E63%E56%E645+","UTF-8")
Session(服务器)
cookie基于客户端,不安全,大小和个数有限制
session 域对象 基于服务端的会话技术技术
session的原理:
request.getSession();
服务端通过客户端携带过来的JSESSIONID判断是否在服务器是否存在这个JSEESIONID所对应的session,如果存在直接拿来使用,如果不存在则创建session
session的常用方法
setMaxInactiveInterval(int interval);设置session的有效期
interval: 正数 从当前时间到 正数秒
负数 或0:永不过期
session.invalidate():删除session
session.getId(); 获取sessionid
持久化Session(了解)
通过session的原理,对jsessionid进行操作达到持久化seesion的目的
HttpSession session = req.getSession();
session.setMaxInactiveInterval(60*60*24*365);
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60*60*24*365);
resp.addCookie(cookie);
九个对象(jsp内置对象)
对象 | 真实对象 | 方法
request (客户请求的所有请求) | HttpServletRequest | setAttribute() getAttribute();
response(服务器对客户端的相应) | HttpServletResponse | addCookie(); getWriter();
session (代表一次用户对话,从客户端连接开始到结束) | HttpSesssion | setAttribute() getAttribute();
application(解决jsp和servlet交互问题) | ServletContext | setAttribute() getAttribute();
config (代表当前jsp配置信息) | ServletConfig | getInitParameter(); getInitParameterNames();
exeception (异常有关) | Throwable | getMessage();
page 该页面本身 | Object | 一般不使用
out (输出对象) | JspWriter | write() print() clear(),清空缓存区,不发数据到客户端
out.clearBuffer();将数据发送到客户端在清空缓存区;
(在返回response对象时会关)
out.close();关闭输出流(在返回response对象时会关)
pageContext (页面上下文,jsp间共享数据) | PageContext | setAttribute() getAttribute();
pageContext:域对象
范围:当前页面
自己存取值
setAttribute(name,value,scope);
setAttribute(name,value);无范围默认为page 这个范围指的并不是域范围
向其他域存值
pageContext.getRequest();
pageContext.getSession();
pageContext.getServletContext()
WEB服务器提供四个域对象(jsp域对象)
page application web应用被加载时创建,服务器关闭时销毁 作用: a.在不同servlet中转发this.getServletContext().getRequestDispatcher("url").forward(request,response); b.读取资源数据 request service方法调用前由服务器创建,请求结束销毁 作用:在整个请求链中共享数据 session 第一次调用request.setsession开始,会话结束销毁 作用: 保存会话相关内容 page jsp请求时开始,当响应结束后销毁 作用: a.获取其他八大隐式对象 b.获取其他隐式对象中的数据 c.跳转到其他资源,其身上提供了forWord和include方法,简化重定向和转发 ${el表达式} *EL的内置对象:ServletContext
HttpServletRequest
HttpSession
PageContext
EL表达式
*el获取对象的属性:
<%
User user = new User();
user.setPassword("123@123");
request.setAttribute("user", user);
%>
${user['password'] }
${user.password}
*使用[]操作符必须给属性加上双引号
*在el表达式前,必须将对象存储到域对象中
*使用el访问作用域:
jsp提供了四种作用域:
pageSocpe
requestScope
sessionScope
applicationScope
*el中的运算符
<%
int n1=5;
int n2=8;
%>
request.setAttribute("n1",n1);
request.setAttribute("n2",n2);
*加法运算
${n1 + n2} 13
*关系运算
${n1 > n2} ${n1 gt n2} false
${n1 < n2} $(n1 lt n2) true
$(n1 == n2) $(n1 eq n2) false
$(n1 != n2) $(n1 ne n2) true
$(n1 >= n2) $(n1 ge n2) false
${n1 <= n2} $(n1 le n2) true
*逻辑运算
与: &&
${n1>n2&& n1
pageScope
requestScope
sessionScope
applicationScope
param: 获取请求参数
paramValues:获取名称相同的请求参数的值
header: 获取请求头信息header["cookie"]
headerValues
initParam:初始全局化参数
jstl:(JSP Standard Tag Library)
*jsp标准标签库
*作用:与EL结合取代jsp中的<%%>
*版本 1.0(没有被纳入标准) 1.1 1.2区别不大
*下载jar包
standard.jar
jstl.jar
*jsp页面引入标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
*