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