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

您所在的位置:网站首页 jsp怎么转换成html Jsp和Servlet的关系(通俗易懂)

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

2024-01-10 03:09| 来源: 网络整理| 查看: 265

文章目录 一、JSP的概念及作用二、Servlet的问题三、JSP的简单创建四、JSP与Servlet的联系与区别五、JSP实现原理

一、JSP的概念及作用

JSP是简化的Servlet设计,在HTML标签中嵌套Java代码,用以高效开发Web应用的动态网页。在仅使用Servlet的web应用开发中,部分Servlet代码通过使用打印语句打印HTML标签来在浏览器中显示页面,而JSP可以代替显示页面的Servlet。

二、Servlet的问题

在学习JSP之前,服务器通过Servlet响应客户端界面,会有一些不足之处:

开发方式麻烦:继承父类、覆盖方法、配置Web.xml或注解;代码修改麻烦:重新编译、部署、重启服务;显示方式麻烦:获取流、使用println()逐行打印;协同开发麻烦:UI负责美化页面,程序元负责编写代码。UI不懂Java,程序员又不能将所有前端的内容通过流输出。 三、JSP的简单创建

使用IDEA或者Eclipse创建一个JavaWeb项目,以IDEA为例,配置好Tomcat服务器,在项目名上右击创建一个first.jsp文件,IDEA会自动编写好JSP的基本结构:

在body标签中写入now:,叫做输出脚本,其中可以编写Java代码。然后启动Tomcat服务器,访问所创建的JSP文件的路径,得到了如下界面:

页面显示了当前的时间,并且刷新浏览器,可以发现时间发生了改变。

四、JSP与Servlet的联系与区别 联系: JSP文件在容器中会转换成Servlet执行。JSP是对Servlet的一种高级封装,本质还是Servlet。 区别: JSP可以很方便地编写或者修改HTML网页而不用去面对大量的println语句。 五、JSP实现原理

Tomcat会将xxx.jsp转换成java代码,进而编译成.class文件运行,最终运行结果通过response响应给客户端。

为了理解上面一句话,我们可以实际看一下转换后的代码。在部署Tomcat后,从控制台里找到如下图所示的目录:

复制如上路径到文件管理器,进到该文件目录,主要关注work文件夹。

再依次进入work/Catalina/localhost目录,可以看到自己所创建的JavaWeb项目,Web_Jsp为第三节所创建的项目名。

再依次进入项目名/org/apache/jsp目录,可以看到一个.java文件,还有一个字节码文件,但是大家可以发现jsp文件在变成java文件时名字从first变成了first_jsp,这是容器做的事情。

打开first_jsp.java源文件或将其拖到开发工具里查看其代码。

public final class first_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent, org.apache.jasper.runtime.JspSourceImports { //为了更好地说明,中间代码已省略 }

首先它是一个名为first_jsp的类,继承了HttpJspBase类,需要说明的是后者是HttpServlet的子类,所以才说JSP本质上其实是一个Servlet。

同Servlet,该类也有一个service方法,不过方法名叫做_jspService,该方法也有两个参数,一个是HttpServletRequest,还有一个是HttpServletResponse,说明该方法有请求的对象也有响应的对象。

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { //为了更好地说明,中间代码已省略 }

不过重点是接下来的部分,在_jspService方法中可以找到这样一段代码:

out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write("\r\n"); out.write(" Title\r\n"); out.write("\r\n"); out.write("\r\n"); out.write(" now:"); out.print( new java.util.Date() ); out.write("\r\n"); out.write("\r\n"); out.write("\r\n");

out是一个输出流,我们会发现,其实在第三节中所写的jsp代码,都在java文件中通过out做了一个打印,所以说在jsp中所展示的内容,都是通过流做的一个响应打印输出,而JSP本质上就是一个Servlet。这也是为什么在第一节说JSP是简化的Servlet,它不需要我们自己去写write或者print方法来打印页面,而是帮我们完成了这部分工作。

下面这张图可以很好地描述这个过程:

我们访问的是jsp页面,实际上访问的是java文件,通过class中的流响应给客户端一个页面。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3