Java大数据之路--JSP

JSP(Java Server Page)

目录

JSP(Java Server Page)

模版元素

JSP脚本表达式

JSP九大隐式对象

PageContext功能详解

四大作用域

EL表达式


模版元素

模版元素:html元素在被访问的时候,会被jsp翻译引擎翻译为模版元素

JSP脚本表达式

语法:<%=JSP脚本表达式%> 直接量或具有返回值的表达式request.getContextPath()脚本表达式会被jsp翻译引擎翻译为表达式的结果值。

页面中的jsp脚本表达式,在被翻译为servlet文件时,会放在servlet文件对应的位置上,在计算结果后,通过out.print()输出到页面。

语法:<%JSP脚本片段%>脚本片段会被jsp翻译引擎翻译为java代码。页面中的JSP脚本片段,在被翻译为servlet文件时,会被原封不动的翻译成java语句,出现在servlet文件的对应位置。并且脚本片段可以书写成多个部分。每一个部分都可以不完整。但是需要保证这些不完整的部分在翻译为servlet文件后,可以组成完整的java代码,即可编写。

语法:<%!jsp声明%>页面中的jsp声明,在被jsp翻译引擎翻译为servlet文件时,会变成成员变量或方法,jsp声明可以看做是整个类的变量和方法,如果需要调用,则可以在页面中的任意位置调用。

JSP九大隐式对象

page代表servlet文件的隐式对象
request代表HTTP请求隐式对象
response代表HTTP响应隐式对象
application代表当前web应用的隐式对象

config

代表当前servlet配置信息的隐式对象
session代表session会话的隐式对象
out代表向页面输出的缓冲区的隐式对象out.write() out.print()
exception代表上一个页面错误信息的隐式对象
pageContext代表当前jsp页面上下文的隐式对象

PageContext功能详解

pageContext代表的是当前JSP页面上下文的隐式对象。可以在JSP页面内直接调用

  • 功能一:作为其他八大隐式对象的入口
pageContext.getPage();---获取page隐式对象
pageContext.getRequest();---获取request隐式对象
pageContext.getResponse();---获取response隐式对象
pageContext.getSession();---获取session隐式对象
pageContext.getServletConfig();---获取config隐式对象
pageContext.getServletContext();---获取application隐式对象
pageContext.getException();---获取exception隐式对象
pageContext.getOut();---获取out隐式对象
  • 功能二:作为域对象使用

域对象:如果一个对象身上有一个可以被看见的范围,在这个范围内利用对象身上的map实现数据的共享,这个对象就可以称之为域对象。

setAttribute(String name,Object obj);

getAttribute(String name);

removeAttribute(String name)

getAtrributeNames();

生命周期:在访问jsp页面时,产生pageContext对象,生命周期开始。在结束访问jsp页面时,pageContext对象销毁,生命周期结束。

作用范围:整一个JSP页面

主要功能:在整个JSP页面内共享数据。

  • 功能三:操作其他域中属性
setAttribute(String name Object obj,int scope);//scope
getAttribute(String name,int scope);
removeAttribute(String name scope);
getAttributeNamesInScope(int scope);
  • 功能四:自动搜寻域

使用自动搜寻域,会由小到大的搜索四个域中指定名称的域属性。一旦在较小范围内搜索到结果,则不会再向更大范围的域进行搜索。

<h3>自动搜寻域</h3>
<%=pageContext.findAttribute("country") %>
  • 功能五:便捷的请求转发
pageContext.forward(url);

四大作用域

从大到小排序:ServletContext------Session-------request----------pageContext

  • ServletContext:代表当前web应用对象

生命周期:当web应用被加载,servletContext对象创建。当web应用被销毁,servletContext对象销毁。

作用范围:整个web应用

主要功能:在整个web应用中共享数据

  • Session:代表当前会话的对象

生命周期:request.getSession()方法调用的时候,session对象产生。

                  意外身亡:服务器意外关闭,session会立刻销毁。如果服务器正常关闭,数据会以文件的形式保留在磁盘上,这个过程                             称之为钝化。在服务器再次启动时,会重新读取这个文件,这个过程称之为活化。

                  自杀:在调用session.invalidate()可以主动释放session对象。

                  超时死亡:如果一个session超过30分钟没有被使用,则会由服务器将其销毁,这个销毁的时间可以通过web.xml中的                                 session-config标签来设置。默认为30分钟

作用范围:整个会话范围

主要功能:在整个绘画范围内实现数据共享

  • request:代表HTTP请求对象

​​​​​​​生命周期:请求链起始时,request对象创建。请求链结束时,request对象销毁。

作用范围:整个请求链。

主要功能:在整个请求链中共享数据

  • pageContext:代表当前jsp页面对象

​​​​​​​生命周期:在jsp页面被访问时创建。在jsp页面结束访问时销毁。

作用范围:整个jsp页面

主要功能:在整个jsp页面内共享数据

EL表达式

特点:EL表达式不能设置值,只能获取值。只能获取域中的属性,不能遍历

