02-JSP初识
JSP
一、jsp概述
- java serverpages服务器
- jsp可用一种简单易懂的等式表示为:HTML+JAVA=JSP
- 可以生成动态的HTML(拼标签)
- 以.jsp为后缀的文件,内容是以标签为主题,可以内嵌java代码,本质上是Servlet
二、jsp使用
创建jsp文件
首先先创建一个javaweb项目
在webcontent下创建文件以.jsp结尾的文件
创建JSP默认编码是ISO-8859-1 访问时页面出现乱码
如何修改JSP默认的编码格式
1. 点击window
2. 点击preferences
3. 在上面输入框中输入jsp
4. 找到jsp Files
5. 右边有一个Encoding 点击,下拉翻到最上面,找到UTF-8
6. 一路OK即可
7. 当你再创建jsp文件时,编码格式就变了
三、jsp引擎
JSP引擎与JSP容器指的是同样的东西,他们都指用来统一管理和允许Web应用程序的软件。常见的JSP引擎有Tomcat、JRun等,最常用的就是Tomcat
安装JSP引擎的计算机,其实就是Web服务器。大多人把Tomcat说成Web服务器,但其实Tomcat只是JSP容器(引擎)而已。之所以把Tomcat说成Web服务器,这样容易理解。
当浏览器要访问一个JSP文件时,JSP文件会经过JSP引擎转换为一个Servlet,被编译成class 然后通过class生成对象给用户进行响应。
四、jsp执行流程
请求JSP引擎,将文件生产java文件,将java文件编译为class文件,class创建对象,给用户响应。
五、jsp的组成
- 静态内容
- 指令
- 表达式
- 小脚本
- 声明区
- 注释
六、三大指令
1. page指令
- 作用:JSP指令用来设置整个JSP页面相关的属性,指令可以有多个属性,以键值对的形式表示,并用逗号隔开
- 常用属性
- language :选用什么编程语言
- import:向生成的Servlet文件中添加导包
- contentType:描述网页内容类型与编码格式‘
- extends:我们可以指定JSP生成时 继承的Servlet类
- errorPage:产生错误后,跳转的错误处理页面
2. include指令
- 作用:将一个外部文件嵌入到另一个JSP或者HTML文件,同时解析这个页面中的JSP语句
- 语法格式:<%@ include file="引入页面所在路径" >
3. taglib指令
-
作用:使用标签库定义的新的自定义标签
<%@ taglib uri="tagliburl" prefix="别名"; prefix:标签库引入时的别名,再使用标签中需要加入 别名:前缀.有时我们再一个JSP文件中引入多个标签,prefix,也是用来区别不同标签库的! uri:用来匹配引入的标签库描述文件,对应标签库中的uri.引入标签的jar包
-
使用
1. 引入相关jar包,JSTL标签 standard.jar 和 jstl.jar 两个jar包, 高版本引一个就可以了 2. 再jsp页面通过 taglib指令引入 核心标签库 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 3. 第三步可以使用标签了 test 条件 <c:if test=""></c:if>和程序中if一样 <c:forEach items="" begin="" end="" step="" var="" varStatus></c:forEach> 迭代标签,接受多种集合类型 items 要被循环的信息 begin 开始的元素 end 最后一个元素 step 每一次迭代的步长 var 代表当前条目的变量名称 varStatus 循环状态的变量名称 例如: <c:forEach var="i" begin="1" step="2" end="5"> ${i } </c:forEach> 相当于java中的 switch-case结构 <c:choose> 本身只当作 c:when 和 c:otherwise的父标签 <c:when test=""></c:when> 用来判断条件是否成立 <c:otherwise></c:otherwise> 在c:when 便签后,当 c:when 标签判断为false时候执行 </c:choose>
七、内置对象
内置对象(又叫隐含对象),及时在jsp中不需要创建(有服务器<容器>来创建),可以直接使用的对象。
1. out
out对象是JSPWriter类的实例,是向客户端输出内容的对象
- 类型:JSPWriter
- 作用:向客户端进行响应的字符打印流
2. request
四大作用域之一
- 类型:HTTPServletRequest
- 作用:请求对象,包含了请求信息
- 常用方法
- getParameter("key"):获取用户提交的表单信息
- setCharacterEncoding("编码集"):设置请求编码,防止乱码
- setAttribute("key","value"):就爱那个数据保存到request范围内的变量
- forward(String url):转发
- getParameterValue(String name):返回包含name的所有值的数组
3. response
- 类型:HTTPServletResponse
- 作用:响应对象,用来给给客户进行响应
- 常用方法
- addCookie():讲一个cookie对象发送到客户端
- sendRedirect(String url):重定向
4. session
四大作用域之一
- 类型:HttpSession
- 作用:会话对象,用来进行数据的共享和会话的跟踪
- 常用方法
- setMaxInactiveInterval(int num):设置session对象的有效时间
- invalidate():销毁当前的session
5. application
四大作用域之一
- 类型:ServletContext
- 作用:全局的Servelet上下文对象,每个应用只有一个,从应用启动就创建了,知道应用消亡,对象才会被释放
6. config
- 类型:ServletConfig
- 作用:Servelet内置对象,比较少用
7. page
- 类型:Object
- 作用:指的是当前页面对象
8. pageContext
四大作用域之一
- 类型:pageContext
- 作用页面的上下文对象,用来在一个页面中进行数据共享和通讯
9. exception
- 类型
- 作用:常用于错误处理页面,用来收集其他页面产生的错误信息,只有isErrorPage=“true”时,才会产生这个对象
八、四大作用域
为了在页面、请求、和用户轰炸机安传递和共享数据,JSP提供了四个不同的作用域:pageContext(页面作用域)、request(请求作用域)、session(会话作用域)、application(应用作用域),这些作用域规定了数据可传递和共享的范围以及数据存活时间
- pageContext:一个页面
- request:一次请求(范围:可能包含对个页面)
- session:一个会话(范围:可能包含多次请求)
- application:一次服务(范围:包含多次会话)
- 常用方法
- setAttribute(key,value)
- Object value = getAttribute(key)
- removeAttribute(key)
九、请求转发和重定向的区别
请求转发:服务器行为,request.getRequestDispatcher("forward.jsp").forward(request, response);是一次请求,是转发后请求对象会保存,地址栏和url地址不会改变
请求重定向:客户端行为,response.sendRedirect("rediect.jsp");从本质上讲等同于两次请求,前一次请求对象不会保存,地址栏的url地址会改变
十、EL表达式
EL表达式,用于快速的从域对象中取出信息的,并输出至网页!
1. 获取数据方式
取出字符串或基本数据类型的格式:${key}
取出对象的属性的两种方式:${对象的key.属性名}
取出数组/集合中对象的属性值
方式1:${数组的key[下标].属性名称}
方式2:${数组的key[下标]["属性名"]}
${数组的key[下标][属性名的key]}
2. 获取数据流程
采用就近原则,依次从四大作用域中获取数据
-
先寻找在pageContext 中是否存在,存在则输出
-
pageContext中不存在时候,寻找request中是否存在,存在则输出
-
request中不存在时候,寻找session中是否存在,存在则输出
-
session中不存在时候,寻找application中是否存在,存在则输出
-
如果四大域对象中都不存在,则输入空字符串
3. 运算符
<1>、算术运算符
+ ${6 + 8 }
注意事项:在EL表达式中的“+”只有数学运算的功能,没有连接符的功能,它会试着把运算符两边的操作转换为数值类型,进行数学加法运算,最后把结果输出。 若出现 ${'a'+'b'} 则会出现异常
- ${9 - 8 }
* ${2 * 4 }
/ ${9 / 3 }
<2>、关系运算符
> 或者 gt
>= 或者 ge
< 或者 lt
<= 或者 le
== 或者 eq
!= 或者 ne
<3>、逻辑运算符
&& 或者 and
|| 或者 or
! 或者 not
<4>、三元运算符
? :
例如: ${a=3>2?'是大于':'是小于'}
<5>、特殊运算符
empty 判断EL表达式中的表达式是否为空
例如:${empty user} // true,因为user就是空
十一、JSP的六大动作
1. include动作
<jsp:include page="引用文件的地址" flush="false"></jsp:include>
include动作引入jsp文件,在转换时期是没有被引入的,只有当执行到include代码位置的时候,才会被动态的编译载入。
2. useBean、setProperty、getProperty动作
<jsp:useBean id="别名" class="全限定名称" scope="作用范围"></jsp:useBean>
<jsp:setProperty property="属性名称" name="别名" value="值"/>
<jsp:getProperty property="属性名称" name="别名"/>
3. forward动作:转发
<jsp:forward page="转发地址">
<jsp:param value="值" name="key"/>
<jsp:param value="值" name="key"/>
</jsp:forward>
4. param动作:参数
<jsp:param value="值" name="key"/>