Servlet学习1

什么是Servlet

  1. Servlet是JavaEE规范之一。规范就是接口
  2. Servlet就JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。
  3. Servlet是运行在服务器上的一个java小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

编写一个Servlet程序

步骤

  1. 创建一个类实现servlet接口
  2. 重写service方法 
  3. 配置web.xml文件

我的代码示例

第一步&第二步

package com.example.demo;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

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 ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3.service方法");
        System.out.println("HelloServlet被访问了");
        //类型转换
        HttpServletRequest httpServletRequest=(HttpServletRequest) servletRequest;
        //获取请求方式
        String method=httpServletRequest.getMethod();
        if("GET".equals(method)){
            doGet();
        }else if("POST".equals(method)){
            doPost();
        }

    }
    public void doGet(){
        System.out.println("get请求");
    }
    public void doPost(){
        System.out.println("post请求");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

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

    }
}

web.xml文件配置

<servlet>
        <!--servlet标签起别名(一般是类名)-->
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.example.demo.HelloServlet</servlet-class>
    </servlet>
    <!--servlet-mapping给servlet配置访问地址-->
    <servlet-mapping>
        <!--该标签当前配置地址给哪个servlet程序使用-->
        <servlet-name>HelloServlet</servlet-name>
        <!--配置访问地址
        /斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径
        /hello 表示地址为http://ip:port/工程路径/hello
        访问的是index界面
        -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

 浅谈url地址到servlet程序执行

  • ip地址唯一,定位服务器
  • 端口号定位Tomcat
  • 工程路径唯一定位访问的工程
  • 资源路径定位类,调用service方法

servlet生命周期

1.执行Servlet构造器方法
2.执行init初始化方法
第一二步是在第一次访问的时候创建servlet程序被调用
3.执行service方法
4.执行destroy方法
第四步web工程停止时调用

get和post请求分发处理

直接上代码吧!

 public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3.service方法");
        System.out.println("HelloServlet被访问了");
        //类型转换
        HttpServletRequest httpServletRequest=(HttpServletRequest) servletRequest;
        //获取请求方式
        String method=httpServletRequest.getMethod();
        if("GET".equals(method)){
            doGet();
        }else if("POST".equals(method)){
            doPost();
        }

    }
    public void doGet(){
        System.out.println("get请求");
    }
    public void doPost(){
        System.out.println("post请求");
    }

 创建servlet程序三种方法

实现servlet接口

详见编写一个servlet程序

继承HttpServlet

  1. 继承HttpServlet类
  2. 根据需要重写doDet和doPost
  3. 配置web.xml文件
public class HelloServlet1 extends HttpServlet {
    public HelloServlet1() {
        super();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloServlet1的doGet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloServlet1的doPost");
    }
}

<servlet>
        <servlet-name>HelloServlet1</servlet-name>
        <servlet-class>com.example.demo.HelloServlet1</servlet-class>
    </servlet>
 <servlet-mapping>
        <servlet-name>HelloServlet1</servlet-name>
        <url-pattern>/hello1</url-pattern>
    </servlet-mapping>

idea可以帮我们创建

我们创建的包-->New-->servlet即可!

Servlet继承关系(图片来自尚硅谷的网课哦)

 ServletConfig

简介

ServletConfig:Servlet程序的配置信息类。Servlet程序和ServletConfig对象都是由Tomcat负责创建,我们负责使用。Servlet程序默认是第一次访问的时候创建,ServletConfig是每个Servlet程序创建时,创建一个对应的ServletConfig对象。

作用

1、可以获取Servlet程序的别名servlet-name的值

2、获取初始化参数init-param

3、获取ServletContext对象

4、init方法重写后必须调用父类的init方法

<servlet>
        <servlet-name>HelloServlet1</servlet-name>
        <servlet-class>com.example.demo.HelloServlet1</servlet-class>
        <init-param>
            <param-name>username</param-name>
            <param-value>root</param-value>
        </init-param>
    </servlet>
@Override
    public void init(ServletConfig config) throws ServletException {
        //重写init方法必须调用父类init方法
        super.init(config);
        //获取servlet程序别名
        System.out.println(config.getServletName());
        //获取init-param参数
        System.out.println(config.getInitParameter("username"));
        //创建ServletContext对象
        System.out.println(config.getServletContext());
    }

ServletContext类

简介

1、ServletContext是一个接口,它表示Servlet上下文对象

2、一个web工程,只有一个ServletContext对象实例

3、ServletContext对象是一个域对象(可以像Map一样存取数据的对象,叫域对象)。

4、ServletContext是在web工程部署启动的时候创建。在web工程停止的时候销毁。

作用

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

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

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

4、像Map一样存取数据

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext servletContext = getServletConfig().getServletContext();
        //获取context-param
        String username=servletContext.getInitParameter("username");
        System.out.println("context-param参数username的值是"+username);
        System.out.println("context-param参数password的值是"+servletContext.getInitParameter("password"));

        //获取当前工程路径,格式:/工程路径
        System.out.println("当前工程路径:"+servletContext.getContextPath());
        //获取工程部署后在服务器硬盘上的绝对路径
        /*
        /斜杠被服务器解析地址为:http://ip:port/工程名/映射到IDEA代码的web目录
        用“/工程名”代替了项目在服务器硬盘上的绝对路径
         */
        System.out.println("工程部署的路径:"+servletContext.getRealPath("/"));

    }
<!--context-param标签是上下文参数,属于整个web工程-->
    <context-param>
        <param-name>username</param-name>
        <param-value>context</param-value>
    </context-param>
    <context-param>
        <param-name>password</param-name>
        <param-value>root</param-value>
    </context-param>

存储数据!

1部署以后,servletContext2也可以获得该数据;域的范围是整个工程,web工程销毁数据才会消失

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext servletContext = getServletContext();
        //保存之前
        System.out.println("保存之前servletContext1获取域数据key1值:"+servletContext.getAttribute("key1"));
        servletContext.setAttribute("key1","value1");
        //保存之后
        System.out.println("保存之后servletContext1获取域数据key1值:"+servletContext.getAttribute("key1"));
        
    }
 @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext servletContext = getServletContext();
        System.out.println("servletContext2获取域数据key1值:"+servletContext.getAttribute("key1"));
        //servletContext2也可以获得该数据;域的范围是整个工程,web工程销毁数据才会消失
    }

HTTP协议

就是指,客户端和服务器之间通信时,发送的数据,需要遵守的规则。

GET请求

请求行

(1)请求的方式GET

(2)请求的资源路径[+?+请求参数]

(3)请求的协议的版本号HTTP/1.1

请求头

key:value组成不同的键值对,表示不同的含义。

 POST

请求行

(1)请求的方式POST

(2)请求的资源路径[+?+请求参数]

(3)请求的协议的版本号HTTP/1.1

请求头

key:value不同的请求头,有不同的含义

        空行

请求体===>>>就是发送给服务器的数据

常用请求头

Accept:表示客户端可以接收的数据类型

Accpet-Languege:表示客户端可以接收的语言类型

User-Agent:表示客户端浏览器的信息

Host:表示请求时的服务器ip和端口号

常见GET和POST

GET请求有哪些:

1、form标签method=get

2、a标签

3、link标签引入css

4、Script标签引入js文件

5、img标签引入图片

6、iframe引入html页面

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

POST请求有哪些:

form标签method=postc)

响应的HTTP协议格式

1、响应行(1)响应的协议和版本号(2)响应状态码(3)响应状态描述符

2、响应头(1)key:value不同的响应头,有其不同含义空行

3、响应体---->>>就是回传给客户端的数据 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冉卿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值