[java]28、JSP

2022-03-13  本文已影响0人  史记_d5da

1、概述

JSPJavaServer Pages 的简称, 是一种动态网页技术标准

1.1、JSP 的基本使用

指令
<%@ page %>:配置当前页面信息
<%@ include %>:包含其他页面
<%@ taglib %>:导入标签库
输出
<%= 需要输出的内容 %> (代码最终都运行在 _jspService 方法中)

<h1><%=age%>></h1> // 输出年龄

等价于 out.print (需要输出的内容)
嵌入 java 代码
<% Java代码 %> (代码最终都运行在 _jspService 方法中)

<%
    for (int i = 0; i < 10; i++) {
%>
    <h1>我是好学生</h1>
<%
    }
%>

注释
<%-- 注释内容 --%>
HTMLCSSJS 注释照常使用
声明
<%! 声明成员变量、方法 %>

<%!
    private int age = 10;
    public void test() {
        System.out.println("123");
    }
%>

JSP 的本质是 Servlet
1、查看Tomcat 启动日志,查看CATALINA_BASE

CATALINA_BASE
打开对应的文件路径可以看到test.jsp 最终转换为 test_jsp.java 文件
test_jsp.java
2、打开 test_jsp 文件, test_jsp 的继承关系:
test_jsp => org.apache.jasper.runtime.HttpJspBase => jakarta.servlet.http.HttpServlet
_jspService
3、所有 test.jsp 的请求都会调用 _jspService 方法

2、Servlet + JSP

2.1、Servlet + JSP的请求过程
Servlet + JSP
2.2、taglibs 配置

1、Servlet + JSP的相结合,需要使用到 ApacheTaglibs
如果使用其核心标签库,只需要下载2个jar包即可
jakarta.servlet.jsp.jstl-2.0.0.jarjakarta.servlet.jsp.jstl-api-2.0.0.jar
2、将 jar 包加入到WEV-INF/lib 中,并且右击选择 Add as Library

Add as Library
或者在 Manven 中添加依赖
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>2.0.0</version>
</dependency>

3、使用 taglib指令导入 JSTL 核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

2.2、EL 表达式、JSTL 标签库

1、ELExpression Language的简称
${obj.property}${obj["property"]}${obj[propertyVar]}
emptynot empty
2、JSTLJSP Standard Tag Library 的简称,译为“JSP标准标签库”,由 ApacheJakarta 小组维护
3、EL 表达式、 JSTL标签库都可以简化JSP代码
4、常用标签
<c:if test="条件">
<c:forEach items="集合" var="元素" varStatus="循环相关的信息">

<c:choose><c:when test="条件"><c:otherwise>

2.3、转发(forward)

RequestDispatcher 进行数据转发代码

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      request.setAttribute("customers", getCustomers());
      // 转发到list.jsp页面进行数据展示
      RequestDispatcher dispatcher = request.getRequestDispatcher("/page/list.jsp");
      dispatcher.forward(request, response);
}
数据转发链条

1、转发只能在同一个Context中进行请求转发
2、在同一次请求中,可以转发多次,形成一个转发链条

3、在转发链条上,所有的attribute都存储在头部的 Request对象中

2.4、重定向

1、重定向:服务器通知客户端重新发送请求到新的任意URL地址

重定向
重定向请求

3、转发 VS 重定向

转发代码:request.getRequestDispatcher("/page/list.jsp").forward(request, response);

重定向代码:response.sendRedirect("/crm2/list");

4、JSP的9大内置对象

jsp的9大内置对象
创建main.jsp运行tomcat
<body>
<%
    System.out.println(request);
    System.out.println(response);
    System.out.println(session);
    System.out.println(page);
    System.out.println(pageContext);
    System.out.println(out);
    System.out.println(config);
%>
// http://localhost:8080/test/main.jsp?name=sj
<input type="text" value="${param.name}">
</body>

在控制台找到CATALINA_HOME目录/work/Catalina/localhost/test/test项目中找到main_jsp.java文件。

// 用于共享数据,仅限于当前页面
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;

4个域对象:pageContextrequestsessionapplication
共享范围从左至右,逐渐增大
利用EL表达式从JSP域对象中获取数据
EL表达式可以通过param,直接获取参数

jsp对象
上一篇 下一篇

猜你喜欢

热点阅读