Servlet3使用总结

    很久没发博文了,五月也已经过了一大半,想写点东西记录下来,就现在吧,把我最近经历的遇到的都总结下。

    关于这个Servlet3,我是从我邮箱里的垃圾邮件中看到一个在线测评网站,好奇的我点进去了所谓的链接,第一轮测评题目是采用Servlet3技术去简单实现一个在线的网页时间展示。

    Servlet3? Servlet? 在大二学JavaWeb的时候了解过,Servlet不是web容器嘛,还有Servlet技术这等词汇?的确,自己见识的确短浅,框架的衍生发展离不开基础的一些东西,还是自己孤陋寡闻了。好了我们开始谈谈这个Servlet3技术吧。

     1.什么是Servlet3?

        Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布。该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署。总结来说Servlet就是一群人来制定Java应用中使用web时的各种规范,统一接口。

        //小感想~~~

        谈到Web应用,自己就是偏向学习这方面的,SSM,SpringBoot ... ,管理端的技术发展虽然不如前端那样大红大紫,几天就一个新框架,新特性,新元素,新标签。但是,也是在稳步发展的,我很羡慕那些很懂原理的大牛,有些问题发生了,你不深入研究发生的原因,只是在意表象上的解决方案,看到许多前辈踩下的坑,你只是避开走了,为何不往坑里观望观望呢?有时候,解决问题固然重要,但是解决问题的背后所隐藏的,更值得我们去发现。

    2.那么Servlet的工作流程是怎样的?

        

        白话来讲就是:一个http请求来了,web容器将http请求封装成servlet中的request对象,在这个request对象中你可以得到所有的http请求信息,当然你也可以取出来进行一顿操作,最后你在把数据封装成servlet的response对象返还给web容器,web容器将接收到的response对象解析之后封装成http response响应给客户端。就像上图一样,Servlet也有生命周期吗,我们也来分了解一下:

        Servlet 通过调用 init () 方法进行初始化。
        Servlet 调用 service() 方法来处理客户端的请求。
        Servlet 通过调用 destroy() 方法终止(结束)。
        最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

        根据Servlet重要的声明周期中用到的方法进行详细介绍:

public void init() throws ServletException {
  // 初始化代码...
}

        init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化。Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,也可以指定 Servlet 在服务器第一次启动时被加载。当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。

public void service(ServletRequest request, 
                    ServletResponse response) 
      throws ServletException, IOException{
}

        service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。

        doGet() 和 doPost() 方法是每次服务请求中最常用的方法。

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet 代码
}

        GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet() 方法处理。

public void doPost(HttpServletRequest request,
                   HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet 代码
}

        POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。

 public void destroy() {
    // 终止化代码...
  }

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

    

        第一个到达服务器的 HTTP 请求被委派到 Servlet 容器。
        Servlet 容器在调用 service() 方法之前加载 Servlet。
        然后 Servlet 容器处理由多个线程产生的多个请求,每个线程执行一个单一的 Servlet 实例的 service() 方法。

        3.Servlet3新特性?

             //详情见博客:https://blog.csdn.net/w410589502/article/details/58168292

            (1)Servlet、Filter、Listener无需在web.xml中进行配置,可以通过Annotation进行配置; 
            (2)模块化编程,即将各个Servlet模块化,将配置文件也分开配置。 
            (3)Servlet异步处理,应对复杂业务处理; 
            (4)异步Listener,对于异步处理的创建、完成等进行监听; 

            (5)文件上传API简化;

        4.我的Servlet3工程测试:采用Servlet3技术实现网页端的当前时间展示这一功能。

            1.在IDEA环境下,建立基于Maven的web工程

            2.建立java,resources文件夹,并mark directory as 

            3.引入所需要的依赖

            pom.xml文件:

<!-- servlet3 依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>
        这里可能会遇到一个问题:

            解决maven中servlet-api.jar和容器自带的servlet-api.jar的依赖冲突

            https://blog.csdn.net/hi__study/article/details/51627403

        在这里我们要先说一下Java中的日期和时间处理方法:
            Date类(官方不再推荐使用,官方解释Date类不利于国际化,推荐使用Calendar类)
            Calendar类

            DateFormat类 使用此类来时间初始化

        这个小例子用的是Calender类,TimeServlet如下:

        

     有五个点需要注意:

     1. 刚才提到了Servlet3新特性中支持了注解方式,省去了web.xml的拦截器,请求格式的设定。这里用到了@WebServlet注解,是不是和@Controller注解很类似,name就是这个Servlet类,urLPatterns就是请求的URL格式。详细的@WebServlet注解的参数配置见博文:https://blog.csdn.net/mytt_10566/article/details/70173007

     2. 设置响应对象response:刷新页面请求,编码格式等。

     3.Servlet的内置输出对象:out,可以直接输出HTML,数据等。

     4.Calender时间类的使用:Calender是静态方法getInstence()方法可以初始化一个日历对象,调用其的get方法,根据参数的不同可以相应不同的日历日期信息。

        这里要注意:MONTH   月 因为西方文化的原因,一年的第一个月是从“0”开始算起的,一年中12个月份分别是:“0-11”,12指的是下一年的一月份。WEEK_OF_YEAR   一年中的第几周  由于西方的一周指的是:星期日-星期六,星期日是一周的第一天,星期六是一周的最后一天,所以,使用 calendar.get(Calendar.WEEK_OF_YEAR) 时应该注意一周的开始应该是哪一天。

    5.其余的部署Tomcat服务器运行就好了~~~

    

    //感叹时光

    最后,感叹时光下,匆匆三年,一晃就过了~~ 所以,人生的档口,努力变优秀吧!




        

猜你喜欢

转载自blog.csdn.net/Nerver_77/article/details/80368087