学习JavaWeb第十五天
JSP : 运行在服务器的页面
1、JSP的运行方式
- jsp的工作模式是请求/响应模式,客户端首先发出HTTP请求,JSP程序收到请求后进行处理并返回处理结果。在一个JSP文件第一次被请求时,JSP引擎(容器)把该jsp文件转换成一个servlet,而这个引擎本身也是一个Servlet。
- 转换过程:
- 1、客户端发出请求,请求访问jsp文件
- 2、jsp容器先将jsp转换成一个Java源文件,在转换的过程中如果发现jsp文件中存在任何语法错误,则终止转换过程,并向服务器返回错误信息.
- 3、如果转换成功,则jsp容器将生成的java源代码编译成响应的字节码文件.class改文件就是一个Servlet,Servlet容器会像处理其它Servlet一样来处理它。
- 4、由Servlet容器加载成功后的Servlet类,(.class)文件创建一个Servlet实例,并执行Servlet的jspinit()方法,jspinit()方法在Servlet整个生命周期中只执行一次
- 5、执行JSPService方法来处理客户端的请求,对于每一个请求,JSP容器都会创建一个线程来处理它,如果多个客户端同时访问当前jsp,那么JSP容器会创建多个线程使得每个客户端请求都对应有一条线程去处理,用这种方式来去提高系统的并发量,和缩短响应时间
- 6、如果jsp文件发生更改了,则服务器将根据设置决定是否对该文件进行重新编译
- 7、虽然Jsp效率很高,但是在第一次调用的时候由于转换和编译所以会有轻微的延迟
- 8、当请求处理完成后,响应对象由jsp容器接收,并将HTML格式响应信息发送回浏览器
2、JSP和Servlet区别
- 1、jsp主要页面显示,JSP擅长视图层、Servlet擅长控制层。
- 2、Jsp在tomcat转化成Servlet的时候给予了9大内置对象,而Servlet不叫内置对象。
- 3、JSP实质是简化版的Servlet(只负责页面相关)、Servlet功能比较全面。
- 4、Jsp不算是一个完整的Java类(需要依赖tomcat生成),Servlet纯粹的类。
3、Jsp基础语法
- JSP脚本元素 语法:<% 嵌套java代码即可 %>(相当于java里面填写局部的变量、方法调用等)
- Jsp的声明语句 用于声明变量和方法 <%! 内容 %> (相当于在类里面的成员变量和方法)
- 输出语句 <%=java要输出的值 %> (填写的方法需要有返回值)
jsp中的三大指令:page(描述页面)、include(页面包含)、taglib(表达式引入)
- page:在jsp页面中,经常需要对页面的某些特效进行描述,例如,页面的编码方式、jsp页面采用的语言等,这时可以通过page指令来实现,page指令的具体语法格式如下所示 描述页面信息
- 语法<%@page 属性=” 值” 属性=” 值” 属性=” 值” 属性=” 值” %>
- 一般用法描述:< %@ page contentType=“text/html;charset=UTF-8” language=“java” % > contentType="text/html表示jsp中的类型,charset=UTF-8"设置其编码格式, language="java"语言,errorPage="welcome.jsp"页面发生异常所有加载的页面
- 基本属性:
- ContentType:有效的文档类型,客户端浏览器根据该属性判断文档的类型,例如:HTML格式为text/html纯文本的格式为text/plain jpg图像为image/jpeg…
- charset 设置其编码格式
- Language : 指解释该jsp文件是采用的语言,默认为java
- Import : 导java包或类,impor是唯一可以声明多次的page指令属性,一个import属性可以引用多个类,中间用英文都好分割
- IsErrorPage : 声明当前页面是否是一个错误页面,默认值是false,如果为true 则该jsp内置有一个Excepetion对象,可以直接使用。
- ErrorPage:指定一个错误页面,如果该servlet程序跑出一个未捕捉的异常,则转到errorPage指定页面。errorPage指定页面的isErrorPage实现为true,且内置的exception对象为未捕捉的异常
- Session :声明当前Jsp是否初始化Session内置对象 默认是true表示初始化
- include:在实际开发时,有时需要在jsp页面静态包含一个文件,例如html文件、文本文件等,这时可以同include指令来实现(即引入其它jsp文件 、基本上都是公共的部分)
- 注意点:include静态包含将2个jsp合成一个jsp 生成一个servlet
- 语法:<%@include file=”页面名称” %>
- taglib:指令一般引用第三方的表达式比如jstl表达式,fmt格式化时间的
- 语法:<%@taglib prefix=“简称” uri=“具体的表达式的连接” %>
EL表达式:简化jsp里的代码,用于获取存于内置(request, respone servletContext)对象的值
- 语法: ${ 作用域对象的名称 }
- 注意点:使用el表达式来获取对象,必须给这个对象set与get 方法,
- 获取的语法:${对象名称.属性的名称}
- EL作用:避免简单的错误 做些简单的算术 获取内置对象作用域下的值
- 运算符如图:
JSTL标签库:与 el搭配使用,简化jsp里的代码
- jstl表达式使用步骤:
- 1.导入jar(添加依赖)
- jstl.jar
- standard.jar
- 2.引用相应的标签库 jstl
- <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
- 解析:prefix="c"表示前缀,一般取名为c,可以修改(但不建议),uri="http://java.sun.com/jsp/jstl/core"表示引入的核心库(也就是网址),写法固定
- 1.导入jar(添加依赖)
- 常见表达式:
- 1.< c:set var=“pang” value=“变量值” scope=“session”></ c:set>:设置一个变量,var为变量的名称,value为值, scope为哪个域(没指定scope 默认是 pageContext域)
- 2.< c:if test="${pang !=null}"> 写的内容 </ c:if>:用于做判断,test 里便是判断的条件
- 3.表示多分支if选择结构
<c:choose>
<c:when test=" $ {pang==20}" >
年龄为20
</c:when>
<c:when test="${pang>=22}">
下一个就是你了
</c:when>
<c:otherwise>
找了一个
</c:otherwise>
</c:choose>
- 4.遍历集合的标签
<c:forEach items="${registerList}" var="register"
varStatus="statu" begin="1" end="5" step="2">
${register.id}<br/>
${register.name}
</c:forEach>
- Items:表示需要遍历的集合
- var="register":表示每次遍历的对象
- varStatus:表示其索引
- index 下标
- count 序号
- begin:表示从几开始遍历
- end:到什么时候结束
- step:步长,每次遍历的间隔
- 5.<c:out value=“ddd”></c:out>:就是打印,把value的值打印到网页上。 可以输出域对象中的内容 、可以输出自定义内容