jsp全称是啥?JSP的前生今世

100次浏览     发布时间:2024-07-14 08:45:24    

基础知识,servlet是什么?

官方解释:Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层

简单来说,servlet是运行在web服务器如tomcat,jetty这样应用服务器上的一段程序,他可以响应http协议的请求,并且实现用户自己的逻辑,最终将结果返回到用户的客户端(浏览器)

Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:

1、性能明显更好。

2、Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。

3、Servlet 是独立于平台的,因为它们是用 Java 编写的。

4、服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。

5、Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。

Servlet的生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

1、Servlet 通过调用 init () 方法进行初始化。

2、Servlet 调用 service() 方法来处理客户端的请求。

3、Servlet 通过调用 destroy() 方法终止(结束)。

4、最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的

init() 方法

init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化,就像 Applet 的 init 方法一样。

Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是您也可以指定 Servlet 在服务器第一次启动时被加载。

service() 方法

service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。

destroy() 方法

destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。

JSP是什么?

JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。

JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。

JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。


servlet和jsp的区别

1、Servlet在Java代码中可以通过HttpServletResponse对象动态输出HTML内容。

2、JSP是在静态HTML内容中嵌入Java代码,然后Java代码在被动态执行后生成HTML内容。

servlet和jsp各自的特点

1、Servlet虽然能够很好地组织业务逻辑代码,但是在Java源文件中,因为是通过字符串拼接的方式生成动态HTML内容,这样就容易导致代码维护困难、可读性差。

2、JSP虽然规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑。

MVC的诞生

JSP和Servlet都有自身的适用环境,那么有没有什么办法能够让它们发挥各自的优势呢?答案是肯有的,MVC模式就能够完美解决这一问题。

MVC模式,是Model-View-Controller的简称,是软件工程中的一种软件架构模式,分为三个基本部分,分别是:模型(Model)、视图(View)和控制器(Controller):

Controller——负责转发请求,对请求进行处理

View——负责界面显示

Model——业务功能编写(例如算法实现)、数据库设计以及数据存取操作实现

在JSP/Servlet开发的软件系统中,这三个部分的描述如下所示:


MVC模型

1、Web浏览器发送HTTP请求到服务端,然后被Controller(Servlet)获取并进行处理(例如参数解析、请求转发)

2、Controller(Servlet)调用核心业务逻辑——Model部分,获得结果

3、Controller(Servlet)将逻辑处理结果交给View(JSP),动态输出HTML内容

4、动态生成的HTML内容返回到浏览器显示

MVC模式在Web开发中有很大的优势,它完美规避了JSP与Servlet各自的缺点,让Servlet只负责业务逻辑部分,而不会生成HTML代码;同时JSP中也不会充斥着大量的业务代码,这样大大提高了代码的可读性和可维护性。


相关面试题



如何读取Servlet的初始化参数?

ServletConfig中定义了如下的方法用来读取初始化参数的信息:

public String getInitParameter(String name)

参数:初始化参数的名称。
返回:初始化参数的值,如果没有配置,返回null。

init(ServletConfig)方法执行次数

在Servlet的生命周期中,该方法执行一次。

service()方法的职责

service()方法为Servlet的核心方法,客户端的业务逻辑应该在该方法内执行,典型的服务方法的开发流程为:

解析客户端请求-〉执行业务逻辑-〉输出响应页面到客户端

get方式和post方式有何区别

数据携带上:

GET方式:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。

POST方式:可以在请求的实体内容中向服务器发送数据,传送的数据量无限制。

请求参数的位置上:

GET方式:请求参数放在URL地址后面,以?的方式来进行拼接

POST方式:请求参数放在HTTP请求包中

用途上:

GET方式一般用来获取数据

POST方式一般用来提交数据

原因:

首先是因为GET方式携带的数据量比较小,无法带过去很大的数量

POST方式提交的参数后台更加容易解析(使用POST方式提交的中文数据,后台也更加容易解决)

GET方式比POST方式要快

Servlet相关 API

HttpServletRequest:封装了与请求相关的信息

HttpServletResponse:封装了与响应相关的信息


获取页面的元素的值有几种方式,分别说一下

request.getParameter() 返回客户端的请求参数的值

request.getParameterNames() 返回所有可用属性名的枚举


request.getParameterValues() 返回包含参数的所有值的数组

request.getAttribute()和request.getParameter()区别

用途上:

request.getAttribute(), 一般用于获取request域对象的数据(在跳转之前把数据使用setAttribute来放到request对象上)

request.getParameter(), 一般用于获取客户端提交的参数

存储数据上:

request.getAttribute()可以获取Objcet对象

request.getParameter()只能获取字符串(这也是为什么它一般用于获取客户端提交的参数)


forward和redirect的区别

实际发生位置不同,地址栏不同

转发是发生在服务器的

转发是由服务器进行跳转的,细心的朋友会发现,在转发的时候,浏览器的地址栏是没有发生变化的,在我访问Servlet111的时候,即使跳转到了Servlet222的页面,浏览器的地址还是Servlet111的。也就是说浏览器是不知道该跳转的动作,转发是对浏览器透明的。通过上面的转发时序图我们也可以发现,实现转发只是一次的http请求,一次转发中request和response对象都是同一个。这也解释了,为什么可以使用request作为域对象进行Servlet之间的通讯。

重定向是发生在浏览器的

重定向是由浏览器进行跳转的,进行重定向跳转的时候,浏览器的地址会发生变化的。曾经介绍过:实现重定向的原理是由response的状态码和Location头组合而实现的。这是由浏览器进行的页面跳转实现重定向会发出两个http请求,**request域对象是无效的,因为它不是同一个request对象

用法不同:

很多人都搞不清楚转发和重定向的时候,资源地址究竟怎么写。有的时候要把应用名写上,有的时候不用把应用名写上。很容易把人搞晕。记住一个原则: 给服务器用的直接从资源名开始写,给浏览器用的要把应用名写上


request.getRequestDispatcher("/资源名 URI").forward(request,response)

转发时"/"代表的是本应用程序的根目录【zhongfucheng】

response.send("/web应用/资源名 URI");

重定向时"/"代表的是webapps目录


能够去往的URL的范围不一样:

转发是服务器跳转只能去往当前web应用的资源

重定向是服务器跳转,可以去往任何的资源


传递数据的类型不同

转发的request对象可以传递各种类型的数据,包括对象

重定向只能传递字符串


跳转的时间不同

转发时:执行到跳转语句时就会立刻跳转

重定向:整个页面执行完之后才执行跳转

相关文章

退休人员什么时候可以领养老金?

2024-09-24 10:31:48

知识产权纠纷调解,他们努力跑在“前面”

2024-09-24 10:16:41

二手房交易中常说的“挂牌”是什么意思?

2024-09-24 10:01:30

外地车北京限行政策实施

2024-09-24 09:46:27

为什么要在合同上盖骑缝章?

2024-09-24 09:31:40

抵押担保与质押的区别是什么

2024-09-24 09:16:34

派出所中拘留的最长时间是多久?行政拘留的条件是什么?

2024-09-24 09:01:40

住房商业贷款利率是怎么计算的?

2024-09-24 08:46:35

什么是安全文明施工费,都包括哪些内容?

2024-09-24 08:31:27

中国旅游签证申请流程及注意事项 Application...

2024-09-24 08:16:33