06-Servlet

Posted 亿钱君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了06-Servlet相关的知识,希望对你有一定的参考价值。

Servlet 技术

1.Servlet 技术

1.1 什么是 Servlet?

1.2 手动实现 Servlet 程序

1、编写一个类去实现 Servlet 接口

2、实现 service 方法,处理请求,并响应数据

package com.atguigu.com.servlet;

import javax.servlet.*;
import java.io.IOException;

public class HelloServlet implements Servlet

    //专门用来处理请求和响应的
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException 
        System.out.println("Hello Servlet 被访问了");
    

3、到 web.xml 中去配置 servlet 程序的访问地址

测试:

  • 启动


1.3 url 地址到 Servlet 程序的访问

1.4 Servlet的生命周期

1、执行 Servlet 构造器方法

2、执行 init 初始化方法

第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用

3、执行 service 方法 第三步,每次访问都会调用。

4、执行 destroy 销毁方法 (在 web 工程停止的时候调用)

测试:

package com.atguigu.com.servlet;

import javax.servlet.*;
import java.io.IOException;

public class HelloServlet implements Servlet

    public HelloServlet()
        System.out.println("1:构造器方法");
    

    @Override
    public void init(ServletConfig servletConfig) throws ServletException 
        System.out.println("2:init初始化方法");
    

    //专门用来处理请求和响应的
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException 
        System.out.println("3:service方法");
    

    @Override
    public void destroy() 
        System.out.println("4:destroy方法");

    

1.5 GET 和 POST 请求的分发处理

package com.atguigu.com.servlet;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class HelloServlet implements Servlet

    //专门用来处理请求和响应的
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException 
		System.out.println("3:service方法");
		
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        String method = httpServletRequest.getMethod();

        if("GET".equals(method))
            doGet();
        else if("POST".equals(method))
            doPost();
        
    

    private void doPost() 
        System.out.println("Post请求");
        System.out.println("Post请求");
    

    private void doGet() 
        System.out.println("get请求");
        System.out.println("get请求");
    




创建一个a.html页面,get方法时

测试:

创建一个a.html页面,post方法时

1.6 通过继承 HttpServlet 实现 Servlet 程序

一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序

  • 1、编写一个类去继承 HttpServlet 类
  • 2、根据业务需要重写 doGet 或 doPost 方法
  • 3、到 web.xml 中的配置 Servlet 程序的访问地址

测试:举例

  • Servlet 类的代码:

package com.atguigu.com.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author syl
 * @create 2021/5/30-13:16
 */
public class HelloServlet2 extends HttpServlet 

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        System.out.println("HelloServlet2的doget方法");
    

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        System.out.println("HelloServlet2的dopost方法");
    

  • web.xml 中的配置:
  • 修改a.html文件
  • 测试:成功运行

1.7 使用 IDEA 创建 Servlet 程序

  • 直接生成类和配置


  • 创建完成后

1.8 Servlet 类的继承体系

2.ServletConfig 类

  • ServletConfig 类从类名上来看,就知道是 Servlet 程序的配置信息类

  • Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建,我们负责使用。

  • Servlet 程序默认是第一次访问的时候创建,ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对 象

2.1 ServletConfig 类的三大作用

  • 1、可以获取 Servlet 程序的别名 servlet-name 的值
  • 2、获取初始化参数 init-param
  • 3、获取 ServletContext 对象

3.ServletContext 类

3.1 什么是 ServletContext?

3.2 ServletContext 类的四个作用

1、获取 web.xml 中配置的上下文参数 context-param

  • 新建一个ContextServlet类
package com.atguigu.com.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author syl
 * @create 2021/5/30-20:11
 */
public class ContextServlet extends HttpServlet 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 

    

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
 
  //  1. 获取web.xml中配置的上下文参数context-param
        ServletContext context= getServletConfig().getServletContext();

        String username = context.getInitParameter("username");
        System.out.println("context-param参数username的值是:" + username);

        System.out.println("context-param参数username的值是:" + context.getInitParameter("password"));
    

  • 上下文参数的配置
  • 测试结果

2、获取当前的工程路径,格式: /工程路径

package com.atguigu.com.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author syl
 * @create 2021/5/30-20:11
 */
public class ContextServlet extends HttpServlet 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 

    

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
		ServletContext context= getServletConfig().getServletContext();
        //2.获取当前工程路径
        System.out.println("当前工程路径是:" + context.getContextPath());


    


3、获取工程部署后在服务器硬盘上的绝对路径

package com.atguigu.com.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author syl
 * @create 2021/5/30-20:11
 */
public class ContextServlet extends HttpServlet 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 

    

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
        ServletContext context= getServletConfig().getServletContext();

        //3、获取工程部署后在服务器硬盘上的绝对路径
        /*
        / 斜杠被服务器解析地址为:http://ip:port/工程名/ 映射到 IDEA 代码的 web 目录(/ 对应web目录)
         */
        System.out.println("工程部署的路径是:" + context.getRealPath("/"));
		System.out.println("test的路径是:" + context.getRealPath("/test"));
    



4、像 Map 一样存取数据

。。。。略

4.HTTP 协议

4.1 什么是 HTTP 协议

4.2 请求的 HTTP 协议格式

4.4.1 GET 请求


4.4.2 POST 请求


4.4.3 常用请求头的说明

4.4.4 哪些是 GET 请求,哪些是 POST 请求

4.3 响应的 HTTP 协议格式


4.4 常用的响应码说明

4.5 MIME 类型说明(MIME 是 HTTP 协议中数据类型)

4.6 谷歌浏览器如何查看 HTTP 协议

5. HttpServletRequest 类

5.1 HttpServletRequest 类有什么作用

5.2 HttpServletRequest 类的常用方法


i. getRequestURI() 获取请求的资源路径
ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)

package com.atguigu.com.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author syl
 * @create 2021/5/31-8:28
 */
public class RequestAPIServlet extends HttpServlet 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 

    

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 

        //i. getRequestURI() 获取请求的资源路径
        System.out.println("URI=>" + request.getRequestURI());
        //ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)
        System.out.println("URI=>" + request.getRequestURL());

    


iii. getRemoteHost() 获取客户端的 ip 地址

package com.atguigu.com.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author syl
 * @create 2021/5/31-8:28
 */
public class RequestAPIServlet extends HttpServlet 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 

    

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 


        //iii. getRemoteHost() 获取客户端的 ip 地址
        /*** 在 IDEA 中,使用 localhost 访问时,得到的客户端 ip 地址是 ===>>> 127.0.0.1<br/>
         * * 在 IDEA 中,使用 127.0.0.1 访问时,得到的客户端 ip 地址是 ===>>> 127.0.0.1<br/>
         * * 在 IDEA 中,使用 真实 ip 访问时,得到的客户端 ip 地址是 ===>>> 真实的客户端 ip 地址<br/> */
        System.out.println("客户端Ip地址=>" + request.getRemoteHost());

    




iv. getHeader() 获取请求头

package com.atguigu.com.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author syl
 * @create 2021/5/31-8:28
 */
public class RequestAPIServlet extends HttpServlet 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 

    

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 

        //iv. getHeader() 获取请求头
        javascript ya / ga柜台检查

html Tonic - 选项柜台(亚特兰大)

html Css柜台

PHP 下载柜台

typescript @ ngrx /商店柜台

typescript @ ngrx /商店柜台