JSP
- Java Server Pages
JSP原理
- 在页面中嵌入Java代码,为用户提供动态数据
- JSP最终也会转换成为一个Java类,本质上就是一个Servlet
- 内置方法:
public void _jspInit();//初始化
public void _jspDestroy();//销毁
public void _jspService(request,response);//JSPService
- 内置对象:
final javax.servlet.jsp.PageContext pageContext; //页面上下文
javax.servlet.http.HttpSession session = null; //Session
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
HttpServletRequest request; //请求
HTTPServletResponse response; //响应
- 输出页面前增加的代码:
response.setContentType("text/html"); //设置响应的页面类型
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
- 以上对象可以在JSP页面中直接使用
- Java代码原封不动,HTML转换为out.write()
JSP基础语法
- 分别导入Servlet,JSP,JSTL表达式,standard标签库的maven依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
-
注释:
<%--xxx--%>
-
JSP表达式:
<%=变量或表达式%>
,将程序的结果输出到客户端- EL表达式:${变量或表达式}
-
JSP脚本片段:
<% Java代码,可以使用JSP内置对象 %>
-
JSP声明:
<%! service方法外的类中的代码 %>
JSP指令
- jsp文件开头加上:
<%@ page...%>
,设置页面参数,导入java包等
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page @improt... %>
-
设置错误页面
-
<%@ page isErrorPage="true" %>
-
<error-page> <error-code>404</error-code> <location>/error/404.jsp</location> </error-page>
-
-
通用页面:header、footer等,通过include导入
-
<%@include file="common/header.jsp"%> <%--将两个页面合二为一,直接是out.write()--%> <jsp:include page="/commen/footer.jsp"/> <%--通过java方法拼接页面,内外变量互不影响--%>
-
九大内置对象
- PageContext
- Request
- Response
- Session
- Application:ServletContext
- config:ServletConfig
- out
- page
- exception
作用域
-
setAttribute("name", "value"),不同对象作用域不同
- pageContext:保存的数据只在一个页面中有效
- request:保存的数据只在一次请求中有效,请求转发会携带这个数据
- session:保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
- application:保存的数据只在服务器中有效,从打开服务器到关闭服务器
-
pageContext.findAttribute("name"):作用域从底层到高层寻找
- page->request->session->application
-
pageContext.setAttribute("name", "value", scope):
- scope:PAGE_SCOPE=1,REQUEST_SCOPE=2,SESSION_SCOPE=3,APPLICATION_SCOPE=4
页面跳转
- pageContext.forward("/index.jsp"):地址栏不会变(只要不是重定向,地址栏都不变)
- 等同于request.getRequestDispatcher("/index.jsp").forward(request, response)
JSP标签、JSTL标签、EL表达式
EL表达式
- Expression Language
- 作用:获取数据、执行运算、获取web开发的常用对象、调用java方法
- 获取表单中的数据:
${param.参数名}
- 获取表单中的数据:
- 形式:${}
JSP标签
-
<jsp:include page="index.jsp"></jsp:include>
-
<jsp:forward page="index.jsp"> <jsp:param name="key1" value="value1"/> <jsp:param name="key2" value="value2"/> </jsp:forward>
- 通过
<%=request.getParameter("key")>
取参数
- 通过
JSTL标签
-
为了HTML标签的补足,自定义了许多标签,标签的功能和Java代码一样
-
核心标签、格式化标签、SQL标签、XML标签
核心标签
- 引用方式:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
<c:out>
:等同于<%=...>
-
<c:set>
:用于保存数据 -
<c:remove>
:用于删除数据 -
<c:if>
:与if相同 -
<c:choose>
,<c:when>
,<c:otherwise>
:与switch相同 -
<c:forEach>
:迭代 -
<c:url>
:创造url