全称: java server page , java 服务器的页面。
本质上还是一个 servlet。这里就看看他的原理部分,是怎么运作的:
浏览器请求一个 .jsp 的页面时,
服务器这边,会将 .jsp 文件,编译成 .java 文件和 .class 文件。
然后就可以 .class 文件被虚拟机加载就可以用了。
比如:
在 idea 里实验 out 文件夹找不到输入文件,
在 tomcat 的安装目录试就行了,webapps 目录下,一个文件夹,就是一个新项目,
然后去 work 文件夹里找工作产生的文件
那些网页显示的静态画面,就是通过 out 对象,输出出来。
jsp 里不需要导包,直接拿来就可以用的对象。
request、resposne、session、application、pageContext、page、config、out、exception
看个图,看看他们都是怎么赋值的:
常用的也就那么几个,注意他们的作用域范围:
request : 只针对单个请求有效。
session : 为每个用户创建一个 session, 针对用户有效。
application : 保存在 服务器端 的信息。 可以做有多少访客这个功能。
pageContext : 对当前页面有效。
理解下 page、exception 对象,虽然不怎么用。。
page 就是指当前的 jsp, 类似于 java 里的 this 指针。
exception : 需要和 @page 指令里的 isErrorPage = “true”, errorPage=“xxx.jsp” 结合使用。
比如:
index.jsp 里的 @page 指令内容:
<%@ page pageEncoding="utf-8" errorPage="error.jsp" contentType="text/html;charset=UTF-8" l anguage="java" %>在 error.jsp 里的 @page 指令内容:
<%@ page language="java" isErrorPage="true" import="java.util.*" pageEncoding="UTF-8"%>然后就可以在 error.jsp 使用 exception 对象了。。。 但也没什么用,一般就 getMessage() 一下。。。
page 指令。
定义一些关于页面的属性。
比如:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="java.util.ArrayList" %>include 指令
主要就是在 jsp 页面,引入另外的页面来用。
比如:
<%@ include file="bottom.jsp" %> <!-- 写在 body 里面的 -->taglib 指令。
主要配和 jstl (需要用相应的 2 个 jar 包)来使用,配置一些相关定义。
比如:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>全称: expression language , 表达式语言。
之前在 jstl 中, 在 JSP2.0 中, 从 jstl 抽取出来了,放在 JSP 的规范里。
主要式用来显示动态数据的。 格式 : ${ 要显示的变量名 } , 这样比 使用 <%= %> 简洁、方便很多。
注意: EL 是用来获取数据的,前提是要有数据。 没有数据可以先在相应的作用域 setAttribute( ) 存储下。
如果作用域里有相同的 key 名时,
比如:
<% request.setAttribute("key", "req-value"); session.setAttribute("key", "session-value"); application.setAttribute("key", "application-value"); pageContext.setAttribute("key", "pageContext-value"); %> ${key}这样在获取 key 的值时, 查找的顺序是: page、request、session、application。
全称:Java server pages standarded tag library, jsp 的标准标签库。
一般比较常用的就是 核心标签 : <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>, 这里 prefix 前缀取得名字可以随便写,之后的代码里也相应的变一下就好了,但一般都是取 c 这个前缀。
core 核心标签,主要有:
表达式操作 out、set、remove、catch流程控制 if、choose、when、otherwise迭代操作 forEach、forTokensURL操作 import、param、url、redirectSet标签 <c:set> 主要用来将变量存储至JSP范围中 或是JavaBean的属性或Map对象中示例: 常用的还是 if、forEach 标签。。。
<body> <h1>before delete ...</h1> <c:set value="c-set-value" var="str" scope="request"></c:set> str --> ${str} <br> str --> <c:out value="${str}"></c:out> <c:remove var="str" scope="request"></c:remove> <h1>after delete ...</h1> str --> ${str} <br> str --> <c:out value="${str}"></c:out> <hr> <h1>if...</h1> <c:set var="age" value="23" scope="request"></c:set> <c:if test="${age>18 && age <30}"> 青年。。。 </c:if> <h1>choose...</h1> <c:choose> <c:when test="${age<18}"> 未成年。。。 </c:when> <c:when test="${age<30}"> 青年人。。。 </c:when> <c:otherwise> 其他情况。。。 </c:otherwise> </c:choose> <hr> <h1>list</h1> <% ArrayList arrayList = new ArrayList(); arrayList.add("this is a list..."); arrayList.add(100); arrayList.add(new Object()); request.setAttribute("list", arrayList); %> <c:forEach items="${list}" var="element" varStatus="sta"> varStatus -- > ${sta}<br> varStatus.count -- > ${sta.count}<br> varStatus.index -- > ${sta.index}<br> element -- > ${element}<br> </c:forEach> </body>