JSP转译成Servlet详细过程

RV1126平台librga图像旋转裁剪实战 本文详细介绍了在rv1126平台上使用librga库实现图像旋转和裁剪的方法。首先解释了librga的基本概念和关键对象,包括源图像、目标图像和操作参数。随后分步骤说明了初始化设置、缓冲区创建、裁剪区域定义(通过坐标和尺寸参数)以及旋转操作(支持常见角度)。提供了完整的示例代码演示如何组合裁剪和旋转操作,并强调了性能优化、错误处理、格式支持等注意事项。通过硬件加速的librga,可以在rv1126平台上高效完成图像处理任务。 阅读详情

JSP转译成Servlet详细过程

JSP转译成Servlet详细过程

 

JSP是Servlet的扩展,在没有JSP之前,就已经出现了Servlet技术。Servlet是利用输出流动态生成HTML页面,包括每一个HTML标签和每个在HTML页面中出现的内容。

    由于包括大量的HTML标签、大量的静态文本及格式等,导致Servlet的开发效率极为低下。所有的表现逻辑,包括布局、色彩及图像等,都必须耦合在Java代码中,这的确让人不胜其烦。JSP的出现弥补了这种不足,JSP通过在标准的HTML页面中插入Java代码,其静态的部分无须Java程序控制,只有那些需要从数据库读取并根据程序动态生成信息时,才使用Java脚本控制。

    从表面上看,JSP页面已经不再需要Java类,似乎完全脱离了Java面向对象的特征。事实上,JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例——JSP页面由系统编译成Servlet,Servlet再负责响应用户请求。JSP其实也是Servlet的一种简化,使用JSP时,其实还是使用Servlet,因为Web应用中的每个JSP页面都会由Servlet容器生成对应的Servlet。对于Tomcat而言,JSP页面生成的Servlet放在work路径对应的Web应用下。

    看下面一个简单的JSP页面:

    <!-- 表明此为一个JSP页面 -->

    <%@ page contentType="text/html; charset=gb2312" language="java" %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

    <HTML>

    <HEAD>

    <TITLE>第一个JSP页面</TITLE>

    </HEAD>

    <BODY>

    <!-- 下面是Java脚本 Scriptlet-->

    <%for(int i = 0 ; i < 10; i++)

    {

    out.println(i);

    %>

    <br>

    <%}%>

    </BODY>

    </HTML>


    当启动Tomcat之后,可以在Tomcat的Catalinalocalhostjsptestorgapachejsp目录下找到如下文件(假如Web应用名为jsptest,上面JSP页的名为test1.jsp):test1_jsp.java和test1_jsp.class。这两个文件都是Tomcat生成的,Tomcat根据JSP页面生成对应Servlet的Java文件及class文件。

    下面是test1_jsp.java文件的源代码,这是一个特殊的Java类,是一个Servlet类:

    //JSP页面经过Tomcat编译后默认的包(不同的servlet容器提供商生成的servlet文件是不同的)

    package org.apache.jsp;

    import javax.servlet.*;

    import javax.servlet.http.*;

    import javax.servlet.jsp.*;

    //继承HttpJspBase类,该类其实是个HttpServlet的子类(jasper是tomcat的jsp engine)

    public final class test1_jsp extends org.apache.jasper.runtime.HttpJspBase

         implements org.apache.jasper.runtime.JspSourceDependent

    {

         private static java.util.Vector _jspx_dependants;

         public java.util.List getDependants() {

             return _jspx_dependants;

         }

         //用于响应用户的方法

         public void _jspService(HttpServletRequest request,

            HttpServletResponse response)

            throws java.io.IOException, ServletException

         {   //built-in objects(variavles) are created here.

             //获得页面输出流

             JspFactory _jspxFactory = null;

             PageContext pageContext = null;

             HttpSession session = null;

             ServletContext application = null;

             ServletConfig config = null;

             //获得页面输出流

             JspWriter out = null; //not PrintWriter. JspWriter is buffered defautly.

             Object page = this;

             JspWriter _jspx_out = null;

             PageContext _jspx_page_context = null;

             //开始生成响应

             try

             {

                 _jspxFactory = JspFactory.getDefaultFactory();

                //设置输出的页面格式

            response.setContentType("text/html; charset=gb2312");

            pageContext = _jspxFactory.getPageContext(this, request,

            response, null, true, 8192, true);

            _jspx_page_context = pageContext;

            application = pageContext.getServletContext();

            config = pageContext.getServletConfig();

            session = pageContext.getSession();

            //页面输出流


out = pageContext.getOut();

            _jspx_out = out;

            //输出流,开始输出页面文档

            out.write("rn");

            //下面输出HTML标签

            out.write("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0

            Transitional//EN">rn");

            out.write("<HTML>rn");

            out.write("<HEAD>rn");

            out.write("<TITLE>first Jsp</TITLE>rn");

            out.write("</HEAD>rn");

            out.write("<BODY>rn");

            //页面中的循环,在此处循环输出

            for(int i = 0 ; i < 10; i++)

            {

             out.println(i);

             out.write("rn");

             out.write("<br>rn");

            }

            out.write("rn");

            out.write("</BODY>rn");

            out.write("</HTML>rn");

            out.write("rn");

           }

           catch (Throwable t)

           {

            if (!(t instanceof SkipPageException))

            {

               out = _jspx_out;

               if (out != null && out.getBufferSize() != 0)

                 out.clearBuffer();

               if (_jspx_page_context != null) _jspx_page_context.handle

               PageException(t);

            }

          }

           finally

         {

           if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_

           page_context);

        }

      }

    }

    根据图2.1的执行效果,再次对比test1.jsp和test1_jsp.java文件,可得到一个结论:该JSP页面中的每个字符都由test1_jsp.java文件的输出流生成。

    根据上面的JSP页面工作原理图,可以得到如下四个结论:

    — JSP文件必须在JSP服务器内运行。

    — JSP文件必须生成Servlet才能执行。

    — 每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成Servlet。

    — JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准HTML页面。


    JSP和Servlet会有如下转换:

    - JSP页面的静态内容、JSP脚本都会转换成Servlet的xxxService()方法,类似于自行创建Servlet时service()方法。

    - JSP声明部分,转换成Servlet的成员部分。所有JSP声明部分可以使用private,protected,public,static等修饰符,其他地方则不行。

    - JSP的输出表达式(<%= ..%>部分),输出表达式会转换成Servlet的xxxService()方法里的输出语句。

    - 九个内置对象要么是xxxService()方法的形参,要么是该方法的局部变量,所以九个内置对象只能在JSP脚本和输出表达式中使用。// 不能在jsp Declaration中使用

