1.四大作用域九大内置对象
四大作用域:page域,request域,session域,application域
九大内置对象:
内置对象名 类型
request HttpServletRequest
response HttpServletResponse
config ServletConfig
application ServletContext
session HttpSession
exception Throwable
page Object(this)
out JspWriter
pageContext PageContext
2.什么是Jsp,为什么使用Jsp
Java server page 用java语言写的服务器端的页面
HTML写的是静态页面,Jsp是写动态页面的,Jsp=HTML+Java.Jsp里既可以写HTML代码,也可以写Java代码.Jsp可以取代servlet,servlet也可取代Jsp;可以前后台分离.
3.Jsp的组成
jsp页面有数据模板和元素组成.
数据模板:Jsp容器不进行处理的部分,如Jsp中的HTML内容,这些内容会直接发送到客户端.
元素:Jsp容器必须处理的部分,元素有三种类型:
-指令元素
-脚本元素
-动作元素
4.指令
指令元素的作用:用于在Jsp转换为servlet阶段提供Jsp页面的相关信息;指令元素不会产生任何的输出到当前的输出流中.
指令元素的三种指令:page指令,include指令,taglib指令
指令元素语法:<%@指令 属性名="属性值" 属性名="属性值"...%>
4.1page
page指令作用于整个Jsp页面,定义了与页面相关的一些属性;page指令定义的属性被用于和Jsp进行通信;<%@page 属性名="属性值" 属性名="属性值"...%>
4.2include
include用于在Jsp页面中静态包含一个文件(可以是Jsp,HTML页面,文本或者Java代码);Jsp页面在转化为servlet时,会在其中插入包含的文本或者代码;<%@include file="index.jsp"%>
4.3taglib
taglib允许页面使用用户定制的标签;<%@taglib uri="..." prefix="..."%>;uri该属性唯一的标识和前缀先关的标签库描述符,prefix属性指标签名前缀,用于区分多个自定义标签.
5.脚本元素
脚本元素包含三个部分:脚本段<%%>,脚本段是一段Java代码,用于描述在请求的响应中要做的操作;声明元素<%!%>,用于声明在其他脚本元素中可能需要使用的变量和方法;表达式<%=%>,是Java语言中完整的表达式,在响应请求是被计算,计算的结果将被转换为字符串,插入到输出流中,输出至客户端.
5.1脚本段
<%String s = "hello world"; %>
5.2声明元素
<%!String s= "hello world";public void hh(){
System.out.print(s);}%>
<!--调用方法-->
<% hh(); %>
5.3表达式(输出内容到页面)
<!--直接输出x则不能正确显示 ()中必须是一个字符串-->
<%int x=1; out.write(x+"");%>
<%=s%> <!--相当于out.write("xxx");-->
<%int x=1; out.write(x);%>
6.动作元素
jsp:include,在页面被请求的时候引入一个文件;jsp:useBean,寻找或者实例化一个JavaBean;jsp:SetProperty.设置JavaBean的属性;jsp:getProperty,输出某个JavaBean的属性;jsp:forward,把请求转到一个新的页面;等等
6.1<jsp:include>
<jsp:include>用来包含静态和动态的文件,该动作把指定文件插入正在生成的页面.
<jsp:include page="相对URL地址" flush="true"/>,include指令是在JSP文件转换为servlet是引入文件,而jsp:include是在页面被请求是插入文件;page:包含在页面中的相对URL地址;flush:定义在包含资源前是否刷新缓存区.
6.2<jsp:useBean>
<jsp:useBean>用来加载一个将在jsp页面使用的JavaBean.
<jsp:useBean id="name" class="package.class"/>再类载入后,可以通过jsp:setProperty和jsp:getProperty动作来修改和检索bean的属性;class:指定Bean的完整包名;type:指定将引用该对象变量的类型;beanName:通过java.beans.Beans 的 instantiate() 方法指定Bean的名字.
6.3<jsp:setProperty>
<jsp:setProperty>用来设置已经实例化的Bean对象的属性;有两种用法:
1.<jsp:useBean id=“aimuti” … />
…
<jsp:setProperty name=“aimuti” property=“someProperty” …/>
此时,不管jsp:useBean是找到了一个现有的Bean,还是新创建了一个Bean实例,jsp:setProperty都会执行。
2.<jsp:useBean id=“aimuti” … >
…
<jsp:setProperty name=“aimuti” property=“someProperty” …/>
</jsp:useBean>
此时,jsp:setProperty只有在新建Bean实例时才会执行。
name:指定设置属性的Bean;property:表示要设置哪个属性,如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法;value:用来指定Bean属性的值;param:指定用哪个请求参数作为Bean属性的值;value和param不能同时使用.
6.4<jsp:getProperty>
<jsp:getProperty>是提取指Bean属性的值,转换为字符串,然后输出.
<jsp:useBean id=“aimuti” … />
…
<jsp:getProperty name=“aimuti” property=“someProperty” …/>
name:要检索的Bean属性名称,Bean必须是已定义过的;property:表示要提取的Bean属性的值.
6.5<jsp:forward>
<jsp:forward>把请求转到另外的页面,jsp:forward只有一个属性page.
<jsp:forward page="相对URL地址"/>,page:包含的是一个相对URL,page的值既可以直接给出,也可以在请求的时候动态计算,可以使一个Jsp页面或者一个servlet.
7.域测试
index.jsp(直接在本页面获取值)
<body>
<%
//设置值
pageContext.setAttribute("page", "pageValue");
request.setAttribute("request", "requestValue");
session.setAttribute("session", "sessionValue");
application.setAttribute("application", 123);
%>
<%
//获取值
String p = (String) pageContext.getAttribute("page");
String req = (String) request.getAttribute("request");
String sess = (String) session.getAttribute("session");
int a = (int) application.getAttribute("application");
%>
<%=p %><br>
<%=req %><br>
<%=sess %><br>
<%=a %><br>
</body>
index2.jsp(跳转到index3.jsp获取值)
<body>
<%
//设置值
pageContext.setAttribute("page", "pageValue");
request.setAttribute("request", "requestValue");
session.setAttribute("session", "sessionValue");
application.setAttribute("application", 123);
%>
<%
//获取值
String p = (String) pageContext.getAttribute("page");
String req = (String) request.getAttribute("request");
String sess = (String) session.getAttribute("session");
int a = (int) application.getAttribute("application");
%>
<%=p %><br>
<%=req %><br>
<%=sess %><br>
<%=a %><br>
<!-- 跳转页面 -->
<jsp:forward page="index3.jsp"></jsp:forward>
</body>
index3.jsp(获取index2.jsp设置的值)
<body>
<%
//获取值
String p = (String) pageContext.getAttribute("page");
String req = (String) request.getAttribute("request");
String sess = (String) session.getAttribute("session");
int a = (int) application.getAttribute("application");
%>
<%=p %><br>
<%=req %><br>
<%=sess %><br>
<%=a %><br>
</body>
index2.jsp转发到index3.jsp里,page只能在当前页面获取;request可以获取;session也可以获取;application也可以获取
index4.jsp(获取index2.jsp中设置的值)
<body>
<%
//获取值
String p = (String) pageContext.getAttribute("page");
String req = (String) request.getAttribute("request");
String sess = (String) session.getAttribute("session");
int a = (int) application.getAttribute("application");
%>
<%=p %><br>
<%=req %><br>
<%=sess %><br>
<%=a %><br>
</body>
page获取不到;request也获取不到(不是一次请求);session可以获取;application也可以获取.
换一个新的浏览器开启一个新的对话则page,request,session都获取不到,application还可以获取到.