• JavaWeb学习笔记(五)Servlet


    第五章、Servlet

    1、Servlet技术

    1.1、什么是Servlet

    • Servlet是Java EE的规范之一,规范就是接口。
    • Servlet是JavaWeb的三大组件之一,三大组件:Servlet程序、Filter过滤器、Listener监听器。
    • Servlet是运行在服务器上的一个Java小程序,它可以接受科幻段发动来的请求,并响应数据给客户端

    1.2、实现Servlet程序

    1. 编写一个类,去实现Servlet接口
    2. 实现service方法,处理请求并响应数据
    3. 到web.xml中配置Servlet程序的访问地址

    1.3、url地址到Servlet程序的访问

    image-20201019232637000

    1.4、Servlet的生命周期

    1、执行Servlet构造器方法

    2、执行init初始化方法

    3、执行service方法

    4、执行destroy销毁方法

    说明:

    1和2:在第一次访问时,创建Servlet程序时,被调用

    3:每次访问都会调用

    4:停止web工程时调用

    1.5、GET和POST请求的分发处理

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    	// 类型转换(因为它有 getMethod()方法)
    	HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
    	// 获取请求的方式
    	String method = httpServletRequest.getMethod();
        
    	if ("GET".equals(method)) {
    		doGet();
    	}
        else if ("POST".equals(method)) {
    		doPost();
    	}
    }
    
    /**
    * 做 get 请求的操作
    */
    public void doGet(){}
    
    /**
    * 做 post 请求的操作
    */
    public void doPost(){}
    

    1.6、通过记成HttpServlet实现Servlet程序(开发中常用方法)

    1. 编写一个类去继承HttpServlet类
    2. 根据需求重写doGet()和doPost()方法
    3. 在web.xml中配置Servlet程序的访问地址
    public class HelloServlet2 extends HttpServlet {
        
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//这里是具体的方法
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		//这里是具体的方法
        }
    }
    
    <servlet>
            <servlet-name>HelloServlet2</servlet-name>
            <servlet-class>com.javalove.servlet.HelloServlet2</servlet-class>
    </servlet>
    
    <servlet-mapping>
            <servlet-name>HelloServlet2</servlet-name>
      		<url-pattern>/hello2</url-pattern>
    </servlet-mapping>
    

    1.7、使用idea创建Servlet程序(同样可以实现如上效果)

    1.8、Servlet类的继承体系

    image-20201019235049109

    2、ServletConfig类

    • 顾名思义,ServletConfig类,是Servlet程序的配置信息类
    • Servlet程序和ServletConfig对象,是由Tomcat创建的,我们只需要使用就ok
      • Servlet 程序默认是第一次访问的时候创建
      • ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对 象;因此,每个Servlet只能访问到自己的Servlet程序的配置信息。

    2.1、ServletConfig类的三大作用

    1. 可以获取 Servlet 程序的别名 servlet-name 的值
    2. 获取初始化参数 init-param
    3. 获取 ServletContext 对象
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    	//1、可以获取 Servlet 程序的别名 servlet-name 的值
    	System.out.println("HelloServlet 程序的别名是:" + servletConfig.getServletName());
    
    	//2、获取初始化参数 init-param
    	System.out.println("初始化参数 username 的值是;" + servletConfig.getInitParameter("username"));
    	System.out.println("初始化参数 url 的值是;" + servletConfig.getInitParameter("url"));
    
    	//3、获取 ServletContext 对象
    	System.out.println(servletConfig.getServletContext());
    
    }
    

    注意:重写init方法,一定要调用父类的init(ServletConfig)。

    • 因为子父类中都有init时,会调用子类的init()
    • 而父类中的init(),使用了this.config = config 保存了ServletConfig类型的配置信息
    • 因此必须要调用一下父类
    @override
    public void init(ServletConfig config){
        super.init(config);
        //下面是自己重写的操作
    }
    

    3、ServletContext类

    3.1、什么是ServletContext类

    • 是一个接口,表示:Servlet上下文对象

    • ServletContext类型的对象是域对象

      • 域对象:可以向Map一样存取数据的对象

      • 域:指的是存取对象的操作范围---整个web工程

      • Map和域对象对比

        存数据 取数据 删除数据 说明
        Map put() get() remove()
        域对象 setAttribute() getAttribute() removeAttribute() 方法名中有Attribute---》域对象
    • 一个web工程只有一个ServletContext对象实例

    • ServletContext类型的对象是在web工程部署的时候创建,停止的时候销毁

    3.2、ServletContext类的四个作用

    1. 获取 web.xml 中配置的上下文参数 context-param
    2. 获取当前的工程路径, 格式: /工程路径
    3. 获取工程部署后在服务器硬盘上的绝对路径
    4. 像 Map 一样存取数据

    4、HTTP协议

    4.1、是什么HTTP协议

    • 协议:双方、多方约定好的规则
    • HTTP协议:客户端和服务器之间通信,要遵守的规则
    • 报文:协议中的数据

    4.2、请求的HTTP协议格式

    1、GET请求
    • 请求行
      • 请求的方式:GET
      • 请求的资源路径【+?+请求参数】
      • 请求的协议版本号:HTTP/1.1
    • 求情头
      • 很多key:value

    image-20201020024036689

    2、POST请求
    • 请求行

      • 请求的方式:POST
      • 请求的资源路径【+?+请求参数】
      • 请求的协议版本号:HTTP/1.1
    • 请求头

      • key:value
    • 空行

    • 请求体:发给服务器的数据

    image-20201020024244463

    3、哪些是GET、哪些是POST

    • GET 请求有哪些:

      1、form 标签 method=get

      2、a 标签

      3、link 标签引入 css

      4、Script 标签引入 js 文件

      5、img 标签引入图片

      6、iframe 引入 html 页面

      7、在浏览器地址栏中输入地址后敲回车

    • POST 请求有哪些:

      8、form 标签 method=post

    4.3、响应的HTTP协议格式
    • 响应行
      • 响应的协议和版本号
      • 响应状态码
      • 响应状态描述符
    • 响应头
      • key : value 不同的响应头,有其不同含义
    • 空行
    • 响应体 ---->>> 就是回传给客户端的数据

    image-20201020024827387

    4.4、响应码的说明

    响应码 含义
    200 请求成功
    302 请求重定向
    404 服务器收到请求,但是数据不存在或请求地址错误
    500 服务器收到请求,服务器里的代码错误

    4.5、MIME类型说明

    1. MIME 的英文全称是" Multipurpose Internet Mail Extensions" 多功能 Internet 邮件扩充服务。 MIME 类型的格式是“大类型/小 类型”,并与某一种文件的扩展名相对应

    2. 常用MIME类型

    image-20201020025252559

    image-20201020025304861

  • 相关阅读:
    Android-Sqlite-OOP方式操作增删改查
    Android-Sqlite-升级操作
    Android-Sqlite-SQL操作增删改查
    Android-SqliteSQL语句大全
    Android-startService后台运行
    php获取post参数的几种方式 RPC 规定接收取值方式 $GLOBALS['HTTP_RAW_POST_DATA'];
    php echo '<script>alert("插入成功")</script>';
    php urlencode函数 (中文字符转换为十六进制)
    Validform使用ajax详解
    PHP系统级函数 get_headers() 包含有服务器响应一个 HTTP
  • 原文地址:https://www.cnblogs.com/liuzhixian666/p/13844242.html
Copyright © 2020-2023  润新知