Java开源海外跨境电商购物商城源码,TikToK商城系统源码,外贸商城在线交易 最近很火的一款商城源码,朋友分享给我的,完整版,java开源代码,带有非常详细的搭建教程,文件都一个多G,喜欢的可以下载来研究研究!3、创建mall 数据库并导入数据,数据库名用户名为:mall 数据库密码保持为:XXKytcACPX3GbdsH。8、进入cd /data/deploy/mall-tool/目录执行./build.sh脚本。7、宝塔ssh进入cd /data/deploy/mall/ 执行./build.sh脚本。2、安装宝塔环境:安装 Redis、MySQL5.7、Ngin1.2。 阅读详情

相关推荐

遥感图像融合实战:5分钟搞懂全色与多光谱图像如何提升分辨率(附Python代码)

本文通过实战案例,详细解析了如何利用全色锐化技术融合全色与多光谱遥感图像,以提升图像分辨率。文章深入浅出地介绍了核心概念、环境配置、经典GS融合算法的Python代码实现,并对比了不同算法的优劣,最后提供了效果评估方法与实战陷阱分析,帮助读者快速掌握遥感图像融合的关键技术。

weixin_29041195的博客 396

JSP与Servlet的关系

1.定义 JSP是Sun 公司指定的一种服务器端动态页面技术的组件规范,Jsp是以“.jsp”为后缀的文件,在该文件中主要是html 和少量的java 代码。jsp 文件在容器中会转换成Servlet中执行。 Servlet是Sun公司指定的一种用来扩展Web服务器功能的组件规范,属于服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。 2.区别与联系 JSP更侧重于前端页面显示,Servlet更侧重于业务逻辑。 JSP经编译后就变成了Servlet。(JSP的本质就是Servl

weixin_51748707的博客 4283

Pointnet++改进90:2025最新改进模块-EVA模块

本教程提出了一种改进PointNet++特征提取模块的方法,通过在PointNetSetAbstraction模块中加入NAMAttention注意力机制,显著提升了模型性能。具体改进包括:1)新建eva.py文件,实现了包含SDLSKA、CKS等关键组件的EVA模块;2)在pointnet2_utils.py中添加Conv和PointNetSetAbstractionAttention类,整合注意力机制;3)修改pointnet2_sem_seg.py模型结构。这种改进方法降低了实现难度,同时保持了33F

