zoukankan      html  css  js  c++  java
  • Servlet基础学习笔记

    之前记在文档里的Servlet基础笔记,发出来供大家一起交流学习。

    一. Servlet概述
    JavaWeb应用程序的所有请求的响应都是由Servlet完成的。Servlet是JavaWeb的核心程序,所有的网址最终都交给Servlet来处理,Servlet并没有main之类的方法,当用户访问服务器的时候,Tomcat是调用Servlet的某些方法来完成整个处理过程。

    1.1.Servlet工作流程
    浏览器提交的请求是遵循HTTP协议的文本。这段文本由服务器也就是Tomcat接收并解析,封装成了HttpServletRequest类型的request对象。所有的HTTP头数据都可以通过request相应的方法查询到。
    Tomcat同时把输出流封装为HttpServletReponse类型的response对象,通过设置response属性就可以控制输出的内容。然后,Tomcat把request、response作为参数,调用Servlet的相应方法,例如doPost(request,response)、doGet(request,response)等。
    Servlet中主要处理业务逻辑,例如读取数据库、权限检查、业务处理等。

    1.2.Servlet接口
    Servlet是一种实现了javax.servlet.Servlet接口的类。Servlet接口规定了特定的方法来处理特定的请求。开发者只需要实现Servlet的相关方法,用户访问Web程序的时候,Tomcat会调用这些方法完成业务处理。

    1.3.Servlet生命周期
    1.init方法:初始化Servlet,第一次加载Servlet会调用此方法,该方法只调用一次。
    2.service方法:处理业务逻辑,程序员需要将代码写在该方法中,每加载servlet一次都会调用该方法。
    3.destroy方法:销毁servlet,销毁方式:1)relaod或remove 2)关闭tomcat 3)关机

    二. HttpServlet
    2.1.HttpServlet概述
    HttpServlet类是GenericServlet的直接继承子类,它提供了对HTTP请求的特殊支持,所以通常我们都会通过继承HttpServlet来完成自定义的Servlet。同时免去了从ServletRequest和ServletResponse到HttpServletRequest和HttpServletResponse的强转动作。

    2.2.HttpServlet覆盖了service方法

    2.3.HttpServlet的doGet方法和doPost方法
    在HttpServlet的service(HttpServletRequest,HttpServletResponse)方法会去判断当前请求是GET还是POST。如果是GET请求,那么会去调用本类的doGet()方法,如果是POST请求,会去调用doPost()方法,所以我们在HttpServlet的子类去覆盖doGet()或doPost()方法即可。

    三. HttpServletResponse

    3.1.reponse概述
    在客户端发出每个请求时,服务器都会创建一个response对象,并传入给Servlet.service()方法,最终根据请求方式的不同会传给doGet()或doPost()方法中使用。
    response对象可以完成对客户端的响应工作。
    response对象的功能分为以下四种:
    设置响应头信息;发送状态码;设置响应正文;重定向;

    3.2.reponse响应正文
    response中共封装了两个流,用于服务器向客户端写数据。response.getWriter()获得字符输出流,只能向请求者(浏览器)写字符。response.getOutputStream()获得字节输出流,只能向请求者(浏览器)写字节。
    注意:在同一个请求中,不能同时使用两个流,只能使用其中一个,否则会抛异常。

    3.2.2重定向
    重定向是你访问A servelt的时候,A Servlet无法处理,然后告诉浏览器去重新访问B Servlet。在重定向的过程中,浏览器发送了至少两次请求。
    表现在地址栏中的地址会发生变化。重定向的响应码是302。

    完成重定向有两种方式:
    1)通过设置响应码和响应头。
    response.setStatus(302);
    response.setHeader(“Location”,”http://www.baidu.com“);
    2)调用response的重定向方法。
    response.sendRedirect(“http://www.baidu.com“);

    重定向总结:
    重定向是两次(至少)请求;
    重定向的URL可以是其他应用,不局限于当前应用;
    重定向的响应头为302,并且必须要有Location响应头;
    重定向就不要再使用response.getWriter()或response.getOutputStream()输出数据,否则可能会出现异常。

    四. HttpServletRequest
    在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据。

    request的功能包括以下几种:
    封装了请求头数据;
    封装了请求正文数据,如果是GET请求,那么就没有正文;
    request是一个域对象,可以把它当成Map来添加获取数据;
    request提供了请求转发和请求包含功能。

    4.1.request是域对象

    4.2.获得请求头信息

    4.3.获取请求参数

    4.4.请求转发
    当浏览器请求A,但是A没有处理,把请求直接在服务器内部转给B。对浏览器来说,并不知道有请求转发的存在,浏览器地址栏也不会有任何的变化。
    注意与重定向的区别。
    RequestDispatcher rd = request.getRequestDispatcher(“/BServlet”);//获得请求转发器
    rd.forward(request,response);//转发出去

    4.5.请求包含
    在A中,把请求包含到B。
    RequestDispatcher rd = request.getRequestDispatcher(“/BServlet”);
    rd.include(request,response);

    请求转发与包含比较
    1. 如果在AServlet中请求转发到BServlet,那么在AServlet中就不允许再输出响应体,即不能再使用 response.getWriter()和response.getOutputStream()向客户端输出,这一工作应该由BServlet来完成;如果是使用请求包含,那么没有这个限制;
    2. 请求转发虽然不能输出响应体,但还是可以设置响应头的,例如:response.setContentType(“text/html;charset=utf-8”);
    3. 请求包含大多是应用在JSP页面中,完成多页面的合并;
    4. 请求转发大多是应用在Servlet中,转发目标大多是JSP页面;

  • 相关阅读:
    86. Partition List
    328. Odd Even Linked List
    19. Remove Nth Node From End of List(移除倒数第N的结点, 快慢指针)
    24. Swap Nodes in Pairs
    2. Add Two Numbers(2个链表相加)
    92. Reverse Linked List II(链表部分反转)
    109. Convert Sorted List to Binary Search Tree
    138. Copy List with Random Pointer
    为Unity的新版ugui的Prefab生成预览图
    ArcEngine生成矩形缓冲区
  • 原文地址:https://www.cnblogs.com/lishbo/p/9956051.html
Copyright © 2011-2022 走看看