zoukankan      html  css  js  c++  java
  • Servlet详解

    Servlet的实现过程

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

    1. 客户端发送请求至服务器端;
    2. 服务器将请求信息(url)发送至 Servlet,servlet会调用service方法,如果没有就会调用doget和dopost方法。常用的就是增删改(重定向到另一个地址)和查(查询数据放到作用域转发到jsp)。
    3. Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
    4. 服务器将响应返回给客户端。

    Servlet的原理

    servlet为专门用来处理请求的组件(是一种实现特殊功能的类,一般通过集成父类或实现接口才能成为组件,例如servlet继承了HttpServlet成为过滤器组件,实现Filter接口)

    普通的类--->servlet需要以下几步:

    1、继承HttpServlet类

    2、配置处理请求(用户给的什么地址),第一种方法是加注解@Webservlet(常用在自己写的),第二种方法是配置web.xml(适用于第三方引入的jar包)

    3、调用的代码写在哪里,默认是调用service方法,如果没有service方法,就会根据请求分支调用(并不提倡写service方法)

    比如get-->doget数据会携带在地址上

    post-->dopost额外会有一个数据包

    put-->doput请求会申请空间存放内容

    生命周期

    其中,init( ),service( ),destroy( )是Servlet生命周期的方法。代表了Servlet从“出生”到“工作”再到“死亡 ”的过程。Servlet容器(例如TomCat)会根据下面的规则来调用这三个方法:


    1.init( ),当Servlet第一次被请求时,Servlet容器就会开始调用这个方法来初始化一个Servlet对象出来,但是这个方法在后续请求中不会在被Servlet容器调用,就像人只能“出生”一次一样。我们可以利用init( )方法来执行相应的初始化工作。调用这个方法时,Servlet容器会传入一个ServletConfig对象进来从而对Servlet对象进行初始化。

    2.service( )方法,每当请求Servlet时,Servlet容器就会调用这个方法。就像人一样,需要不停的接受老板的指令并且“工作”。第一次请求时,Servlet容器会先调用init( )方法初始化一个Servlet对象出来,然后会调用它的service( )方法进行工作,但在后续的请求中,Servlet容器只会调用service方法了。

    3.destory,当要销毁Servlet时,Servlet容器就会调用这个方法,就如人一样,到时期了就得死亡。在卸载应用程序或者关闭Servlet容器时,就会发生这种情况,一般在这个方法中会写一些清除代码。

    HttpSession 对象(简单说一下如何使用)

    Servlet 还提供了 HttpSession 接口,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式。

    Servlet 容器使用这个接口来创建一个 HTTP 客户端和 HTTP 服务器之间的 session 会话。会话持续一个指定的时间段,跨多个连接或页面请求。

    您会通过调用 HttpServletRequest 的公共方法 getSession() 来获取 HttpSession 对象,如下所示:

    HttpSession session = request.getSession();

    需要在向客户端发送任何文档内容之前调用 request.getSession()

    服务端设置session的时候用session.setAttribute("name","小何")。

     常见错误类型

    500代码错误

    405地址对但是方法对

    404地址没有servlet处理,地址错了或者servlet配错了

    403找到了,但是权限不够

    200执行正确

  • 相关阅读:
    线上redis禁止使用keys等时间复杂度高的命令
    组合索引的使用效果的总结
    Netty 断线重连解决方案
    可作为GC Root的对象
    在同一个sqlSession执行一个相同的查询时,Mybatis有一级缓存,不会去查数据库,由此引发的一个bug
    HashMap 和 currentHashMap JDK8总结
    Java程序导致服务器CPU占用率过高的问题排除过程
    一条sql执行的很慢的原因有哪些
    主键索引和非主键索引的区别
    黑马程序员
  • 原文地址:https://www.cnblogs.com/mvpmvp/p/13418510.html
Copyright © 2011-2022 走看看