AIcurator的博客 361

jsp和servlet的关系?

综上所述,JSP 和 Servlet 在 Java Web 开发中扮演着不同的角色,但它们常常一起使用,协同工作来实现动态网页的生成和交互。Servlet 用于处理请求和执行业务逻辑,而 JSP 用于呈现最终的 HTML 页面。JSP 和 Servlet 可以协同工作:通常,Servlet 用于处理请求、执行业务逻辑和数据访问,而 JSP 用于呈现最终的 HTML 页面。JSP 提供更方便的页面编写方式:相比于在 Servlet 中嵌入大量的 HTML 代码,JSP 提供了一种更方便的方式来编写页面。

weixin_44943389的博客 1364

Codex 100个真实案例 - 用AI自动生成API测试用例(接口测试全覆盖)

API 测试是保障后端质量的关键环节,但手写测试用例既枯燥又容易遗漏。本案例将展示如何用 Codex 从 Swagger/OpenAPI 规范文档自动生成 pytest 测试用例——包括正常流程测试、边界值测试、异常参数测试、性能压力测试,还能自动生成 Mock 数据和精美的 HTML 测试报告。全程自然语言驱动,让 API 测试覆盖率从 0 飙到 90%+!

yueyeguzhuo的专栏 271

用urdf给自己的ROS小车编写模型

3.3 使用urdf编写自己的ROS小车模型 3.3.1 常见的ROS小车结构有哪些? 下面就是常见的ROS小车,相信在大家的脑海里已经有了自己小车的样子,下面我和大家一起使用urdf对ros小车建模。 这里只对urdf进行简单介绍,然后就带大家使用urdf最基础的标签,建立机器人的urdf机器人模型。关于更多细节,请参看官网:http://wiki.ros.org/urdf/Tutorials 3.3.2 什么是urdf?建模的原因? 什么是urdf? URDF(Unified Robot Descri

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

jsp编译成servlet文件的分析

JSP是Servlet的扩展,在没有JSP之前,就已经出现了Servlet技术。Servlet是利用输出流动态生成HTML页面,包括每一个HTML标签和每个在HTML页面中出现的内容。     由于包括大量的HTML标签、大量的静态文本及格式等,导致Servlet的开发效率极为低下。所有的表现逻辑,包括布局、色彩及图像等,都必须耦合在Java代码中,这的确让人不胜其烦。JSP的出现弥补了这种不足

ld513508088的专栏 6170

利用R批量计算相关系数

批量求相关系数

weixin_52073820的博客 1459

Jsp和Servlet的关系(通俗易懂)

文章目录一、JSP的概念及作用二、Servlet的问题三、JSP的简单创建四、JSP与Servlet的联系与区别五、JSP实现原理 一、JSP的概念及作用 JSP是简化的Servlet设计,在HTML标签中嵌套Java代码,用以高效开发Web应用的动态网页。在仅使用Servlet的web应用开发中,部分Servlet代码通过使用打印语句打印HTML标签来在浏览器中显示页面,而JSP可以代替显示页面的Servlet。 二、Servlet的问题 在学习JSP之前,服务器通过Servlet响应客户端界面,会有一些

weixin_41121133的博客 2万+

【STM32项目】基于AI技术的多功能消防机器人(完整工程资料源码)

