九大内置对象(servelt创建好的)
1.1 Request 请求对象 作用域 Request
表示为一个客户端到服务端的请求,包含客户端提交到服务端的数据等信息
1.2 response 响应对象 作用域 Page
服务端可以通过该对象向客户端进行响应(数据输出,页面跳转)
1.3 session 会话对象 作用域 Session
客户端与服务端的一次会话,默认有效时间保持30分钟,服务器客户端之间可以通过该对象进行数据共享,可以使用session作为缓存
1.4 application 应用程序对象 作用域 Application
表示位servlet上下文对象(servletContext,应用的运行环境),只要服务器不停止,会一直存在,所有客户端之间都能共享该对象
1.5 page 页面对象 作用域 Page
表示当前的jsp对象(servlet),实际为this
1.6 pageContext 页面上下文对象 作用域 Page
能够在当前的jsp页面中临时共享数据
1.7 out 输出对象 作用域 Page
基于response获取的输出流对象,可以使用该对象向客户端输出数据(html代码)
1.8 config 配置对象 作用域 Page
表示应用程序的配置对象
1.9 exception 例外对象 作用域 page
是Throwable的实例,表示页面中的错误与异常
请求转发与重定向
1.10重定向(客户端发起第二次请求,地址栏改变,session可以或得到数据)
response.sendRedirect(“main.jsp”);
重定向:由客户端发起第二次请求,所以重定向又称之为客户端跳转,在客户端地址栏上显示的为最后一次请求的资源,
重定向无法将存储在请求范围内的数据传递到下一个页面中
1.11请求转发
request.getRequestDispatcher(“main.jsp”).forward(request,response);
请求转发:由服务器发起第二次请求,所以请求转发又称之为服务端跳转,在客户端地址栏显示的为第一次请求的资源,
请求转发可以将请求向下继续传递,只要保持是一个request对象,始终能够获取到request中的数据
四大作用域
从小到大
page范围:<%=pageContext.getAttribute("pageMsg")%><br>
request范围的结果:<%=request.getAttribute("msg")%><br>
session范围的结果:<%=session.getAttribute("sessionMsg")%><br>
application范围的结果:<%=application.getAttribute("appMsg")%><br>
2017/8/19
四种会话跟踪技术
1.12URL地址重写
<a href=”main.jsp?data=来自第一个页面的数据”></a>
取出:
<%
request.getParameter("data");
%>
1.13隐藏域传值(form提交方式)(可以动态写数据)
1.13.1 post用于大量数据时,此时取出数据必须设置编码格式,否则为乱码:
数据:<%
request.setCharacterEncoding("utf-8");
out.println(request.getParameter("data"));
%>
用form传数据
<form action=”main.jsp” method=”get”>// method=”post”
<inputtype=”hidden” name=”data” value=”通过隐藏域传递的数据”>
<button>提交</button>
</form>
get:
post:
1.14session存储(生命周期30min or 会话结束(浏览器关闭))
session建立于服务端和客户端之间
<%
session.setAttribute("msg", "session中的数据");
%>
//同一个浏览器session共享 sessionId值不变不同浏览器session不同
1.15cookie存储(由服务端响应回来,存储在本地,js能处理)
1.15.1 不能允许出现中文以及一些特殊符号(设置编码,解码)
1.15.2 不设置有效期(默认与session一致,关闭浏览器则失效)
1.15.3 取cookie时是取出cookie数组
<!-- cookie存储 -->
<%
//cookie中不允许出现中文,以及一些特殊符号,;#..
//创建cookies
Cookie c = new Cookie("name","softeem");
Cookie c2 = new Cookie("msg",URLEncoder.encode("中文数据","utf-8"));
//c.setMaxAge(60);//设置cookie有效期,单位为秒,默认与session有效期保持一致
//将cookit对象通过response(响应对象)响应到客户端存储
response.addCookie(c);
response.addCookie(c2);
%>
取出cookie中的数据:
<%
Cookie[] cs = request.getCookies();
if(cs != null){
for(Cookie c:cs){
Stringname = c.getName();
Stringvalue = URLDecoder.decode(c.getValue(),"utf-8");
out.println(name+":"+value);
}
}
%>
cookie注销用户
1.16注销的实现
不删除用户,将账号密码设置为“” 空,将生命周期设为0
1.17密码修改后会死循环(login.jsp<->doLogin.jsp)
当doLogin.jsp判断账号密码错误时跳到doClear去
JSP三大指令(<%@ 指令%>)
1.18Page(jsp页面的设置通常使用page指令)
1.18.1 Language=”java”设置页面的脚本语言
1.18.2 contentType=”text/html”响应数据的类型,charset=”UTF-8”(编码格式)
1.18.3 pageEncoding=”UTF-8”页面的编码模式,jsp页面
1.18.4 import=”java.utl.*”导包
1.18.5 ErrorPage 指定处理异常与错误的页面
1.18.6 isErrorPage=”true” <%=exception.getMessage()%> 标记当前页面是否为异常与错误处理的页面
1.18.7 isELlgnored 是否不解析EL表达式
1.19Include(静态包含)
1.20taglib(标记库)
静态include动态include
1.21静态包含:把其他页面到当前页面中同时解析,只生成一个java文件(一起解析,可以去掉重复的标签)
<%@include file = “被包含的页面”>
两个子页面,java代码中如果定义了相同的变量会报错,因为是静态加载在一起解析
避免方法,在<%@! int a = 10%>全局变量
1.22动态包含:把其他被包含的页面分别解析,各自生成java文件,然后动态的导入到主页面中(单独解析,不可以去掉)
<jsp:include page=”被包含的页面”>
七大动作
1.23跳转(request.setAttribute(“data”,”aaa”))
<jsp:forward page="tag2.jsp">
<jsp:paramvalue="hello" name="data"/>
</jsp:forward>
等同于:
<jsp:forward page="tag2.jsp?data=hello">
Tag2.jsp:
<%=request.getParameter("data") %>
1.24 获得属性
<jsp:getProperty property=""name=""/>
1.25包含
<jsp:include page=""></jsp:include>
1.26参数
<jsp:param value=""name=""/>
1.27插件
<jsp:plugin code=""codebase=""type="bean"></jsp:plugin>
1.28设置属性
<jsp:setProperty property="name" name="user"value="softeem"/>
1.29创建对象
<jsp:useBean id="user" class="com.softeem.dto.User"scope="session"></jsp:useBean>
express language(el)表达式语言
${表达式}
1.30重定向:
test.jsp
pageContext.setAttribute(“msg”,” page中的数据……”);
request.setAttribute(“msg”,”request中的数据……”);
session.setAttribute(“msg”,” session中的数据……”);
application.setAttribute(“msg”,”request中的数据……”);
request.getRequestDispatcher(“elResult.jsp”).forward(request,response);
<body>
elResult.jsp
${msg} ---- request中的数据…… (默认取最小的)
${pageScope.msg} ---- null (当前页面)
${requestScope.msg}
${sessionScope.msg}
${applicationScope.msg}
</body>
1.31算数运算
${1+1}-----2
1.32EL表达式不解析
1.32.1 单条表达式不解析
\${1+1}-----${1+1}
1.32.2 该页面内所有表达式不解析
<%@isEllgnored=”true”%>
1.33查看官方EL表达式文档
步骤:1.Startup.bat启动服务器
2.127.0.0.1:8080
3. Manage APP
4.登录 admin admin
5. examples
6. JSP Examples
7.
1.34对象操作
test.jsp
1.34.1 声明对象
id就是这个对象名
<jsp:useBeanid=”myUser” class=”com.softeem.dto.User” scope=”page”></jsp:useBean>
1.34.2 初始化对象
name就是上面的对象 property是属性
<jsp:setProperty property=”id” value=”1” name=”myUser”/>
<jsp:setProperty property=”name” value=”softeem” name=”myUser”/>
<jsp:setProperty property=”pass” value=”admin” name=”myUser”/>
1.34.3 访问对象
<jsp:getProperty property=”name” name=”myUser”/>-----softeem
${myUser.name}---------------------softeem
${myUser.name eq ‘softeem’}----------true
1.34.4 对象导航(另一对象为该对象的属性)
先初始化另一Group类对象
<jsp:setProperty property=”group” value=”${另一对象名}” name=”myUser”/>
访问:${myUser.group.gname}
1.35
JSP标准标签库
1.36使用过程
1.36.1 导入jstl支持包(jar包)
<!-- 导入JSTL标记库 -->
<%@ taglib prefix="c"uri="http://java.sun.com/jstl/core" %>
1.36.2 在需要使用jstl标记库的页面中导入标记
例1:
<c:forEach begin=“1” end=”10” var="i">
${i} //从1遍历到10 i是别名
</c:forEach>
例2:
<%
String[] s = {"java","c++","php"};
session.setAttribute("langs", s);
%>
<c:forEach items="${langs}" var="i">
${i}
</c:forEach>
实际例子在07.avi内(分页,list集合)
1.37常用JSTL标签
C 核心(core) 常用
Fmt 格式化标签(日期,数字格式化)
X xml标签
Sql 访问数据库
Fn 全局函数