servlet 的作用是什么?

 我来答
尚学堂大数据学院
2021-01-07 · 让人人享有高品质教育
尚学堂大数据学院
向TA提问
展开全部

在 JavaWeb 项目中,处理请求和发送响应的过程是由一种叫做 Servlet 的程序来完成的,并且 Servlet 是为了解决实现动态页面而衍生的东西。

简单来讲:Servlet其实就是一个遵循Servlet开发的java类,Serlvet是由服务器调用的,运行在服务器端。

一张图描述 Servler 在 B/S 中的作用点:

2. Tomcat 和 Servlet 的关系

Tomcat 是Web应用服务器,是一个Servlet/JSP容器。 Tomcat 作为 Servlet 容器,负责处理客户请求,把请求传送给 Servlet,并将 Servlet 的响应传送回给客户,而 Servlet 是一种运行在支持 Java 语言的服务器上的组件。

Servlet 最常见的用途是扩展 Java Web 服务器功能,提供非常安全的、可移植的、易于使用的 CGI 替代品。

从 Http 协议中的请求和响应可以得知,浏览器发出的请求是一个请求文本,而浏览器接收到的也应该是一个响应文本。但是在上面这个图中,并不知道是如何转变的,只知道浏览器发送过来的请求也就是 request,我们响应回去的就用 response。忽略了其中的细节,现在就来探究一下。

①:Tomcat 将 Http 请求文本接收并解析,然后封装成 HttpServletRequest 类型的 request 对象,所有的 Http 头数据读可以通过request 对象调用对应的方法查询到。

②:Tomcat 同时会要响应的信息封装为 HttpServletResponse 类型的response 对象,通过设置 response 属性就可以控制要输出到浏览器的内容,然后将 response 交给 Tomcat,Tomcat 就会将其变成响应文本的格式发送给浏览器。

Java Servlet API 是Servlet容器(tomcat)和servlet之间的接口,它定义了Serlvet 的各种方法,还定义了 Servlet 容器传送给 Servlet 的对象类,其中最重要的就是 ServletRequest 和 ServletResponse 。所以说我们在编写Servlet时,需要实现 Servlet 接口,按照其规范进行操作。

3. Servlet 接口主要方法

Servlet 接口主要的 3 个方法:

  • init()方法:只会调用一次,只是在创建servlet实例的时候才会创建。

  • service()方法:是进行数据处理的,只要接受了一次请求,就会被调用一次

  • destroy()方法:销毁 Servlet 对象的时候调用。停止服务器或者重新部署 Web 应用时销毁 Servlet 对象,同样也是调用一次

  • 4. 编写 Servlet

    首先说明一点疑惑,有时候我们在一些资料上看到别人这样写:

  • public class TestServlet implements Servlet {


  •     init()...


  •     service()...


  •     getServletConfig()...


  •     ...

  • }

  • 而在这我们要继承 HttpServlet类 那么问题来了,继承HttpServlet 和实现Servlet 有什么区别?

    首先,直观的不同,Servlet 是一个接口,如果实现这个接口,那么就必须实现接口里面定义的所有方法。

    而 HttpServlet 实现了 Servlet 接口,并把 Servlet 接口中的方法实现了。
    继承 Httpservelt,实际上也就实现了 Servlet 接口。

    但是我们没必要再去实现 Servlet 中定义的生命周期方法,因为在 Httpservlet 中已经有了默认实现,并且这些默认实现也挺规范和实用, doget 和 dopost 是执行用户请求的终点,get 请求会调用 doget 方法,post 请求会执行 dopost 方法,我们可以在这2个方法中定义我们自己的业务逻辑。

    最后,HttpServlet 在实现 Servlet 接口的时候,已经实现了 Servlet 中所有的方法,因此继承自 HttpSrvlet 的类,不需要再去覆写相应的生命周期等方法。

    4.1 编写Java类,继承HttpServlet

    创建一个 MyServlet java 类,继承 HttpServlet 实现 service 方法:

  • public class MyServlet extends HttpServlet {


  •     @Override

  •     protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  •         //设置字符编码

  •         request.setCharacterEncoding("utf8");

  •         //从 request 对象中获取username,password

  •         String username = request.getParameter("username");

  •         String password = request.getParameter("password");

  •         request.setAttribute("username",username);

  •         request.setAttribute("password",password);

  •         request.getRequestDispatcher( "/index2.jsp").forward(request, response);;

  •     }

  • }

  • 4.2 配置web.xml文件

    web.xml 配置 Servlet 访问路径,能让别人通过链接访问到你的 Servlet:

  • <web-app>

  •   <display-name>Archetype Created Web Application</display-name>


  •     <servlet>

  •         <servlet-name>MyServlet</servlet-name>

  •         <servlet-class>club.sscai.demo.MyServlet</servlet-class>

  •     </servlet>


  •     <servlet-mapping>

  •         <servlet-name>MyServlet</servlet-name>

  •         <url-pattern>/MyServlet</url-pattern>

  •     </servlet-mapping>


  • </web-app>

  • 4.3 jsp 界面显示

    index2.jsp:

  • <html>

  • <body>

  • <h2>2222222</h2>

  • username: <%=request.getParameter("username") %>

  • <br>

  • password: <%=request.getParameter("password") %>

  • </body>

  • </html>
