JSP底层探究

首先书写一个jsp页面:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>查询所有用户</title>
</head>
<body>
    <h1>用户列表</h1>
<table>
    <c:forEach items="${users}" var="user">
        <tr>
            <td>${user.id}</td>
            <td>${user.userName}</td>
            <td>${user.birthDay}</td>
            <td>${user.sex}</td>
            <td>${user.address}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

运行过后我们得到他解析后生成的文件:
jsp解析后生成的文件
打开后我们可以看到他继承了HTTPJSPBase
继承HttpJspBase
这个类我们可以看出是Apache的Tomcat帮我们实现的:
然后我们在去找Tomcat的源代码
在这里插入图片描述
打开后:
HTTPJSPBase
我们可以发现,他实际上是继承了HTTPServlet,这么说他本质是是一个Servlet,他对HttpServlet进行了封装;
我们再回来看看jsp解析后的文件:
我们发现有以下几个熟悉的方法:
jsp的方法
分别是:_jspInit(),_jspDestroy(),_jspService(),对应的是Servlet的init(),destroy(),service()三个生命周期方法,从而进一步印证了我们刚刚的说法;

在_jspService()方法中我们可以看到如下8个常量:
jsp内置对象
这8个常量便是我们熟知的JSP9个内置对象中的8个
因为这里定义了常量,所以我们在jsp中能够直接使用;
最后的exception对象需要标志异常页面才能够使用;
我们写一个异常页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" session="false" isErrorPage="true" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>登录失败</title>
</head>
<body>
<h1 style="color: red">服务器开了小差</h1>
</body>
</html>

这里就多了一个exception对象可以使用了;
异常页面编译后文件

发布了14 篇原创文章 · 获赞 1 · 访问量 119

猜你喜欢

转载自blog.csdn.net/zhijingege/article/details/103964029
今日推荐