机器人通过巡逻扫描环境空间与障碍物、定位导航、探测物体/环境进行建模/自动地图测绘、扫描火焰、获取温湿度大小、获取空气安全情况来判断当前环境地点是否安全,检测到温度过高或检测到易燃、烟雾、有毒气体或摄像头识别到火焰时能够通过高压水泵喷射器来实现火焰隔离工作,蜂鸣器进行现场鸣笛报警,同时将当前环境温湿度大小、空气情况、环境地图、是否安全信息,将各个传感器来接收获取到的信息,实时发送到用户手机中的微信小程序,实现与用户远程监视功能,用户同时也能通过手机与电脑远程下发命令来操控机器人来实现交互功能

嵌入式技术开发 1万+

【Python3教程】Python3高级篇之uWSGI 安装配置

本文介绍了在Python 3环境中安装和配置uWSGI的完整流程,涵盖基本安装、Flask/Django应用部署、Nginx集成以及systemd管理等关键环节。主要内容包括:uWSGI的安装前提条件,创建简单WSGI应用,编写uWSGI配置文件(.ini格式),与Nginx配合实现生产环境部署,以及使用systemd实现服务管理。文章还提供了常见Web框架(Flask、Django)的部署示例和高级配置建议,如负载均衡、HTTPS设置等。最后列出了权限、端口占用等常见问题的解决方案,为开发者提供了一套完整

No8g攻城狮的博客 440

JSP和Servlet的关系是什么

定义:JSP是一种基于Java技术的服务器端网页开发技术,它将Java代码嵌入到HTML页面中,通过JSP引擎生成动态网页。功能:JSP允许开发者在HTML页面中嵌入Java代码片段,这些代码片段在服务器端执行,从而生成动态的网页内容。JSP还提供了丰富的标签库和自定义标签功能,进一步简化了页面开发。Servlet定义:Servlet是运行在服务器端的Java程序,用于处理HTTP请求和生成HTTP响应。它是Java EE规范的一部分,提供了一种灵活和可编程的方式来处理Web应用程序的业务逻辑和交互。

m0_46552684的博客 1302

实现两端固支梁热力耦合的有限元分析

在本文中,我们将使用Matlab实现两端固支梁的热力耦合有限元分析。我们假设梁的材料是均匀的,梁的截面积为1,长度为1,两端固支,且受到均匀分布的热荷载。接下来,我们需要组装全局刚度矩阵和热传导矩阵。对于两个相邻的元素,它们共享一个节点,因此需要使用连接矩阵将局部矩阵组装成全局矩阵。接下来,我们需要定义元素刚度矩阵和热传导矩阵。然后,我们需要定义载荷向量。然后,我们需要定义边界条件。在这个例子中,梁的两端固支,因此我们需要将两端节点的位移限制为0。最后,我们需要解决线性方程组,得到节点的位移和温度分布。

CyberSparkZ的博客 396

JSP转译成Servlet过程

JSP 编译和运行过程与JSP转移源码简单分析 Web容器处理JSP文件请求的执行过程主要包括以下4个部分: 1.      客户端发出Request请求 2.      JSP Container 将JSP转译成Servlet的源代码 3.      将产生的Servlet源代码经过编译后,并加载到内存执行 4.      把结果Response(响应)至客户端 很多人都会认为JSP的执行性能会...

lifengzi9527的专栏 231

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JSP转译成Servlet详细过程(转)

JSP转译成Servlet详细过程(转) 转自:http://developer.51cto.com/art/201012/237827.htm   2010-12-10 14:24 涩勤荣 JavaEye 我要评论(0) 字号:T | T 很多人都会认为JSP的执行性能会和Servlet相差很多,其实执行性能上的差别只在第一次的执行。本文讲详细的介绍JSP转译成

wakata随记 814

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 更新换代----systemctl命令取代chkconfig和service
下一篇: 【精】cookie、 sessionStorage 、localStorage之间的异同
xosg
xosg 领域专家: 网络协议与安全技术领域 领域专家: 网络协议与安全技术领域
博客等级 码龄9年 1986粉丝 864原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xosg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值