动力节点JavaWeb视频
从底层源码开始讲起, 讲解的非常详细,对比过尚硅谷的视频,推荐动力节点。
视频是直播的录像,有些时候比较啰嗦,尤其到EL表达式之后,1小时的内容能讲3小时。
系列文章目录
- 第一章 配置环境、配置IDEA
- 第二章 GenericServlet源码解析 特别重要
- 第三章 HttpServlet
- 第四章 HttpServletRequest
- 第五章 重定向 使用注解简化配置文件
- 第六章 JSP (上)
- 第七章 JSP (下)EL表达式 JTSL标签库
- 第八章 Session、Cookie
- 第九章 Filter过滤器、Listner 监听器
- JSP文件的执行过程
- 源码分析
- JSP文件的书写规范
- JSP示例
- JSP指令集Page的属性
- JSP 的九大内置对象
JavaServer Page的缩写。(基于Java语言实现的服务器端的页面)
功能:JSP做数据的展示;Servlet做逻辑处理、业务处理、连接数据库、数据处理······。
- 创建新的Module,启动服务器,在浏览器打开根路径地址,系统会自动执行框架中自动生成的index.jsp文件。此时页面上会显示 $END$
打开下面的路径:
继续从上面的路径进入到:
4bd61bbb-e235-4c43-8474-40431d3219c7workCatalinalocalhostjsporgapachejsp
- 可以看到以jsp文件的文件名开头的两个文件:
- 系统在执行jsp文件时,就是在执行index_jsp.class文件。
- jsp文件执行过程总结:
用户访问到jsp文件时:Tomcat会将jsp文件按照JSP规范将其翻译为java文件,而后编译成为.class文件,然后执行。
打开翻译后的.java文件
- 继承关系:继承自org.apache.jasper.runtime.HttpJspBase
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
- 从HttpJspBase类中可以看到继承自HttpServlet
public abstract class HttpJspBase extends HttpServlet
- HttpServlet继承自Servlet,所以index_jsp类最终继承的是Servlet
- Servlet在创建时先执行init()和service()。
- 同样,HttpJspBase类被Tomcat调用时,也会执行init()和service()。
- 通过HttpJspBase类中的service()会调用子类也就是index_jsp类中的_jspService()。
总结: .jsp文件中的所有内容,最终都是放在_jspService()方法体内执行的。
JSP文件的书写规范-
<%@ page 属性=值 %>:Page指令
contentType属性:浏览器输出中文乱码,与response.setContentType("text/html;charset=UTF-8");功能相同contentType="text/html;charset=UTF-8">
-
<% Java代码 %>:使用Java代码
Java代码只能使用可以在方法体内使用的代码。
本质:JSP文件翻译为.java文件时,把代码放入到service()方法体中。 -
字符串&HTML:不需要符号,与HTML文件格式一样
所有没有被JSP中定义的特殊符号包裹的字符,都会被当成字符串,通过out.write("字符串");输出到浏览器中,HTML标签会被浏览器解释执行。
-
<%-- 注释 --%>:注释
注释只会出现在JSP文件中,翻译后的java文件中是没有的。
-
<%=(表达式) %>:输出变量或表达式
翻译为:out.print(表达式);表达式可以是变量
-
<%! Java代码 %>:Java代码将被翻译到service()方法体外
Java代码成为类的一部分:类成员属性、类的成员方法。jsp也是Servlet,生命周期会一直延续到服务器关闭,涉及线程安全问题,不建议使用
jsp文件:
<% for (int i = 0; i < 10; i++) { %>
这是for循环输出的:i = <%= i %>
<%}%>
翻译为java后,在Service方法中的代码:
out.write("n");
for (int i = 0; i < 10; i++) {
out.write("n");
out.write("这是for循环输出的:i = ");
out.print(i);
out.write("n");
}
out.write("n");
out.write("n");
JSP指令集Page的属性
- 设置响应内容的类型和字符集
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
- 开启或关闭session
<%@ page session="false|true" %>
- 导包
<%@ page import="java.util.*" %>
- 设置发生错误时要跳转的页面
<%@ page errorPage="/error.jsp" %>
- 当前页面是否为错误页面
发生异常时只会显示错误页面的内容,不会显示具体的异常信息,需要使用exception将错误信息打印在控制台,方便调试。
<%@ page isErrorPage="true" %> <% exception.printStackTrace(); %>
- 忽略EL表达式
在这里插入代码片JSP 的九大内置对象
- 域类型:
作用的范围:页面域 < 请求域 < 会话域 < 应用域。优先使用最小的域
都有setAttribute () getAttribute() removeAtrribute()方法用来传递数据。
jakarta.servlet.jsp.PageContext pageContext 页面域 jakarta.servlet.http.HttpServletRequest request 请求域 jakarta.servlet.http.HttpSession session 会话域 jakarta.servlet.ServletContext application 应用域
- 输出类型
jakarta.servlet.jsp.JspWriter out 输出到屏幕显示 jakarta.servlet.http.HttpServletResponse response 输出给浏览器
- 异常
java.lang.Throwable exception
- Servlet 配置信息
jakarta.servlet.ServletConfig config
- 页面(说是没用,暂时不知道干什么用的)
java.lang.Object page



