目录
6.jsp 中 out 输出流 和 response.getwriter()输出流
1.JSP技术的基础概念
1.1 什么是 JSP?
JSP(全称 Java Server Pages)是由 Sun 公司专门为了解决动态生成 HTML 文档的技术。
1.2 什么是JSP的主要作用?
JSP的主要作用是代替Servlet程序回传html页面的数据。
1.3 为什么使用JSP?
因为Servlet程序回传html页面数据是一件非常繁琐的事情。开发成本和维护成本都比较高。
1.3 如何创建一个 jsp 动态页面程序 ?
创建过程(略),放置于web目录下,访问方式跟html类似。
2.jsp 的运行原理(要求知道)
jsp 的本质 ,其实是一个 Servlet 程序。
首先我们去找到我们 Tomcat 的目录下的 work\Catalina\localhost 目录。当我们发布 08_jsp 工程。并启动 Tomcat 服务器后。我们发现在 work\Catalina\localhost 目录下多出来一个 08_jsp 目录。
然后,定位到部署地址,发现 work\Catalina\localhost 目录下多出来一个08_jsp 目录,且08_jsp内部是空的,但是访问pringHtml.jsp文件后,08_jsp下马上会生成 org\apache\jsp 目录。 并且在会中有两个文件。
注意:如果已经部署过的项目,需要先定位至部署地址删除原有缓存文件,以便观察。
pringHtml _jsp.class 文件很明显是 index_jsp.java 源文件编译后的字节码文件。那么 pringHtml _jsp.java 是个什么内容呢 ?生成的 java 文件名,是以原来的文件名加上 _jsp 得到。 xxxx_jsp.java 文件的名字
我们打开 pringHtml _jsp.java 文件查看里面的内容:发现,生成的类继承于 HttpJspBase 类。这是一个 jsp 文件生成 Servlet 程序要继承的基类!
于是,我们关联源代码。去查看一下 HttpJspBase 类的内容。从源码的类注释说明中,我们发现。 HttpJspBase 这个类就是所有 jsp 文件生成 Servlet 程序需要去继承的基类。并且这个 HttpJspBase 类继承于 HttpServlet 类。所以 jsp 也是一个 Servlet 小程序。
总结:通过翻译的java源代码我们就可以得到结果:JSP就是Servlet程序。大家也可以通过去观察翻译出来的Servlet程序员的源代码,不难发现。其底层实现,也是通过输出流。把HTML页面数据回传给客户端。
/*
* Generated by the Jasper component of Apache Tomcat
* Version: Apache Tomcat/9.0.58
* Generated at: 2022-04-29 11:53:59 UTC
* Note: The last modified time of this file was set to
* the last modified time of the source file after
* generation to assist with modification tracking.
*/
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class pringHtml_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {
private static final javax.servlet.jsp.JspFactory _jspxFactory =
javax.servlet.jsp.JspFactory.getDefaultFactory();
private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;
private static final java.util.Set<java.lang.String> _jspx_imports_packages;
private static final java.util.Set<java.lang.String> _jspx_imports_classes;
static {
_jspx_imports_packages = new java.util.HashSet<>();
_jspx_imports_packages.add("javax.servlet");
_jspx_imports_packages.add("javax.servlet.http");
_jspx_imports_packages.add("javax.servlet.jsp");
_jspx_imports_classes = null;
}
private volatile javax.el.ExpressionFactory _el_expressionfactory;
private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;
public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
return _jspx_dependants;
}
public java.util.Set<java.lang.String> getPackageImports() {
return _jspx_imports_packages;
}
public java.util.Set<java.lang.String> getClassImports() {
return _jspx_imports_classes;
}
public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
if (_el_expressionfactory == null) {
synchronized (this) {
if (_el_expressionfactory == null) {
_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
}
}
}
return _el_expressionfactory;
}
public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
if (_jsp_instancemanager == null) {
synchronized (this) {
if (_jsp_instancemanager == null) {
_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
}
}
}
return _jsp_instancemanager;
}
public void _jspInit() {
}
public void _jspDestroy() {
}
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
final java.lang.String _jspx_method = request.getMethod();
if ("OPTIONS".equals(_jspx_method)) {
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
return;
}
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允