<h3>el表达式获取常量</h3>
<%=123 %>
<%=123.123 %>
<%="abc"%>
<%=true%>
${123 }
${123.123 }
${"abc" }
${true }
<h3>el表达式获取域中的变量</h3>
<%
pageContext.setAttribute("name", "aa", PageContext.APPLICATION_SCOPE);
pageContext.setAttribute("name", "bb", PageContext.SESSION_SCOPE);
pageContext.setAttribute("name", "cc", PageContext.REQUEST_SCOPE);
pageContext.setAttribute("name", "dd", PageContext.PAGE_SCOPE);
%>
<%=pageContext.getAttribute("name") %>
<%=request.getAttribute("name") %>
<%=session.getAttribute("name") %>
<%=application.getAttribute("name") %>
${pageScope.name}
${requestScope.name}
${sessionScope.name }
${applicationScope.name }
<h3>自动搜寻域</h3>
<%=pageContext.findAttribute("name") %>
${name}
<h3>获取链表中的数据</h3>
<%
List<String> list = new LinkedList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
pageContext.setAttribute("l", list);
%>
${l[0]}
<h3>获取映射中的数据</h3>
<%
Map<String,String> map = new HashMap<String,String>();
map.put("name", "aa");
map.put("age", "18");
map.put("wife","bb");
map.put("addr", "cc");
request.setAttribute("map", map);
request.setAttribute("w", "wife");
%>
${map}
${map.name}
<%-- ${map.wife.first} --%>
${map["wife"] }
[wife]: ${map[w]}
<h3>获取javabean中的数据</h3>
<%
Person p = new Person("aa",18,"女");
pageContext.setAttribute("p",p);
%>
<%=p.getName() %>
${p.name}

JSTL标签库

//taglib指令引入core库
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<h3>c:set设置域中值</h3>
<c:set scope="page" var="a" value="abc"></c:set>
<c:set scope="request" var="a" value="123"></c:set>
<c:set scope="session" var="a" value="789"></c:set>
<c:set scope="application" var="a" value="114"></c:set>
${pageScope.a }
${requestScope.a}
${sessionScope.a }
${applicationScope.a }
${a}
<h4>修改域中的值</h4>
<c:set scope="request" var="a" value="曹洋"></c:set>
${requestScope.a}
<h3>c:set设置map中的值</h3>
<%
Map<String,String> map = new HashMap<String,String>();
pageContext.setAttribute("map", map);
%>
<c:set target="${map}" property="name" value="小朴朴"></c:set>
${map}
${map.name }
<h4>修改map中的值</h4>
<c:set target="${map }" property="name" value="小兰兰"></c:set>
${map }
${map.name }
<h3>javabean中值的修改</h3>
<%
Person p = new Person("李帅",19,"女");
pageContext.setAttribute("p", p);
%>
${p.name }
<c:set target="${p}" property = "name" value="小帅帅"></c:set>
${p.name }
<!-- javabean中如果没有对应set方法提供,则不能随意设置新的属性 -->
<%-- <c:set target="${p }" property="addr" value="河北"></c:set> --%>
<%-- ${p.addr } --%>
<h3>c:remove移除域中属性</h3>
<c:set scope="page" var="name" value="谢逊"></c:set>
<c:set scope="request" var="name" value="韦一笑"></c:set>
<c:set scope="session" var="name" value="殷天正"></c:set>
<c:set scope="application" var="name" value="黛绮丝"></c:set>
${pageScope.name }
${requestScope.name }
${sessionScope.name }
${applicationScope.name}
${name }
<hr>
<!-- 删除指定域中的数据 -->
<c:remove var="name" scope="request" />
${pageScope.name }
${requestScope.name }
${sessionScope.name }
${applicationScope.name}
<hr>
<!-- 如果不指定删除哪一个域,则将全部域中对应的属性删除 -->
<c:remove var="name"/>
${pageScope.name }
${requestScope.name }
${sessionScope.name }
${applicationScope.name}
<h3>c:if 判断结构</h3>
<c:set var="num" value="100" scope="request"></c:set>
<c:if test="${num<100}" var="flag" >
num小于100 
</c:if>
${flag }
<c:if test="${num>=100}" var="flag1">
num大于等于100
</c:if>
${flag1}
<h3>c:choose选择判断结构</h3>
<c:choose>
<c:when test="${num<100 }">num小于100</c:when>
<c:when test="${num<1000 }">num小于1000</c:when>
<c:when test="${num<10000 }">num小于10000</c:when>
<c:otherwise>num大于等于10000</c:otherwise>
</c:choose>
<h3>c:forEach 循环结构</h3>
<%-- <c:forEach begin="0" end="100" step="2" var="e" varStatus="stat">
${stat.count}
</c:forEach> --%> 
<!-- 0到100能够被3整除的偶数总数(count) -->
<c:forEach begin="0" end="100" step="2" var="i" varStatus="s" >
<c:if test="${s.count%3 == 0 }">
<font color='red'>${i}</font>
</c:if>
<c:if test="${s.count%3 != 0 }">
<font color='blue'>${i}</font>
</c:if>
<h3>c:catch 捕获异常</h3>
<c:catch var="ca">
<%
String str = null;
str.toLowerCase();
%>
</c:catch>
${ca }
<h3>c:forTokens切割字符串</h3>
<c:forTokens items="www.tedu.cn" delims="." var="v">
${v }
</c:forTokens>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值