web开发学习笔记四:jsp
2017-01-09 00:11
316 查看
jsp:用java语言(+html语言)开发动态资源的技术
jsp页面可以写java代码,也可以写html代码
jsp也是servlet,
servlet的技术可以用在jsp程序中
jsp的技术并不是全部适用于servlet程序
一.jsp的生命周期
jsp也是servlet,所有jsp的生命周期与servlet差别不大,
jsp的生命周期:
1.翻译:jsp->java文件
2.编译:java文件->class文件
3.构造方法(第一次访问)
4.init方法(第一次访问):_jspInit();
5.service方法:_jspService();
6.destroy方法:_jspDestroy();
二.jsp语法
jsp脚 本:<% 在这中写java代码 %>
jsp表达式: <%= 向浏览器输出变量或表达式计算的结果 %>
jsp声 明:<%! 声明jsp的成员变量或成员方法 %>
jsp注 释: <%-- 这是注释 --%>
三.jsp的三大指令:
include指令:在当前页面用于包含其他页面,包含的页面会在最顶部
<%@include file="要包含的资源路径" %>
page指令:告诉tomcat服务器如何翻译jsp文件
各个参数含义如下:
language:翻译的动态语言,java
import: 导入包,多个包之间使用,相隔
编码相关参数:
pageEncoding:告诉tomcat服务器使用什么编码翻译jsp文件(jsp->java文件)
contentType: 服务器发送浏览器的数据类型和内容编码,一般不需要设置
错误相关参数:
errorPage:指定当前jsp页面的错误处理页面
isErorrPage:指定当前页面是否为错误处理页面。
false,不是错误处理页面,则不能使用exception内置对象
true,是错误处理页面,可以使用exception内置对象
其它参数:
session:是否开启session功能
false,不能用session内置对象
true,可以使用sessio置对象
buffer: jsp页面缓存大小
isELIgnore:是否忽略EL表达式
taglib指令:导入标签库(tld文件)
<%@taglib uri=" 所要导入的tld文件的uri " prefix=" 简写名 " %>
四.jsp的内置对象
Sun公司设计Jsp时,在jsp页面加载完毕之后就会自动帮开发者创建好一些常用对象,
这些创建好的对象就叫内置对象。
jsp的9大内置对象
对象名 对象类型
request
HttpServletRequest
response
HttpServletResponse
config
ServletConfig
application
ServletContext
session
HttpSession
exception
Throwable
page Object(this)
out jspWriter
pageContext
PageContext
out对象:相当于带缓存的PrintWriter
PrintWriter:
write("内容"),直接向浏览器写出
JspWriter:
write("内容"),向jsp缓冲区写出内容
当满足以下条件之一,缓冲区内容写出:
1.缓冲区满了
2.刷新缓存区
3.关闭缓存区
4.执行完毕jsp页面
pageContext对象: jsp的上下文对象
可以获得其它8个内置对象,如: pageContext.getOut(),;pageContext.getSession();
也是四个域对象之一:pageContext
域对象保存获取数据的方法都是: get/set Attribut();
pageContext作为域对象,可以往不同域对象中存取数据
pageContext.setAttribute("key","value",PageContext.REQUEST_SCOPE);
加上域范围常量,pageContext便可以把数据存到相应的域对象中。
域范围常量:
PageContext.PAGE_SCOPE //pageContext默认
PageContext.REQUEST_SCOPE
PageContext..SESSION_SCOPE
PageContext.APPLICATION_SCOPE
既然pagetContext可以把数据存在不同的域对象中,自然也可以在不同的域对象中取
pageContext.getAttribute("key",PageContext.REQUEST_SCOPE);
与存一致,只需要加上域范围常量便可。
自动在4个域对象中搜索数据
pageContext.findAttribut("key");
搜索的顺序为:pageContext域 --> request域 --> session域 --> ServletContext域
域对象作用范围:
pageContext域:
在当前jsp页面中使用(当前页面)
HttpServletRequest域:
在同一个请求中使用(转发)
HttpSession域:
在同一个会话(session对象)中使用(私有的)
ServletContext域:
在同一个web应用中使用(全局的)
五.EL表达式:向浏览器输出域对象中的变量值或表达式计算的结果
jsp表达式<%= %> 和 jsp脚本<% %> 在这语法中书写java代码会导致代码混乱不易维护,
所以在开发中应尽量书写java代码,使用el表达式来替换掉jsp表达式<%= %>
el表达式语法:${变量或者表达式}
输出基本类型和变量
${key} 表示从四个域中搜索名为key的数据 = pageContext.findAttribut("key")
${requestScope .key} 表示从request域中搜索名为key的数据
等同于 pageContext.getAttribute("name",PageContext.PAGE_SCOPE)
输出对象的属性值
如下数据:
Student student = new Student("eric",20);
pageContext.setAttribute("student",student);
${student.name}表达式中的.就相当于调用该对象的getxx方法,${student.name} = student.getName();
${student.age } 等同于该代码 (Student)pageContext.findAttribute("student")).getAge();
如果域对象存的是List类型呢
pageContext.setAttribute("list",list);
${list[0]}取出list数组下标为0的数据, [0]中括号相对于调用get(参数)方法 list.get(0)
等同于(List)pageContext.findAttribute("list")).get(0)
如果数据为对象,想取出对象属性值得话
${list[0].name} 与上相似
如果域对象存的是Map类型呢 Map(key,value)
pageContext.setAttribute("map",map);
${map['key']} 与list类似,不同的是list中 [0] 填写的是下标,map中填写的是[key]值
如果数据为对象,想取出对象属性值得话
${map['key'].name} 如上原理:.代表getxxx方法,map['key']得到对象,.调用方法得到属性
普通的表达式计算如:
${10+5} 算数表达
${10>5} 比较运算
${true || false} 逻辑运算
name = "";
${name==null || name==""} 判空
六.jsp标签
标签分类:
1.内置标签(动作标签): 不需要在jsp页面导入标签
2.jstl标签: 需要在jsp页面中导入标签
3.自定义标签 : 开发者自行定义,需要在jsp页面导入标签
1.内置标签
<jsp:forward> 转发标签,
<jsp:forward page="转发资源路径"> </jsp:forward>
<jsp:param> 参数标签
转发中可以带参数转发
<jsp:forward page="转发资源路径">
<jsp:param value="tom" name="cat"/>
</jsp:forward>
转发的页面可以接受参数
<%= request.getParameter("cat") %> 得到的值为 "tom"
转发标签等同于
request.getRequestDispatcher("/资源路径").forward(request,response);
如果带参数的话便是
request.getRequestDispatcher("/资源路径?cat=tom").forward(request,response);
<jsp:include> 包含标签
<jsp:include page="包含的页面资源路径"> </jsp:include>,也可以带参数
与include指令的区别
include指令: <%@inclue file="被包含的页面"%> 静态包含
<jsp:include>标签: <jsp:include page="被包含的页面"> 动态包含
静态包含不能像被包含的页面传递参数
动态包含可以像被包含的页面传递参数
静态包含: 先合并再翻译
动态包含: 先翻译再合并
2.jstl标签:java standard tag libarary java标准标签库
使用jstl标签需要导入标签,使用taglib指令导入标签
<%@taglib uri=" 所要导入的tld文件的uri " prefix=" 简写名 " %>
掌握核心标签库 (c标签库)
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
核心标签库的标签:
set标签,保存数据(保存到域中),默认pageContext域
<c:ser var="key" value="值" scope="指定保存的域,request"></c:set>
out标签,获取数据(从域中),
<c:out value="${key}"
default="<h3>标题3</h3>": 当value值为null时,使用默认值
escapeXml: 是否对value值进行转义,false,不转义,true,转义(默认)
></c:out>
if标签,单条件判断
<c:if test="true"> 条件成立 </c:if>
choose标签+when标签+otherwirse标签: 多条件判断
<c:choose></c:choose> == switch 语句
<c:when test=""></c:when> == case 语句 test里放表达式判断
<c:otherwise></c:otherwise> == default :以上没有符合的变执行;
forEach标签:循环
<c:forEach>有如下参数:
items="": 需要遍历的数据(集合)
var="": 每个元素的名称
begin="" : 从哪个元素开始遍历,从0开始.默认从0开始
end="": 到哪个元素结束,默认到最后一个元素
step="" : 步长 (每次加几),默认1
varStatus="":当前正在遍历元素的状态对象。(count属性:当前位置,从1开始)
如:
<c:forEach items="${list}" var="student" varStatus="varSta">
序号:${varSta.count} - 姓名:${student.name } - 年龄:${student.age}<br/>
</c:forEach>
forToken标签: 循环特殊字符串
数据:String str = "java-php-net-平面";
pageContext.setAttribute("str",str);
items = 需要切割的内容 delims = 切割点 var = 切割后字符串的名字
<c:forTokens items="${str}" delims="-" var="s">
${s }
</c:forTokens>
redrict:重定向标签
<c:redirect url="路径资源"></c:redirect>
该文章内容只是本人作为初学者的学习笔记总结,若想深入了解详情请自行查阅相关资料
jsp页面可以写java代码,也可以写html代码
jsp也是servlet,
servlet的技术可以用在jsp程序中
jsp的技术并不是全部适用于servlet程序
一.jsp的生命周期
jsp也是servlet,所有jsp的生命周期与servlet差别不大,
jsp的生命周期:
1.翻译:jsp->java文件
2.编译:java文件->class文件
3.构造方法(第一次访问)
4.init方法(第一次访问):_jspInit();
5.service方法:_jspService();
6.destroy方法:_jspDestroy();
二.jsp语法
jsp脚 本:<% 在这中写java代码 %>
jsp表达式: <%= 向浏览器输出变量或表达式计算的结果 %>
jsp声 明:<%! 声明jsp的成员变量或成员方法 %>
jsp注 释: <%-- 这是注释 --%>
三.jsp的三大指令:
include指令:在当前页面用于包含其他页面,包含的页面会在最顶部
<%@include file="要包含的资源路径" %>
page指令:告诉tomcat服务器如何翻译jsp文件
各个参数含义如下:
language:翻译的动态语言,java
import: 导入包,多个包之间使用,相隔
编码相关参数:
pageEncoding:告诉tomcat服务器使用什么编码翻译jsp文件(jsp->java文件)
contentType: 服务器发送浏览器的数据类型和内容编码,一般不需要设置
错误相关参数:
errorPage:指定当前jsp页面的错误处理页面
isErorrPage:指定当前页面是否为错误处理页面。
false,不是错误处理页面,则不能使用exception内置对象
true,是错误处理页面,可以使用exception内置对象
其它参数:
session:是否开启session功能
false,不能用session内置对象
true,可以使用sessio置对象
buffer: jsp页面缓存大小
isELIgnore:是否忽略EL表达式
taglib指令:导入标签库(tld文件)
<%@taglib uri=" 所要导入的tld文件的uri " prefix=" 简写名 " %>
四.jsp的内置对象
Sun公司设计Jsp时,在jsp页面加载完毕之后就会自动帮开发者创建好一些常用对象,
这些创建好的对象就叫内置对象。
jsp的9大内置对象
对象名 对象类型
request
HttpServletRequest
response
HttpServletResponse
config
ServletConfig
application
ServletContext
session
HttpSession
exception
Throwable
page Object(this)
out jspWriter
pageContext
PageContext
out对象:相当于带缓存的PrintWriter
PrintWriter:
write("内容"),直接向浏览器写出
JspWriter:
write("内容"),向jsp缓冲区写出内容
当满足以下条件之一,缓冲区内容写出:
1.缓冲区满了
2.刷新缓存区
3.关闭缓存区
4.执行完毕jsp页面
pageContext对象: jsp的上下文对象
可以获得其它8个内置对象,如: pageContext.getOut(),;pageContext.getSession();
也是四个域对象之一:pageContext
域对象保存获取数据的方法都是: get/set Attribut();
pageContext作为域对象,可以往不同域对象中存取数据
pageContext.setAttribute("key","value",PageContext.REQUEST_SCOPE);
加上域范围常量,pageContext便可以把数据存到相应的域对象中。
域范围常量:
PageContext.PAGE_SCOPE //pageContext默认
PageContext.REQUEST_SCOPE
PageContext..SESSION_SCOPE
PageContext.APPLICATION_SCOPE
既然pagetContext可以把数据存在不同的域对象中,自然也可以在不同的域对象中取
pageContext.getAttribute("key",PageContext.REQUEST_SCOPE);
与存一致,只需要加上域范围常量便可。
自动在4个域对象中搜索数据
pageContext.findAttribut("key");
搜索的顺序为:pageContext域 --> request域 --> session域 --> ServletContext域
域对象作用范围:
pageContext域:
在当前jsp页面中使用(当前页面)
HttpServletRequest域:
在同一个请求中使用(转发)
HttpSession域:
在同一个会话(session对象)中使用(私有的)
ServletContext域:
在同一个web应用中使用(全局的)
五.EL表达式:向浏览器输出域对象中的变量值或表达式计算的结果
jsp表达式<%= %> 和 jsp脚本<% %> 在这语法中书写java代码会导致代码混乱不易维护,
所以在开发中应尽量书写java代码,使用el表达式来替换掉jsp表达式<%= %>
el表达式语法:${变量或者表达式}
输出基本类型和变量
${key} 表示从四个域中搜索名为key的数据 = pageContext.findAttribut("key")
${requestScope .key} 表示从request域中搜索名为key的数据
等同于 pageContext.getAttribute("name",PageContext.PAGE_SCOPE)
输出对象的属性值
如下数据:
Student student = new Student("eric",20);
pageContext.setAttribute("student",student);
${student.name}表达式中的.就相当于调用该对象的getxx方法,${student.name} = student.getName();
${student.age } 等同于该代码 (Student)pageContext.findAttribute("student")).getAge();
如果域对象存的是List类型呢
pageContext.setAttribute("list",list);
${list[0]}取出list数组下标为0的数据, [0]中括号相对于调用get(参数)方法 list.get(0)
等同于(List)pageContext.findAttribute("list")).get(0)
如果数据为对象,想取出对象属性值得话
${list[0].name} 与上相似
如果域对象存的是Map类型呢 Map(key,value)
pageContext.setAttribute("map",map);
${map['key']} 与list类似,不同的是list中 [0] 填写的是下标,map中填写的是[key]值
如果数据为对象,想取出对象属性值得话
${map['key'].name} 如上原理:.代表getxxx方法,map['key']得到对象,.调用方法得到属性
普通的表达式计算如:
${10+5} 算数表达
${10>5} 比较运算
${true || false} 逻辑运算
name = "";
${name==null || name==""} 判空
六.jsp标签
标签分类:
1.内置标签(动作标签): 不需要在jsp页面导入标签
2.jstl标签: 需要在jsp页面中导入标签
3.自定义标签 : 开发者自行定义,需要在jsp页面导入标签
1.内置标签
<jsp:forward> 转发标签,
<jsp:forward page="转发资源路径"> </jsp:forward>
<jsp:param> 参数标签
转发中可以带参数转发
<jsp:forward page="转发资源路径">
<jsp:param value="tom" name="cat"/>
</jsp:forward>
转发的页面可以接受参数
<%= request.getParameter("cat") %> 得到的值为 "tom"
转发标签等同于
request.getRequestDispatcher("/资源路径").forward(request,response);
如果带参数的话便是
request.getRequestDispatcher("/资源路径?cat=tom").forward(request,response);
<jsp:include> 包含标签
<jsp:include page="包含的页面资源路径"> </jsp:include>,也可以带参数
与include指令的区别
include指令: <%@inclue file="被包含的页面"%> 静态包含
<jsp:include>标签: <jsp:include page="被包含的页面"> 动态包含
静态包含不能像被包含的页面传递参数
动态包含可以像被包含的页面传递参数
静态包含: 先合并再翻译
动态包含: 先翻译再合并
2.jstl标签:java standard tag libarary java标准标签库
使用jstl标签需要导入标签,使用taglib指令导入标签
<%@taglib uri=" 所要导入的tld文件的uri " prefix=" 简写名 " %>
掌握核心标签库 (c标签库)
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
核心标签库的标签:
set标签,保存数据(保存到域中),默认pageContext域
<c:ser var="key" value="值" scope="指定保存的域,request"></c:set>
out标签,获取数据(从域中),
<c:out value="${key}"
default="<h3>标题3</h3>": 当value值为null时,使用默认值
escapeXml: 是否对value值进行转义,false,不转义,true,转义(默认)
></c:out>
if标签,单条件判断
<c:if test="true"> 条件成立 </c:if>
choose标签+when标签+otherwirse标签: 多条件判断
<c:choose></c:choose> == switch 语句
<c:when test=""></c:when> == case 语句 test里放表达式判断
<c:otherwise></c:otherwise> == default :以上没有符合的变执行;
forEach标签:循环
<c:forEach>有如下参数:
items="": 需要遍历的数据(集合)
var="": 每个元素的名称
begin="" : 从哪个元素开始遍历,从0开始.默认从0开始
end="": 到哪个元素结束,默认到最后一个元素
step="" : 步长 (每次加几),默认1
varStatus="":当前正在遍历元素的状态对象。(count属性:当前位置,从1开始)
如:
<c:forEach items="${list}" var="student" varStatus="varSta">
序号:${varSta.count} - 姓名:${student.name } - 年龄:${student.age}<br/>
</c:forEach>
forToken标签: 循环特殊字符串
数据:String str = "java-php-net-平面";
pageContext.setAttribute("str",str);
items = 需要切割的内容 delims = 切割点 var = 切割后字符串的名字
<c:forTokens items="${str}" delims="-" var="s">
${s }
</c:forTokens>
redrict:重定向标签
<c:redirect url="路径资源"></c:redirect>
该文章内容只是本人作为初学者的学习笔记总结,若想深入了解详情请自行查阅相关资料
相关文章推荐
- JavaScript学习
- 树结构之JavaScript
- JavaScript实现简单的购物车
- Avalon.js的学习(一)
- json_decode()
- js动画库 - velocity.js
- JavaScript经典博客收集
- js中的eval函数
- js的单例实现
- Javascript诞生与历史
- javascript 基础 insertAfter与insertBefore
- 实用ionic Js库-YFJsLibs概述
- javascript深入理解js闭包
- 5.Ext JS actioncolumn动态加载图标/提示
- JavaScript
- anime.js
- JavaScript二进制数据序列化和反序列化
- javascript 基础 创建动态标记 2017-1-8
- 登录和注册(Js)的写法
- 通过html字符串连接组合并调用javascript函数