精华内容
下载资源
问答
  • Web服务器如何确定哪个Servlet处理请求 1、各种容器与服务器的区别与联系 1.1 容器与服务器的联系 1.2 各种容器的区别/联系 1.3 各种服务器的区别/联系 2、web服务器处理Servlet请求 2.1 处理Servlet请求图解 ...

    Web服务器如何确定哪个Servlet处理请求

    1、各种容器与服务器的区别与联系

    1.1 容器与服务器的联系

    在这里插入图片描述

    1.2 各种容器的区别/联系

    在这里插入图片描述

    1.3 各种服务器的区别/联系

    在这里插入图片描述

    2、web服务器处理Servlet请求

    2.1 处理Servlet请求图解

    在这里插入图片描述

    2.2 处理Servlet请求代码运行过程

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>dubhe</display-name>
      <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
      </welcome-file-list>
      
      <servlet>
      	<servlet-name>UserInfoLoginServlet</servlet-name><!--step3 -->
      	<servlet-class>com.jd.userinfo.UserInfoLoginServlet</servlet-class><!--step4-->
      	<!--
      	<load-on-startup>1</load-on-startup>,
      	web项目发布时就创建Servlet实例
      	-->  
      </servlet>
      <servlet-mapping>
      	<servlet-name>UserInfoLoginServlet</servlet-name><!--step2-->
      	<url-pattern>/UserInfoLoginServlet</url-pattern><!--step1-->
      </servlet-mapping>
    </web-app>
    

    代码执行步骤:

    step1:根据客户端发过来的请求,Servlet容器判断是否创建并加载Servlet实例。如果是客户端第一次给服务器发送该Servlet请求时,Servlet容器会加载并创建Servlet实例 ,(注意:默认情况下不是Tomcat服务器或服务器上的Web应用启动的时候加载并实例化Servlet),之后会调用一次init()方法对Servlet实例初始化 。当客户端(可以是非第一次请求的客户端)再次向服务器发送该Servlet请求时,服务器会从内存 。中查找该Servlet实例,并用找到的Servlet实例处理用户请求。
    step2:根据URL得到servlet的name;
    step3:找到代码中的中与name 相同的那个 标签;
    step4:最后根据这行代码找到客户端对应的Servlet

    <servlet-class>com.jd.userinfo.UserInfoLoginServlet</servlet-class>
    

    step5执行Servlet中的代码

    • Servlet容器首先会针对该请求创建ServletRequest和ServletResponse对象;
    • 调用Servlet的service()方法并把这两个参数传递给service()方法处理客户端请求;
    • Servlet实例通过ServletRequest对象获得客户端的请求;
    • 通过调用ServletResponse对象的方法进行响应,通过web服务器向客户端返回静态页面
    • 请求处理完毕,ServletRequest和ServletResponse对象被销毁(销毁的方式:服务器关闭或重新发布项目,都由Servlet容器完成)

    如何确定请求的方式是Get还是POST?
    不管客户端发送请求的方式是Get还是POST,这个请求都由 service方法来处理。在service方法的处理过程中,会根据客户端发送请求的方式不同,调用 doGetdoPost方法分别进行处理,通过HttpServlet类中的service方法可以了解这一调用过程,如下代码:

    protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
            String method = req.getMethod();
            if (method.equals(METHOD_GET)) {
                long lastModified = getLastModified(req);
                if (lastModified == -1) {
                    doGet(req, resp);
                } else {
                    long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
                    if (ifModifiedSince < lastModified) {
                        maybeSetLastModified(resp, lastModified);
                        doGet(req, resp);
                    } else {
                        resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
                    }
                }
            } else if (method.equals(METHOD_HEAD)) {
                long lastModified = getLastModified(req);
                maybeSetLastModified(resp, lastModified);
                doHead(req, resp);
            } else if (method.equals(METHOD_POST)) {
                doPost(req, resp);
            } else if (method.equals(METHOD_PUT)) {
                doPut(req, resp);
            } else if (method.equals(METHOD_DELETE)) {
                doDelete(req, resp);
            } else if (method.equals(METHOD_OPTIONS)) {
                doOptions(req,resp);
            } else if (method.equals(METHOD_TRACE)) {
                doTrace(req,resp);
            } else {
                String errMsg = lStrings.getString("http.method_not_implemented");
                Object[] errArgs = new Object[1];
                errArgs[0] = method;
                errMsg = MessageFormat.format(errMsg, errArgs);
                
                resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
            }
        }
    
    

    【参考资料】
    [服务器,容器的区别] https://blog.csdn.net/tjiyu/article/details/53148174

    展开全文
  • 1 Servlet 处理请求的原理 当浏览器基于 get 方式请求我们创建 Servlet 时,我们自定义的 Servlet 中的 doGet 方法 会被执行。doGet 方法能够被执行并处理 get 请求的原因是,容器在启动时会解析 web 工程 中 WEB...

    1 Servlet 处理请求的原理

      当浏览器基于 get 方式请求我们创建 Servlet 时,我们自定义的 Servlet 中的 doGet 方法 会被执行。doGet 方法能够被执行并处理 get 请求的原因是,容器在启动时会解析 web 工程 中 WEB-INF 目录中的 web.xml 文件,在该文件中我们配置了 Servlet URI 的绑定,容器通过对请求的解析可以获取请求资源的 URI,然后找到与该 URI 绑定的 Servlet 并做实例化处理 (注意:只实例化一次,如果在缓存中能够找到这个 Servlet 就不会再做次实例化处理)。在实例化时会使用 Servlet 接口类型作为引用类型的定义,并调用一次 init 方法,由于 HttpServlet中重写了该方法所以最终执行的是 HttpServlet init 方法(HttpServlet 中的 Init 方法是一个空的方法体),然后在新的线程中调用 service 方法。由于在 HttpServlet 中重写了 Service 方法所以最终执行的是 HttpServlet 中的 service 方法。在 service 方法中通过 request.getMethod() 获取到请求方式进行判断如果是 Get 方式请求就执行 doGet 方法,如果是 POST 请求就执行 doPost 方法。如果是基于 GET 方式提交的,并且在我们自定义的 Servlet 中又重写了 HttpServlet 中的 doGet 方法,那么最终会根据 Java 的多态特性转而执行我们自定义的 Servlet中的 doGet 方法。

    2 Servlet 的使用

    2.1Servlet 的作用

    1. 获取用户提交的数据
    2. 获取浏览器附加的信息
    3. 处理数据(访问数据库或调用接口)
    4. 给浏览器产生一个响应
    5. 在响应中添加附加信息
    展开全文
  • Web服务器如何确定哪个servlet处理请求 目录 Web服务器如何确定哪个servlet处理请求 1、Web服务器 2、Servlet和Servlet容器 3、Web服务器确定servlet处理请求过程 1...

                                    Web服务器如何确定哪个servlet处理请求

    目录

           Web服务器如何确定哪个servlet处理请求            

       1、Web服务器

       2、Servlet和Servlet容器

       3、Web服务器确定servlet处理请求过程


                               

    1、Web服务器

    1、Web服务器使用HTTP协议来传输数据。

    2、最简单的一种情况是,用户在浏览器(客户端,client)中输入一个URL(如https://www.baidu.com),然后就能从服务器端(server)获取网页进行阅览。

    3、服务器(server)完成的工作就是发送网页至客户端。

    4、传输过程遵循HTTP协议,它指明了请求(request(HttpServletR equest))消息和响应(response(HttpServletResponse)消息的格式。

     

    2、Servlet和Servlet容器

        1、用户/客户端只能向服务器请求静态网页。如果用户想要根据自己的输入来读取网页,这种方式就不能满足用户的要求,因此需要借助Servlet实现。

        2、Servlet是服务器端的Java应用程序,可以产生动态Web页面。

        3、Servlet容器就是用来装Servlet的。 其基本思想是在服务器端使用Java来动态生成网页。因此,Servlet容器是Web服务器和servlet进行交互的必不可少的组件。

        4、Servlet是在javax.serlvet包中定义的一个接口。它声明了servlet生命周期中必不可少的三个方法init()、service()和destroy()。每个servlet(无论是在SDK中定义的,或是自定义的)都必须实现这三个方法,而且由服务器在特定的时刻调用。

        5、自定义Servlet类继承HttpServlet抽象类,HttpServlet抽象类继承自GenericServlet抽象类,GenericServlet抽象类实现了Servlet、ServletConfig和Serializable接口。

        6、Servlet生命周期:

           1、初始化——>init()

              在Servlet容器完成Servlet类的实例化操作后,Servlet容器会调用Servlet的init()方法(在javax.servelt.Servlet接口中定义)对该Servlet进行初始化。对于每一个Servlet实例来说,init()方法只会被调用一次。初始化的目的是让Servlet在处理用户请求之前,做一些必要的准备工作,例如建立数据库连接,引用其他资源等。

          2、处理请求——>service()

             Servlet初始化之后,就处于就绪状态等待接收用户请求。

             当Servlet容器接收到客户端针对该Servlet的请求后,首先会针对这个请求创建ServletRequest和ServletResponse对象,之后调用Servlet的service()方法并把这两个参数传递给service()方法处理客户端请求。

             Servlet实例通过ServletRequest对象获得客户端的请求,通过调用ServletResponse对象的方法进行响应。请求处理完毕,ServletRequest和ServletResponse对象被销毁。

             不管客户端发送请求的方式是Get还是Post,这个请求都由service方法来处理。在service方法的处理过程中,会根据客户端发送请求的方式不同,调用doGet和doPost方法分别进行处理,其中doGet方法会在浏览器界面URL中显示获取的数据,doPost方法则不会显示。

          3、销毁

            销毁Servlet 由Servlet容器完成。

            情况下,用户第一次发送Servlet请求,该Servlet加载、实例化、初始化、处理用户请求,当请求处理完毕后,该Servlet通常情况下驻留在内存中,等待处理下一个针对该Servlet的请求。当下一个针对该Servlet的请求到达时,直接从内存中获取该Servlet实例并对该请求进行处理。如果Tomcat这个Web应用服务器关闭(服务器上所有的Web应用都关闭),或者该Servlet所在的Web应用关闭,该Servlet实例会被销毁。

            Web应用被关闭时,Servlet容器会先调用Servlet实例的==destroy()==方法,然后再销毁Servlet实例,同时也会销毁与Servlet相关联的ServletConfig对象。

            程序员通常在destroy()方法的实现中释放该Servlet所占用的资源,如关闭数据库连接,关闭文件输入输出流等。

     

                                                                     Server

    3、Web服务器确定servlet处理请求过程

        1、Web服务器的Web Server接收到HTTP请求

        2、Web服务器将请求转发给servlet容器

        3、servlet容器根据请求的URL去调用客户端要访问的Servlet

        4、在调用之前,servlet容器会根据web.xml中对Servlet的描述去查找要访问的Servlet

    (1)若找到,将此Servlet装载进虚拟机并调用servlet的init()方法对servlet进行初始化(该方法只会在servlet第一次被载入时调用),然后调用Servlet实例中的service()方法处理请求,即,读取请求中的数据,创建一个响应。servlet会被保留在容器的地址空间中,继续处理其他的HTTP请求。

     

    注: 当第二次去访问同一个Servlet时,若容器判断到该Servlet已经被装载并实例化,那么容器就不会再去创建一个新的Servlet实例,直接调用原来那个Servlet实例中的service()方法来处理请求。

     

    (2)若没有找到,直接返回一个404的错误代码到客户端,表示访问的资源不存在。

     

    注:但如果在Spring MVC中的*.xml(此处创建的是application.xml)中添加如下代码,就可以交给Web服务器默认Servlet处理。

    加上这几行代码后Spring容器会自动将对象装入容器然后交给服务器默认servlet处理,但需要同时对web.xml进行如下配置:

        这时服务器就会找到对应servlet处理,但是需要注意的是<url-pattern>/</url-pattern>这里不能写成<url-pattern>/*</url-pattern>,前者servlet处理后会交给TomCat渲染处理形成动态页面,后者则被servlet捕获后不会交给TomCat,这样页面上只会显示代码,而不会渲染界面。

    展开全文
  • Servlet处理请求和响应

    千次阅读 2016-10-14 22:37:30
    Servlet处理请求的流程:  1) 客户端在浏览器的地址栏中输入一个请求的URL,按回车后就向服务器端发起一个http request(由浏览器生成)。  2) 服务器端的Web Server首先接受到请求,并将请求转交给容器,容器会根据...

    Servlet处理请求的流程:

        1) 客户端在浏览器的地址栏中输入一个请求的URL,按回车后就向服务器端发起一个http request(由浏览器生成)。

        2) 服务器端的Web Server首先接受到请求,并将请求转交给容器,容器会根据请求的URL去调用客户端要访问的Servlet。

        3) 容器会根据web.xml中对Servlet的描述去查找要访问的Servlet,若找到,将此Servlet

    装载进虚拟机并实例化(第一次访问),然后调用Servlet实例中的service方法处理请求,并分配一个线程去执行。

    注: 当第二次去访问同一个Servlet时,若容器判断到该Servlet已经被装载并实例化,

    那么容器就不会再去创建一个新的Servlet实例,直接调用原来那个Servlet实例中的service方法

    来处理请求。

        4) 若没有查找到,直接返回一个404的错误代码到客户端,表示访问的资源不存在。



    Servlet处理响应:

    设置HTTP状态码

    设置响应状态行:
    HTTP状态码:
    

    HTTP状态码:

    100-199:表示信息性代码,标示客户端应该采取的其他动作,请求正在进行。

    200-299:表示客户请求成功。

    300-399:表示用于已经移走的资源文件,指示新的地址。

    400-499:表示由客户端引发的错误。

    500-599:表示由服务器端引发的错误

    servlet设置状态码一般使用HttpServletResponse的setStatus()方法;

    设置HTTP响应头

    HttpServletResponse对象用于操纵响应的HTTP头
    目的用于告诉客户端
    –发送回来的内容的类型
    –有多少内容正被发送
    常用的方法:

    setContentType(String mimetype);

    addCookie(Cookie c);

    发送内容的服务器的类型

    设置HTTP消息体

    HttpServletResponse对象负责将信息返回给客户端

    HttpServletResponse对象只产生一个空的HTTP响应

    传回自定义的内容需要使用getWriter()或者getOutputStream()方法

    –传送普通文本

    –传送二进制内容 

     

    请求重定向和自动刷新页面

    重定向的原理:

             

                

              

    使用sendRedirect(String URL)方法实现重定向,

     

    在指定时间内自动刷新当前页或到一个新的页面
    根据时间来控制响应
    想在响应中有一个短时间的暂停 

    response.setHeader("Refresh", "time; URL=url" );

     总结:
    请求URL时HTTP发出了多个请求
    状态码告诉浏览器发送的内容及格式状态
    Servlet API与容器进行通讯
    HttpServletResponse定义的常量来避免直接使用整数
    在通过PrintWriter对象发送任何内容之前先调用 HttpServletResponse的setStatus()方法
    为了让Servlet发挥最大的效能,HttpServletResponse对象用于操纵响应的HTTP头
    getWrite()或者getOutputStream()方法传送文本或者二进制内容给客户端
    sendRedirect方法实现重定向
    HTTP响应头“Refresh”会根据时间来控制响应

    展开全文
  • Servlet 处理请求的原理 当浏览器基于 get 方式请求我们创建 Servlet 时,我们自定义的 Servlet 中的 doGet 方法会被执行。 doGet 方法能够被执行并处理 get 请求的原因是,容器在启动时会解析 web工程 中 WEB-INF ...
  • Web服务器如何确定哪个servlet处理请求Web服务器Servlet容器Servletinit()、service()和destroy()简介Servlet生命周期详解Servlet2.X配置请求处理的过程 Web服务器 1.什么是Web服务器 想要知道什么是Servlet容器,...
  • 原文地址:jsp中Servlet处理请求后转到一个jsp页面的解决办法作者:飞舟jsp中的Servlet处理请求后一般都会做请求重定向或转发的处理,很多初学者会碰到很多问题,通过本人的总结,给出以下解决办法: 1.重定向:...
  • https://www.cnblogs.com/jerrice/p/6724060.html   1 WEB服务器 |- Web Server |- Http Server |- Application Server |- Servlet Container |- CGI Server ...
  • Servlet处理请求 实验结果 运行程序,使用postman测试软件中GET方法访问地址 没有postman的小伙伴可以点击链接,进行下载postman和简单使用测试软件Postman下载(亲测有效) http://localhost:8080/ServletDemo02/*...
  • servlet处理请求的方式

    千次阅读 2019-09-28 14:41:08
  • Web服务器 web服务器可以解析http协议,web服务器接受从... 2:servlet生命周期 1:创建实例 2:初始化init()方法 3:处理请求 service()方法 4:销毁 destroy()方法 3:web服务器确定servlet请求 1:浏览器会获...
  • jsp中的Servlet处理请求后一般都会做请求重定向或转发的处理,很多初学者会碰到很多问题,通过本人的总结,给出以下解决办法: 1.重定向:一般我们要根据我们的Web应用名称来写,如重定向到WebRoot根目录下的...
  • Servlet处理请求的学习笔记

    千次阅读 2019-01-13 23:01:08
    Servlet容器启动后,servlet对象的创建随着客户端的请求来的,ServletContainer会判断内存中是否存在指定的Servlet对象,如果没有则创建它,根据客户的请求创建HttpRequest、HttpResponse对象,从而调用Servlet ...
  • Servlet处理请求全过程

    2014-03-27 11:10:58
    Servlet是运行在web服务器端的java程序,可以生成动态的web页面,属于客户与服务器响应的中间层。实际上jsp的底层就是servle。学习它有助于了解底层的细节,毕竟servlet是一个java类。常见的servlet的写法有两种,一...
  • 当浏览器(客户端)连到服务器上并发送请求时,服务器将处理请求并将反馈到浏览器上。服务器使用HTTP(超文本传输协议)与客户机浏览器进行信息交流。 WEB服务器的内容 ①应用层使用HTTP协议 ②HTML文档格式 ③浏....
  • A、以进程的方式 B、以程序的方式 C、以线程的方式 D、以响应的方式 解答:C 转载于:https://www.cnblogs.com/borter/p/9562347.html
  • Java Web 第四天 使用Servlet处理请求

    千次阅读 2010-02-15 14:29:00
    在GET方式提交的URL中会显示出提交的查询数据而却提交数据的缓存会在浏览器的URL历史状态中,这样我们往往在浏览网页的时候点击后退键不需要重新发送请求。2.POST提交的可以使文本内容,也可以使二进制内容,所以...
  • Servlet处理请求: 处理所有请求:service() 处理Get请求:doGet() 处理Post请求:doPost() service()里无论get,post请求都会被处理: public class SampleServlet extends HttpServlet { /** * ...
  • Servlet容器请求处理

    千次阅读 2017-07-31 18:05:23
    本篇文章将给大家讲述Servlet容器中请求处理的过程,在给本篇文章起标题时,一直在“应用服务器”与“Servlet容器”这两者之间拿捏不定,主要是因为要清晰的区分开这两者的关系:Servlet容器可以说是应用服务器的一...
  • servlet处理http请求

    2016-12-22 22:14:50
    servlet处理http请求 GET/POST提交方法 get提交方式,用于获取到服务器的资源 1、地址栏直接输入服务器资源 2、通过js直接访问 3、超链接访问 post提交方式,主要是用于传输数据,客户端向服务器发送...
  • Servlet处理HTTP请求

    千次阅读 2016-10-23 13:24:58
    使用Servlet接受服务器端请求信息 HTTP请求包括请求行、请求头、消息体以及分割请求头和消息体的一个空行。 客户端的HTTP请求通过HttpServletRequest对象代表。HttpServletRequest对象只要用于获取由客户端发送...
  • Servlet如何处理请求

    千次阅读 2019-05-07 18:04:29
    servlet是如何处理传来的不同的请求的呢? 我们首先要对servlet的生命周期有一个了解! servlet生命周期 新建一个web项目,new一个servlet,这里叫做TestServlet. 在TestServlet中重写构造方法,init,service,...
  • Servlet存在的主要目的就是处理请求 GET/POST提交方法 浏览器向Web服务器发送HTTP请求 用户在网页上点击一个超连接 用户提交在网页上填写好的表单 用户在浏览器地址栏中输入URL地址并回车 默认情况下...
  • Servlet处理客户端请求过程

    千次阅读 2019-06-13 15:35:56
    前言 由于Servlet没有main函数,运行在容器中,所以整个生命周期由容器控制。具体可以分为5个状态: ... 处理客户端请求。容器在接到客户端请求时,都会创建一个新的线程,通过调用Servlet的serv...
  • servlet 请求处理方式

    千次阅读 2019-04-16 10:23:45
    servlet请求处理有以下几种方式: 1、直接处理:req.setAttribute("key","value"); 2、请求转发: req.getRequestDispatcher(uri/servlet别名).forword(req,resp); 特点:发一次请求,浏览器的地址不变; ...
  • 通过前面的学习能够创建并运行一个简单的 Servlet程序,完成浏览器和服务器的简单交互,但是我们编写的Servlet 代码是没有对浏览器的请求进行处理的。现在开始学习如何使用 Servlet 进行浏览器请求处理。 Request...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,951
精华内容 7,980
关键字:

servlet处理请求