什么是jsp
Java Server Pages:java服务器端页面,也和Servlet一样,用于动态web技术
特点:
- 写jsp和写HTML类似
- 区别:
- html只能提供静态的数据
- jsp页面中可以嵌入Java代码,为用户提供动态数据
jsp原理
浏览器向服务器发送请求,不管访问什么资源本质上都是在访问servlet
JSP最终也会被转化为Java类
JSP本质上就是Servlet(HttpJspBase 继承了 HttpServlet)
//初始化
public void _jspInit(){}
//销毁
public void _jspDestroy(){}
//JSPService
public void _jspService(HttpServletRequest request, HttpServletResponse response){}
1. 判断请求
2. 内置对象
final javax.servlet.jsp.PageContest pageContext; //页面上下文
javax.servlet.http.HttpSession session = null; //session
final javax.servlet.ServletContext application; //application
final javax.servlet.ServletConfig config; //config
javax.servlet.jsp.JspWriter out = null; //out
final java.lang.Object page = this; //page:当前
HttpServletRequest request //请求
HttpServletResponse response //响应
3. 输出页面前增加的代码
response.setContentType("text/html"); //设置响应的页面类型
;ageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
以上的对象都可在jsp页面中直接调用
jsp基础语法
jsp表达式
<%= 变量或者表达式%>
${}
jsp脚本片段
<%
...
%>
jsp声明
<%!
...
%>
jsp声明会被编译到Java类中,其他会被生成到_jspService()方法中
jsp指令
<%@page args...$>
<%@include file=""%>
9大内置对象
- PageContext 保存的数据在一个页面中有效
- Request 保存的数据只在一次请求中有效,请求转发会携带这个数据
- Response
- Session 保存的数据在服务器中有效,从打开浏览器到关闭浏览器
- Application (=ServletContext)
- config (=ServletConfig)
- out
- page
- exception
jsp标签,jstl标签,el表达式
maven依赖
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- standard标签库 -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
EL表达式
${}
- 获取数据
- 执行运算
- 获取web开发的常用对象
调用java方法(一般不用)
JSP标签
<jsp:include >
<jsp:forward page="/index.jsp">
<jsp:param name="name" value="test"></jsp:param>
<jsp:param name="age" value="18"></jsp:param>
</jsp:forward>
JSTL标签库
JSTL标签库的使用是为了弥补HTML标签的不足,它自定义了许多标签,可以供我们使用,标签的功能和Java代码一样。
使用步骤:
- 引入对应的 taglib
- 使用其中的方法
核心标签
<%--引入JSTL核心标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
标签 | 描述 |
---|---|
<c:out> | 用于在JSP中显示数据,就像<%= … > |
<c:set> | 用于保存数据 |
<c:remove> | 用于删除数据 |
<c:catch> | 用来处理产生错误的异常状况,并且将错误信息储存起来 |
<c:if> | 与我们在一般程序中用的if一样 |
<c:choose> | 本身只当做<c:when>和<c:otherwise>的父标签 |
<c:when> | <c:choose>的子标签,用来判断条件是否成立 |
<c:otherwise> | <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行 |
<c:import> | 检索一个绝对或相对 URL,然后将其内容暴露给页面 |
<c:forEach> | 基础迭代标签,接受多种集合类型 |
<c:forTokens> | 根据指定的分隔符来分隔内容并迭代输出 |
<c:param> | 用来给包含或重定向的页面传递参数 |
<c:redirect> | 重定向至一个新的URL |
<c:url> | 使用可选的查询参数来创造一个URL |