JSP 与 SERVLET
Posted jony-it
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSP 与 SERVLET相关的知识,希望对你有一定的参考价值。
简单的说,jsp是servlet的扩展,servlet 是 java applet(解释为java小程序)
刚开始学java 的时候,jsp 与html 傻傻分不清楚,jsp中能写html标签、元素、属性等等,为啥说jsp是一门java的技术,后来才知道,jsp会编译,最终生成html响应给客户端。
servlet与CGI(公共网关接口)
Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。
CGI:
下面是百科解释:
CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、VB 和Delphi 等。CGI 分为标准CGI 和间接CGI两种。标准CGI 使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI 又称缓冲CGI,在CGI 程序和CGI 接口之间插入一个缓冲程序,缓冲程序与CGI 接口间用标准输入输出进行通信。
在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。这样说大概还不好理解。那么我们看一个实际例子:现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户端输入一些信息,如评论之类的东西。接着用户按一下“发布或提交”(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的CGI程序中,于是CGI程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后CGI程序将执行结果返回给服务器(webServer),然后服务器将结果返回给客户端,表示请求的任务已经结束。此时用户在浏览器里将看到“留言结束”的字样。整个过程结束。
步骤:
所有的HTTP服务器执行 CGI 程序都保存在一个预先配置的目录。这个目录被称为 CGI 目录,并按照惯例,它被命名为 /var/www/cgi-bin 目录。
CGI 文件的扩展名为 .cgi,python 也可以使用 .py 扩展名。
默认情况下,Linux 服务器配置运行的 cgi-bin 目录中为 /var/www。
优势:
- 性能明显更好。
- Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
- Servlet 是独立于平台的,因为它们是用 Java 编写的。
- 服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
- Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。
以下为个人理解:
servlet 就是java类,提供了接口服务,通过servlet,类如tomcat等应用服务器或者说servlet容器可以接收来自客户端发送的http请求,并响应给对应的客户端,是一个中间层。
接收到客户端请求后,通过javabean 处理具体的业务逻辑,并进行响应。
servlet可以响应不同的mime类型,如果响应html文本,就需要在servlet中编写html,想想会很烦。
jsp横空出世就是为了解决这个很烦的问题,jsp特殊的地方是,在jsp中也可以写servlet相关的代码。
理论上还是有一定的耦合但是相比在java类中编写html已经谢天了~
因为jsp是servlet的扩展,所以jsp也会进行编译为java类文件,特殊的地方就是后缀是jsp而不是.class
在第一次访问到jsp时,容器会把jsp编译为servlet,所有会有点慢,下一次访问的时候就会发现快多了就是因为这个原因。
常常说的mvc- servlet+javabean+jsp,也就是servlet负责控制层,javabean 负责模型层,jsp负责视图层。
理论上把servlet或者jsp 去掉其一也能编写应用~但是现在不会有人那么无聊。
如果还不明白的可以参考这篇文章,简单易懂
https://www.cnblogs.com/sanyouge/p/7325656.html
下面是百科
https://baike.baidu.com/item/servlet/477555?fr=aladdin
Python CGI编程
https://www.runoob.com/python/python-cgi.html
以上是关于JSP 与 SERVLET的主要内容,如果未能解决你的问题,请参考以下文章