JSP回顾总结

在Javaweb中,Servlet负责后端处理请求并响应数据给客户端,那么Servlet程序是与前端页面肯定要做数据的传递,那么这种交互是怎么实现的?答案是通过JSP。在JSP中可以写前端代码,还可以写Java代码。JSP具有自己的语法。

JSP的全称是Java Server Pages,即Java的服务器页面。
作用是实现前端页面的数据和后端(servlet)数据的交互。

-01- JSP的本质

JSP本质上是一个Servlet程序。
创建一个Javaweb工程,可以在webapp下看到一个index.jsp文件,配置好tomcat,启动。在浏览器访问tomcat会跳转到index.jsp的页面。
此时,打开tomcat安装目录,
进入路径:apache-tomcat-9.0.43\work\Catalina\localhost\ROOT\org\apache\jsp,
可以看到index_jsp.class、index_jsp.java两个文件,
打开后者可以看到“index_jsp extends org.apache.jasper.runtime.HttpJspBase”,而HttpJspBase类继承自HttpServlet类。说明index_jsp是一个Servlet程序。

在webapp目录下,右击 --> new --> JSP/JSPX,创建一个JSP文件。

-02- JSP常用语法

1、声明脚本
格式:<%! 声明Java代码 %>
作用:在JSP中定义java方法、属性等
特点:不会在浏览器的页面上显示出来,仅存在于翻译后的Java类中

<%!
    private String name = "Orange";
    public int sum(){
        return 1+1;
    }
%>

2、表达式脚本
格式:<%=表达式 %>
作用:在浏览器的JSP页面上输出数据(只有此脚本可以在浏览器的页面上输出数据)

<%=sum()%>

3、代码脚本
格式:<% Java语句 %>
作用:在JSP页面中可以编写需要的Java代码

<%
    System.out.println("在控制台输出");
%>

启动tomcat,访问当前jsp页面:
浏览器 =>
在这里插入图片描述
控制台 =>
在这里插入图片描述

-03- JSP内置对象

内置对象指的是Tomcat服务器将JSP页面翻译为Java类之后内部提供的九大对象(无需我们创建,可以直接在JSP中使用)
九大内置对象
request:请求对象
response:响应对象
pageContext:JSP的上下文对象
session:会话对象
application:ServletContext对象
config:ServletConfig对象
out:JSP输出流对象
page:指向当前JSP的对象
exception:异常对象

九大内置对象并不需要全部了解,主要是其中的:
四大域对象
域即作用域,作用范围。
域对象是指可以像Map一样存取数据的对象,四个域对象功能一样,只是对数据的存取范围不同
------------对象------------------------------------------------作用域----------------------------------------------------
pageContext:JSP的上下文对象 --》在当前jsp页面中有效
request:请求对象 --》一次请求中有效
session:会话对象 --》一次会话中有效
application:ServletContext对象 --》整个web工程范围(web的启动到关闭)有效

------------对象------------------------------------------------作用域----------------------------------------------------

创建TestJSP02_1.jsp:

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2022/1/8 0008
  Time: 9:48
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>01</title>
</head>
<body>
<h1>JSP02-1</h1>
<%
    pageContext.setAttribute("key","pageContext");
    request.setAttribute("key","request");
    session.setAttribute("key", "session");
    application.setAttribute("key", "application");
%>
<%--转发--%>
<jsp:forward page="TestJSP02_2.jsp"></jsp:forward>
</body>
</html>

此时pageContext.setAttribute如果报红,那是因为没有在pom.xml中导入jsp的依赖:

		<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>

创建TestJSP02_2.jsp:

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2022/1/8 0008
  Time: 9:48
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>01</title>
</head>
<body>
<h1>JSP02-2</h1>

pageContext域是否有值:<%=pageContext.getAttribute("key")%> <br>
request域是否有值:<%=request.getAttribute("key")%> <br>
session域是否有值:<%=session.getAttribute("key")%> <br>
application域是否有值:<%=application.getAttribute("key")%> <br>

</body>
</html>

访问TestJSP02_1.jsp页面:http://localhost:8080/myservlet/TestJSP02_1.jsp
在这里插入图片描述
可以看到pageContext域对象的值为null,这是因为pageContext只在页面内有效,而这里是从TestJSP02_1转发到了TestJSP02_2,不同页面。
验证其他域对象的作用域:
访问TestJSP02_2.jsp页面:http://localhost:8080/myservlet/TestJSP02_2.jsp
在这里插入图片描述
request域的值为null,因为request在不同的请求中无效。
关掉浏览器,打开重新访问TestJSP02_2.jsp页面:http://localhost:8080/myservlet/TestJSP02_2.jsp
在这里插入图片描述
这次连session域的值也为null,这是因为关闭浏览器之后就结束一次会话了,重新访问已经是不同会话了。
而application域是整个web工程,只要tomcat一直启动着,那么就可以获取到application的值。

-04-JSP的常用标签

1.静态包含:一个jsp页面可以包含另一个jsp页面
<%@include file=""%>
其中file属性设置要包含的JSP页面,以/打头,代表http://ip:port/工程路径/,对应web目录

2.动态包含:一个jsp页面可以包含另一个jsp页面,动态包含还可以传递参数
<jsp:include page=""></jsp:include>
其中page属性设置要包含的JSP页面,与静态包含一致

代码示例:
创建一个TestJSP03head.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2022/1/8 0008
  Time: 9:48
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>head</title>
</head>
<body>
___\\\\__<br>
---`|头部|`--<br>
-----\-/----<br>
</body>
</html>

创建一个TestJSP03body.jsp,在TestJSP03body中包含TestJSP03head(静态包含)

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2022/1/8 0008
  Time: 9:48
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>body</title>
</head>
<body>
<%@include file="TestJSP03head.jsp"%>
 /-----------\<br>
|-|\-body-/|-|<br>
|-|-|__|__|-|-|<br>
|_|-|__|__|-|_|<br>
<jsp:include page="TestJSP03foot.jsp">
    <jsp:param name="key" value="----foot----"/>
</jsp:include>
</body>
</html>

创建一个TestJSP03foot.jsp,在TestJSP03body中动态包含TestJSP03foot

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2022/1/8 0008
  Time: 9:48
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>foot</title>
</head>
<body>
---|-|--|-|--<br>
---|-|--|-|--<br>
---|-|--|-|--<br>
---|-|--|-|--<br>
<%=request.getParameter("key")%>
</body>
</html>

启动web工程,访问TestJSP03body:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值