引入
jsp本质上是一个servlet,在运行过程中,会将jsp相关的内容转换成servlet代码(response.getWriter.write(xxx);),可以连接浏览器接受数据并作出响应,可以代替HTML做出页面的渲染。但是在编写的时候是按照HTML风格进行编写的。既可以包含HTML代码,也可以包含java代码。
只用servlet进行页面渲染
首先我们明确一下具体关系
浏览器向servlet发送请求,servlet通过jdbc向数据库发送请求并得到数据库响应的数据,这些数据存储在一个对象中,servlet解析这个对象的内容,再对浏览器进行响应
使用servlet可以做出html的效果,像这样
这样非常费力不讨好
而html又无法遍历列表,于是就有了jsp
jsp语法
- jsp脚本
-
jsp脚本格式:<% java代码 %>
我们可以在当前<% %>中定义局部变量或者调用方法,但不能定义方法,也不能声明成员变量 -
jsp声明格式:<%! java代码 %>
我们可以在<%! %>中声明方法,属性,成员变量,但是不能调用方法成员变量和局部变量的区别:成员变量写在类中,局部变量写在方法中,第二种格式我理解的是起了一个类的作用,而第一种格式就是在调用这个类的方法和成员变量
-
jsp脚本表达式:<%= java代码 %>
用于将已经声明的变量或者表达式输出到网页上面 -
jsp注释:<%-- 注释 --%>
- jsp指令
<%@ 指令名称 属性1=“属性值1” 属性2=“属性值2” … %>
作用:
可以大大减少代码量,只需要设置简单的指令,就可以将java代码进行翻译的指令会翻译成大段大段的java代码来执行
-
page指令
作用:限制jsp的格式
(1)pageEncoding:指令页面编码格式,相当于response.setCharacterEncoding(“utf-8”);
(2)contentType:客户端浏览器根据该属性判断文档类型,相当于response.setContentType(“text/html;charset=utf-8”);
(3)language:指明解释该JSP文件时采用的语言,默认为java
(4)import:导包
-
include指令
作用:引入页面,有一些需要重复使用的代码,例如导航栏,就可以单独抽成一个文件,然后使每个文件都include这个文件
<%@ include file=“需要引入文件的地址” %> -
taglib指令
作用:专门负责引入标签库,类比于java引入jar包
格式:<%@ taglib prefix="" uri="" %>
prefix : 定义引入标签的前缀
uri : 引用哪个标签库,可以理解为java中的import
EL表达式
作用:通过${key }获取域对象中的数据
- 不同类型获取数据
(1)String
(2)list
(3)javaBean
- 一些运算符
(1)算术运算符:+ - * /或者div %或者mod
(2)关系运算符:== 或者 eq , != 或者 ne , < 或者 lt , > 或者 gt ,<= 或者 le ,>= 或者 ge
(3)逻辑运算符:&& 或者 and ,|| 或者 or ,! 或者 not
(4)判空:empty
JSTL标签
作用:简化jsp代码
- 使用jstl标签
(1)导入jar包
(2)JSP页面使用taglib指令导入对应的标签库,针对该JSP页面就可以使用JSTL标签,相当于导入jar包
①<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
②prefix : 定义引入标签的前缀
③uri : 应用哪个标签库,相当于java中的import
(3)常用标签(这里的c就是taglib指令里prefox的c)
①<c:if>
如果test=""中的条件成立,则执行标签中内容
②<c:forEach>
这里的var有点像局部变量那种意思,这个例子中第一次遍历p指的是p对象,第二次遍历p指的是p2
遇到的问题
在导入jstl时出错
解决办法:将standard.jar解压,把里面的.tld文件放入WEB-INF目录下