致敬即将退出历史舞台的JSP

致敬即将退出历史舞台的JSP

        今天小课堂本来是准备讲JSP的隐藏对象的,以前一直以为页面这种东西都是切图仔的事情,JSP的东西我们不用管,关于几个属性的介绍还是比较简单的。赶鸭子上架,临时看了资料,随着查阅的深入,我发现JSP不是我想象的那么简单,在html文件中使用java,表现层实现页面和后台的分离。虽然说JSP技术已经不再是当今的主旋律,但它在web程序设计中所体现的思想和实现技术还是值得我们探讨一下。


一、JSP是什么

       我感觉想要准确的给一个名词下定义是很难的,对于JSP尤为如此,因为他的表现形式和它的本质,大相径庭。想要认识JSP是什么,还是先认识JSP文件在web应用中是怎么执行的,他的作用是什么。

           JSP的执行原理和流程:

 假设:容器=具体的Jsp引擎

Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面

   1 -----   客户通过浏览器向服务器端的JSP页面发送请求。、


   2 -----  容器接受到客户请求后,会检查JSP文件对应编译后的Servlet文件(.class)是否存在。

            如果不存在,则跳转到第 4 步,否则执行下一步。

 

   3 ----- 容器检查JSP页面是否有更新(修改),没有更新,则跳转到第 5 步,否则执行下一步。

 

   4 ----- 容器将JSP文件转换为Servlet类源文件(.java)。(此步会检查和捕获JSP语法错误


   5 ----- 容器将Servlet源文件(.java)编译成相应的字节码(.class)文件。(会检查和捕获Java语法错误)

 

   6 ----- 容器将字节码(.class)文件加载到内存。

 

   7 ----- 容器实例化Servlet(调用构造函数),然后调用初始化方法(jspInit())初始化Servlet。到此为止,Servlet对象真正成为一个Servlet,准备就绪,可以处理客户的请求了

 

   8 ----- 容器创建一个新的线程来运行Servlet并运行Servlet的_jspService()方法处理客户的请求。

 

   9 ----- Servlet生成并向客户返回一个响应(或把请求转发给另一个Web应用组件处理)。


我们结合一个简单的JSP页面,看看转译的过程

hello  world  

<html>
<head>
   <title>欢迎页</title>
</head>
<body>
<h2>hello world</h2>
</body>
</html>

我们的JSP页面转译的.java和.class 文件会保存在Tomcat的work目录下


这是转译后的.java

/*
* Generated by the Jasper component of Apache Tomcat
* Version: Apache Tomcat/7.0.88
* Generated at: 2018-06-06 15:32:53 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 index_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {

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 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 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.IOExceptionjavax.servlet.ServletException {

final javax.servlet.jsp.PageContext pageContext;
   javax.servlet.http.HttpSession session = null;
   final javax.servlet.ServletContext application;
   final javax.servlet.ServletConfig config;
   javax.servlet.jsp.JspWriter out = null;
   final java.lang.Object page = this;
   javax.servlet.jsp.JspWriter _jspx_out = null;
   javax.servlet.jsp.PageContext _jspx_page_context = null;


   try {
response.setContentType("text/html");
     pageContext = _jspxFactory.getPageContext(
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值