一.JSP原理:
原因分析:
当我们通过浏览器访问1.jsp时,服务器首先将1.jsp翻译成一个_1_jsp.class,在Tomcat服务器的work\Catalina\localhost\项目名\org\apache\jsp目录下可以看到_1_jsp.class的源代码文件_1_jsp.java
我们可以看到,_1_jsp这个类是继承 org.apache.jasper.runtime.HttpJspBase这个类的,通过查看Tomcat服务器的源代码,可以知道在apache-tomcat-8.0.36-src\java\org\apache\jasper\runtime目录下存在HttpJspBase这个类的源代码文件,如下图所示:
HttpJspBase类是继承HttpServlet的,所以HttpJspBase类是一个Servlet,而_1_jsp又是继承HttpJspBase类的,所以_1_jsp类也是一个Servlet,所以当浏览器访问服务器上的1.jsp页面时,其实就是在访问_1_jsp这个Servlet,_1_jsp这个Servlet使用_jspService这个方法处理请求。
二。
第一次执行:
*.jsp文件。*.jsp文件通过转换变为*.java文件。*.java文件经过编译后,形成*.class文件。*.class文件。第二次执行:
*.class文件,所以不在需要转换和编译的过程。修改后执行:
三。JSP基础语法:
1.JSP脚本表达式
<%= 变量或表达式 %> 作用:脚本表达式,它的作用就是向浏览器输出数据
2.脚本片段:
<% 多行java代码 %> 在<% %>中可以定义变量、编写语句,但不能定义方法
3.JSP声明:
<%! java代码%> JSP页面中编写的所有代码,默认会翻译到servlet的service方法中, 而Jsp声明中的java代码被翻译到_jspService方法的外面
(1) page 指令 include指令 taglib指令
(2) JSP指令的基本语法格式: %@ 指令 属性名="值" %>
(3). page指令
page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,
为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置
属性:
<jsp:include>指令 动态包含 面试题:静态包含和动态包含有什么区别? 答:静态包含是在编译时包含,会把包含到的所有jsp编译成一个Servlet。而动态包含是运行时包含,包含过程中,涉及到的所有jsp对应单独的一个Servlet。而且静态包含性能好的多。
(5)..taglib指令
taglib指令用于在JSP页面中导入标签库。
注意:
四.jsp运行原理和九大隐式对象
1.运行原理:
每个JSP页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。
2.九大隐式对象:
| No. | 内置对象 | 类型 |
|---|---|---|
| 1 | pageContext | javax.servlet.jsp.PageContext |
| 2 | request | javax.servlet.http.HttpServletRequest |
| 3 | response | javax.servlet.http.HttpServletResponse |
| 4 | session | javax.servlet.http.HttpSession |
| 5 | application | javax.servlet.ServletContext |
| 6 | config | javax.servlet.ServletConfig |
| 7 | out | javax.servlet.jsp.JspWriter |
| 8 | page | java.lang.Object |
| 9 | exception | java.lang.Throwable |
五。* jsp属性范围
| No. | 方法 | 描述 |
|---|---|---|
| 1 | public void setAttribute(String name,Object value) | 设置属性 |
| 2 | public object getAttribute(String name) | 取得属性 |
| 3 | public void removeAttribute(String name) | 删除属性 |
<jsp:include>标签其语法为:
<jsp:include page="relativeURL | <%=expression %>" flush="true|false" />
<jsp:forward>标签其语法为:
<jsp:forward page="relativeURL | <%=expression%>" />
<jsp:param>标签 语法1
<jsp:include page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>
语法2
<jsp:forward page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>
原文:https://www.cnblogs.com/betterprimebestus/p/8901409.html