JSP学习笔记

jsp:   java服务器页面  java server page  和servlet一样,也是一种动态网页技术,jsp是servlet的升级版本。

主要是用来做页面展示
jsp将业务逻辑和显示逻辑区分开。

如何使用jsp:
原始servlet:先写servlet类,继承httpServlet  覆盖service   new Date()   response获取输出流  out.print(date)
web配置     部署访问

jsp实现
1、新建文件必须放在web-root目录下, 注意,不能放在web-info目录下, 
2、通过文件名直接访问
3、对jsp文件的内容进行修改后,不需要重新编译和部署,直接刷新

jsp之所以能够动态显示内容,是因为将java代码通过特殊的标签嵌套在了html文件中

如何在html文件中嵌套java代码
1、可以嵌套脚本元素
在html文件中嵌套的java代码,就叫脚本元素
1、表达式脚本: 书写<%=   %>标签内,主要是将表达式的计算结果输出在页面中。
也是唯一具有输出功能的脚本
1、可以显示字符串
2、常规的算数表达式:+-*/% ++  -- 。。。
3、比较表达式  >  <  >=  <=   != ==
4、逻辑表达式  与(&&)   或(||)   非(!)
ps:表达式的结尾处不能添加“;"
2、声明脚本:书写在<%!  %>标签内,主要用来说明变量和函数
3、普通脚本:书写在<%  %>标签内,可以书写任何java代码,但是,不能定义函数,
一般主要用来做流程控制或者逻辑判断
for(int i = 0; i < 10; i ++){
System.out.println("hello world");
}`
ps:
1、三个脚本之间不能相互嵌套
2、脚本元素里面不能嵌套html标签
作业: 1、输出九九乘法表
2、奇数行的数据用红色显示,偶数行用蓝色显示

jsp原理:
jsp的本质就是一个servlet
当用户在第一次访问一个jsp页面的时候,tomcat服务器会接收到客户端请求,检测客户端请求的后缀,
如果发现该请求以.jsp结尾,那么,会在web-root目录下,根据请求的路径,找到相应的jsp文件,随后,
tomcat按照自定义的规则,将当前jsp翻译为servlet的.java文件。最后调用servlet类中的service方法,
将结果输出到客户端浏览器。以后再次访问该jsp的时候,直接运行.class 文件
如果jsp文件进行了修改, tomcat服务器会及时重新翻译。
jsp页面的内容:
1、普通的html标签及普通文件:直接通过输出流输出
2、表达式脚本:通过输出流直接输出
3、声明脚本:声明脚本里面声明的函数和方法全部翻译为当前servlet类中的成员变量(为了线程安全考虑,尽量不要在声明脚本中定义变量)
4、普通脚本:普通脚本的内容直接翻译为service方法内中的代码
ps:如果普通脚本里面声明了变量,变量会被翻译为局部变量。

5、指令元素
jsp动态效果:是通过后台的servlet实现动态效果

如果jsp页面出现大量的脚本,页面结构会非常混乱,所以,在以后的开发过程中,尽量避免使用脚本

2、可以嵌套指令元素
所谓指令元素,主要用来标记当前jsp的一些特性,便于tomcat能够正确翻译jsp为servlet
页面指令:
用法:写在 <%@page  "属性名”=“属性值”%>
jsp页面默认是13个页面指令
language:表示当前html文件中可以嵌套哪种语言,默认为java,一般可以忽略不写。
contentType: (text/html;charset=utf-8)页面类型,用来设置当前jsp中响应的响应类型和字符编码集  
pageEncoding:页面编码集,tomcat服务器将jsp翻译为servelet的时候,所使用的字符集
import:
<%@page import="java.util.*" %>
<%@page import="com.zprkt.entity.*" %>
<%@page import="com.zprkt.entity.*,java.util.*" %>
errorPage:当当前jsp页面抛异常的时候,请求转发到哪个页面中
isErrorPage:表示当前页面是否是错误页面,可选值 true|false
session:表示当前页面是否参与session会话,默认值是true
如果session="true": 则在当前jsp页面可以使用session对象
如果session="false":则在当前jsp页面不可以使用session对象
isELIgnored:是否忽略el表达式,可选值true|false,默认值是false(如果为false:则在当前jsp页面可以使用el表达式,
如果为true:则页面所写的el表达式无效


重点:contentType  pageEncoding  import  isErrorPage  errorPage  
包含指令:
在当前jsp页面可以包含其他页面,包含的页面的源代码,也将包含指令称之为 静态包含,也可以包含html文件
使用方法:  <%@include  file="../">
当用于在访问一个含有包含指令的jsp的时候,他首先会创建一个临时的jsp文件,在临时文件里面,
将两个jsp的内容进行合并,将合并后的jsp的内容当做访问的jsp的内容,然后进行翻译成为.java文件
注意:两个页面中不能出现同名的变量和函数
标签指令:
使用方法:
<%@taglib  uri="标签库的名称"  prefix="给当前标签库指定前缀"%>



3、可以嵌套动作元素
1、包含动作
在当前页面可以包含另外一个页面,包含的是页面的执行结果,也称之为动态包含
使用方法:
使用方法1:<jsp:include page=""/>
使用方法2:<jsp:include page="">
<jsp:param  name=""  value="">
<jsp:param  name=""  value="">
</jsp:include>
动态包含的使用场景:经常用来包含显示结果
静态包含: 主要用来包含一些运算



2、转发动作  等同于: req.getRequestDispatcher("loginOk.jsp").forward(req, res);
使用方法 : 方法一:<jsp:forward page=""/>
方法二:<jsp:forward page="">
<jsp:param  name=""  value="">
<jsp:param  name=""  value="">
</jsp:forward>
动态包含:主要侧重于包含内容
转发动作:侧重于流程跳转
主要掌握 转发动作
========================================================================
jsp  :隐含对象
指的是tomcat将jsp翻译为servlet类的时候,会自动帮助开发人员创建的对象
总共有9个隐含对象:
request   ----> HttpServletRequest
response -----> httpServletResponse
session  ----> HttpSession  前提是:isSession=true
application  -->  ServletContext

out      -----> 页面和浏览器之间的输出流对象  -->response.getWriter();
exception  ---->是错误页面所特有的对象 ,Throwable
config    ------>ServletConfig, 一般jsp不使用。
page      ------>  this  ,表示当前页面

pageContext  ---> PageContext  ,他是jsp页面所特有的对象

如果要使用隐含对象,直接通过对象名调用,同时,对象名无法修改
隐含对象只能在表达式脚本和普通脚本中使用

pageContext对象:
1、可以认为是一个作用域,作用范围只在当前页面有效,可以保存命名属性
pageContext.setAttribute("name",object)  -往pageContext里面保存命名属性
Object o = pageContext.getAttribute("name"); 从pageContext里面获取命名属性
2、通过pageContext可以访问其他作用域里面的保存的命名属性
request,session,application  作用域里面保存的命名属性不能相互访问
Object o = pageContext.getAttribute("name"); 默认从pageContext里面获取命名属性
pageContext.getAttribute("name", PageContext.SESSION_SCOPE):访问其他作用域里面的命名属性
pageContext.findAttribute("name"):按照作用域的大小,从小到大,依次找命名属性,
如果找到,直接返回,如果从四个作用域中都没有找到命名属性,返回null
补充:
pageContext.setAttribute("age", "test",PageContext.REQUEST_SCOPE); 通过pageContext往其他作用域
中保存命名属性
3、通过pageContext可以获取其他隐含对象
request,session,application,out,response
4、通过pageContext可以进行包含和请求跳转
pageContext.include("loginOk.jsp");包含的是页面的结果
pageContext.forward("fourScope.jsp");请求转发
=====================================================================================
el表达式
expression language   表达式语言,用来将表达式的运算结果显示在页面
el表达式替换  表达式脚本:
 声明脚本
 普通脚本
el的作用:
1、对表达式进行运算,并将结果输出
2、通过el表达式,可以操作作用域里面的命名属性(重要等级*****)
3、提供其他辅助性功能    可以获取客户端参数,可以访问cookie,可以访问集合和数组
如何使用el表达式
1、isELIgnored="false"
2、${ 表达式}
3、进行表达式计算  (重点)
表达式脚本:输出一个字符串,输出一个对象,算数运行(+-*/%++) 比较运算(< > >= != ==),逻辑运算(与或非)
el表达式:
注意:  当进行字符串比较的时候,用"==" ,不能用equals方法
判断字符串是否为null   ${empty  a}
4、操作命名属性   (重点)
取值的时候,有四个关键字: requestScope,sessionScope,applicationScope,pageScope
<%=request.getAttribute("sss")  %>
el: ${requestScope.sss}

注意:
${aa}:aa默认为命名属性的名称,直接到作用域里面按照作用范围从小到大以此寻找 
相当于 :  pageContext.findAttribute("");
通过el表达式访问对象的属性(重点)
${对象名.属性名}  ————--->  实际调用的是属性getxxx();
${tea.id}   --->  getId()
${tea.count}  --->getCount()

注意:el表达式在访问对象的属性的时候,不直接访问对象的属性名,而是通过访问类中存在的该属性的getXx()。
补充点:(了解)
1、可以通过el表达式访问session的jsessionId
注意:
el表达式只能使用pageContext,其他隐含对象不能直接在el表达式里面使用,如果要使用隐含对象,
可以通过pageContext间接获取

pageContext在jsp页面作用:可以充当作用域 ,也可以充当对象
5、通过el表达式获取客户端参数( 重点)
${param.name}  通过el表达式里面的关键字param获取
等同于  request.getParameter("name");
6、 通过el表达式访问cookie(了解)
servlet:Cookie[]  ck = request.getCookies();
7、el表达式可以访问数组或者集合  (掌握)
访问数组:
${属性名[下标]}
访问集合
list  ${属性名[下标]}
set    xxxxxx
Map   ${属性名[key]}
===============================================================================


jstl: jsp standard tag library  jsp的标准标签库
jsp页面显示的数据分类;
1、单个数据的展示
表达式脚本  或者el表达式
2、有条件的数据显示
必须嵌套脚本完成
3、通过循环展示的数据
通过脚本完成
核心标签库;

使用:
1、<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %>
2、标签使用
1、<c:set>  往作用域里面添加命名属性
用法1: <c:set var="属性名" value="命名属性值" scope="存放作用域的范围page|request|session|application"/>
用法2:<c:set var="var2" >hello world</c:set>  value属性值通过标签体代替
2、<c:if test="true|false"></c:if>  重点
3、<c:forEach>   重点
varStatu:  有两个重要的属性:index(当前循环的下标)  和count(当前循环的次数)
用法1:遍历基本数字
<c:forEach begin="起始遍历下标值" end="结束下标值" var="临时变量" varStatus="循环计算器">循环体</c:forEach>
用法2:遍历集合
<c:forEach items="所要遍历的集合或数组" var="集合里面的临时变量"></c:forEach>

4、 <c:remove var="命名属性名称" scope="page|request|session|application">  :从作用域里面删除命名属性
注意:如果不指定scope属性,默认删除所有作用域里面的命名属性值
如果指定scope:删除特定作用域里面的命名属性
5  <c:out value="输出的值" default="如果value的值为null,输出defalut里面定义的值">  在页面输出内容
6 <c:redirect>:用来做重定向
<c:redirect url="url-pattern|uri"></c:redirect>
当客户端浏览器禁用cookie,或自动将cookie中jsessionid的值拼接到地址栏
<c:redirect url="/userView.jsp">
<c:param name="age" value="23"></c:param>
</c:redirect>
7、<c:url value="url-pattern" var="保存的命名属性的名称" scope="page|request|session|application"> 将url路径以字符串格式输出
8 <c:import>将另外一个资源的结果包含当前页面,
<c:import url="/userView.jsp" var="" scope="" charEncoding=""></c:import>
9 <c:choose>  :只执行一个c:when 为true的代码块
<c:choose>
<c:when test="true|false">如果test为true ,则执行此代码</c:when>
<c:when test="true|false">如果test为true ,则执行此代码</c:when>
<c:when test="true|false">如果test为true ,则执行此代码</c:when>
<c:otherwise>
如果所有的test都为false,则执行此代码
</c:otherwise>
</c:choose>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值