秒懂百科
2020-12-22 · TA获得超过5.9万个赞
知道大有可为答主
回答量:25.3万
采纳率:88%
帮助的人:1.3亿
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
山西优就业
2018-02-23 · TA获得超过787个赞
知道小有建树答主
回答量:731
采纳率:90%
帮助的人:217万
展开全部
Servlet是用Java编写的Server端程序,它与协议和平台无关。Servlet运行于Java-enabled Web Server中。Java Servlet可以动态地扩展Server的能力,并采用请求-响应模式提供Web服务。
最早支持Servlet技术的是JavaSoft的Java Web Server。此后,一些其它的基于Java的Web Server开始支持标准的Servlet API。Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容。这个过程为:
客户端发送请求至服务器端;
服务器将请求信息发送至Servlet
Servlet生成响应内容并将其传给Server。响应内容动态生成,通常取决于客户端的请求
服务器将响应返回给客户端
Servlet看起来像是通常的Java程序。Servlet导入特定的属于Java Servlet API的包。因为是对象字节码,可动态地从网络加载,可以说Servlet对Server就如同Applet对Client一样,但是,由于 Servlet运行于Server中,它们并不需要一个图形用户界面。从这个角度讲,Servlet也被称为Faceless Object。
JAVA Servlet的优势:
Servlet可以和其他资源(文件、数据库、Applet、Java应用程序等)交互,以生成返回给客户端的响应内容。如果需要,还可以保存请求-响应过程中的信息。
采用Servlet,服务器可以完全授权对本地资源的访问(如数据库),并且Servlet自身将会控制外部用户的访问数量及访问性质
Servlet可以是其它服务的客户端程序,例如,它们可以用于分布式的应用系统中,可以从本地硬盘,或者通过网络从远端硬盘激活Servlet。
Servlet可被链接(chain)。一个Servlet可以调用另一个或一系列Servlet,即成为它的客户端。
采用Servlet Tag技术,可以在HTML页面中动态调用Servlet。
Servlet API与协议无关。它并不对传递它的协议有任何假设。
像所有的Java程序一样,Servlet拥有面向对象Java语言的所有优势
Servlet提供了Java应用程序的所有优势——可移植、稳健、易开发。使用Servlet 的Tag技术,Servlet能够生成嵌于静态HTML页面中的动态内容。
一个Servlet被客户端发送的第一个请求激活,然后它将继续运行于后台,等待以后的请求。每个请求将生成一个新的线程,而不是一个完整的进程。多个客户能够在同一个进程中同时得到服务。一般来说,Servlet进程只是在Web Server卸载时被卸载。
Servlet生命周期:
装载Servlet。这项操作一般是动态执行的。然而,Server通常会提供一个管理的选项,用于在Server启动时强制装载和初始化特定的Servlet。
Server创建一个Servlet的实例
Server调用Servlet的init()方法
一个客户端的请求到达Server
Server创建一个请求对象
Server创建一个响应对象
Server激活Servlet的service()方法,传递请求和响应对象作为参数
service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息
service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如doGet()或doPost()或程序员自己开发的新的方法
对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。一般Servlet只初始化一次 ,当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2018-02-23
展开全部
Servlet是用Java编写的Server端程序,它与协议和平台无关。Servlet运行于Java-enabled Web Server中。Java Servlet可以动态地扩展Server的能力,并采用请求-响应模式提供Web服务。

  最早支持Servlet技术的是JavaSoft的Java Web Server。此后,一些其它的基于Java的Web Server开始支持标准的Servlet API。Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容。这个过程为:

  客户端发送请求至服务器端;

  服务器将请求信息发送至Servlet

  Servlet生成响应内容并将其传给Server。响应内容动态生成,通常取决于客户端的请求

  服务器将响应返回给客户端

  Servlet看起来像是通常的Java程序。Servlet导入特定的属于Java Servlet API的包。因为是对象字节码,可动态地从网络加载,可以说Servlet对Server就如同Applet对Client一样,但是,由于 Servlet运行于Server中,它们并不需要一个图形用户界面。从这个角度讲,Servlet也被称为Faceless Object。

  JAVA Servlet的优势:

  Servlet可以和其他资源(文件、数据库、Applet、Java应用程序等)交互,以生成返回给客户端的响应内容。如果需要,还可以保存请求-响应过程中的信息。

  采用Servlet,服务器可以完全授权对本地资源的访问(如数据库),并且Servlet自身将会控制外部用户的访问数量及访问性质

  Servlet可以是其它服务的客户端程序,例如,它们可以用于分布式的应用系统中,可以从本地硬盘,或者通过网络从远端硬盘激活Servlet。

  Servlet可被链接(chain)。一个Servlet可以调用另一个或一系列Servlet,即成为它的客户端。

  采用Servlet Tag技术,可以在HTML页面中动态调用Servlet。

  Servlet API与协议无关。它并不对传递它的协议有任何假设。

  像所有的Java程序一样,Servlet拥有面向对象Java语言的所有优势

  Servlet提供了Java应用程序的所有优势——可移植、稳健、易开发。使用Servlet 的Tag技术,Servlet能够生成嵌于静态HTML页面中的动态内容。

  一个Servlet被客户端发送的第一个请求激活,然后它将继续运行于后台,等待以后的请求。每个请求将生成一个新的线程,而不是一个完整的进程。多个客户能够在同一个进程中同时得到服务。一般来说,Servlet进程只是在Web Server卸载时被卸载。

  Servlet生命周期:

  装载Servlet。这项操作一般是动态执行的。然而,Server通常会提供一个管理的选项,用于在Server启动时强制装载和初始化特定的Servlet。

  Server创建一个Servlet的实例

  Server调用Servlet的init()方法

  一个客户端的请求到达Server

  Server创建一个请求对象

  Server创建一个响应对象

  Server激活Servlet的service()方法,传递请求和响应对象作为参数

  service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息

  service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如doGet()或doPost()或程序员自己开发的新的方法

  对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。一般Servlet只初始化一次 ,当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式