jsp
什么是jsp
在很多动态网页中,绝大部分内容都是固定不变了,只有局部内容需要动态产生和改变,为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了jsp。
jsp的本质就是一个Servlet,运行时会自动编译为java文件
jsp脚本
声明脚本
声明脚本,用于声明全局变量/方法
声明的全局变量/方法,会被定义在当前将被生成的Servlet类的全局变量里,方法之外类之内 jsp <%! String name; %>
脚本段
在脚本段中书写java代码,且代码生成在service方法里 jsp <% //在这里写java代码,这里的java代码会自动生成在Servlet的service方法里 %>
表达式脚本
把表达式进行运算,并把结果打印到页面上 jsp <%= 21+32 %>
jsp指令
jsp <%@ 指令名称 %>
page指令
pageEncoding 编码方式
language 目前仅支持java
import 导入jar包
errorPage 页面报错后,指定报错页面
isErrorPage 是否使用错误页面
```jsp <%@ language="java" %>
```
### include 把指定文件中的信息包含到当前页面中
jsp <%@include file="jsp文件路径" %>
tablib
用于引入,其他标签库 jsp <%@taglib prefix="前缀" url="标签库" %>
jsp内置标签
jsp:useBean
useBean 用于代替页面里使用对象 jsp <jsp:useBean id="" class="类路径" scope="request"></jsp:useBean>
jsp:setProperty
给对象属性赋值
jsp <jsp:setProperty name="对象名" property="属性名" value="属性值"></jsp:setProperty>
getProperty
获取对象属性 jsp <jsp:getPeroperty name="对象名" property="属性名" value="属性值"></jsp:getPeroperty>
forWard
请求转发跳转 jsp <jsp:forward page="/index.jsp" ></jsp:forward>
element(不常用)
用于在jsp写html标签 ```jsp
```
attribute (不常用)
设置元素的属性值
jsp <jsp:element name="a"> <jsp:attribute name="href">http://www.baidu.com</jsp:attribute> </jsp:element>
范围对象
范围对象一般是是用于一定范围内的数据共享
HttpSerletRequest 请求
HttpSession 会话对象
ServletContext 上下文对象
Session
会话对象,一次会话,多次请求,通过session在请求之间共享数据。
java public class SessionDemo extends HttpServlet{ public void doGet(HttpServletRequest req,HttpServletResponse res){ dopost(req,res); } public void dopost(HttpServletRequest req,HttpServletResponse res){ HttpSession session=req.getSession(); session.setAttribute("属性名","属性值"); session.getAttribute("属性名"); } }
ServletContext
上下文对象,只要程序运行就在程序中
```java public class contextDemo extends HttpServlets{ public void doGet(HttpServletRequest req,HttpServletResponse res){ dopost(req,res); } public void dopost(HttpServletRequest req,HttpServletResponse res){ //直接获取 getServletCoontext() //通过request获取 req.getServletContext() //通过session获取 req.getSession().getServletContext()
//属性值设置和获取
context.setAttribute("属性名","属性值");
context-getAttrbibute("属性名");
}
}
```
jsp九大内置对象
request 请求对象
response 响应对象
session 会话对象
pageContext 页面上下文对象,进行当前页面数据共享
application 这个application就是ServletContext
config 这个是ServletConfig Servlet的配置对象
out 输出流 == response.getWriter().writer(String)
page 当前类对象
exception 异常对象(只有在page指令isErrorPage为true时才可以使用)
EL表达式
表达式语言
语法:${} 作用就是代表输出标识符所代表的值
使用${}来进行输出值
el表达式里还支持使用运算符:比如关系运算符,三目运算符 jsp <!-- 替换表达式 --> ${21+32} <!-- 获取共享数据 --> ${requestScope.属性名} <!-- 获取集合中的数据(list表达式获取集合中的数据必须将集合存储在范围对象内) --> <% List list=new ArrayList(); list.add(1);list.add(2);request.setAttribute("list",list);%> ${list[1]}
如果el表达式不支持的话可以尝试加入page指令isElignored=false
jsp <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
EL表达式内置对象
requestScope 请求对象
sessionScope 会话对象
applicationScope 上下文对象
pageScope 当前页面上下文对象
param 参数对象
JSTL
jstl是jsp的标签库
jstl一般是与el表达式配合使用,所以需要设置page 指令 isELIgnored="false" maven配置
使用jstl需要以这样的方式导包
xml <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jstl-impl</artifactId> <version>1.2</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> </exclusion> <exclusion> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> </exclusion> </exclusions> </dependency>
jstl核心标签
< c:out >
输出标签,相当与<%= %>
属性 value(必须) 输出的值
default(可有) 默认输出
escapeXml(可有) 是否转换特殊字符(值为true/false)
jsp <c:out value="哈哈哈"></c:out>
###
用于定义变量或者属性的名称
属性 var 属性/变量名称
value 值
scope(可选,默认为page) 范围变量
```jsp
```
用于条件判断 属性 test="判断语句"
jsp <c:if test="${21>20}">成年了</c:if>
选择标签,相当于java中的switch语句,通常配合
(相当于switch的case)和
(相当于switch的default)使用 jsp <c:choose> <c:when test="${a < 20}">大于</c:when> <c:when test="${a>18}">小于</c:when> <c:otherwise>没有这个选项</c:otherwise> </c:choose>
遍历标签
属性: items 要被循环的信息可以是数组,java集合等
var 当前被遍历对象的别名
begin 起始下标
end 结束洗标
step 每次迭代的步长
jsp <c:forEach begin="0" end="10" step="2" var="num" >${num}</c:forEach>
###
截取字符串
属性 items 目标字符串
dalims 以x切割
var 切割之后字符串的别名 jsp <c:forTokens items="112哈哈哈2哈哈哈" delims="2" var="str">${str}</c:forTokens>
###
删除属性/变量
属性
varname 要删除的属性名/变量名
scope 要删除的作用域,默认是page
```jsp
```
引入标签,用于导入动态或者静态文件
属性:
url="文件路径"
charEncoding="utf-8" 引入文件的字符编码
context="names" 使用相对路径访问context资源时,context用来指定这个资源的名称
scope 范围变量
var 存储所引入文本的变量
jsp <c:import var="data" url="http://www.baidu.com" /> <c:out value="${data}" />