Servlet 基础(一)

什么是Servlet

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

配置servlet

package com.atguigu.servlet;

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

public class HelloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//        专门处理请求和响应,,在web.xml中配置地址
        System.out.println("我是处理请求和响应,在web/web-inf/web.xml配置的/hello就会触发");
    }

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

    @Override
    public void destroy() {

    }
}

配置路径web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

<!--    servlet指tomcat配置servlet程序-->
    <servlet>
<!--        servlet-name是servlet程序的别名(一般是类名)-->
        <servlet-name>HelloServlet</servlet-name>
<!--        servlet-class是servlet程序的全类名(包加类名)-->
        <servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
    </servlet>

<!--    配置访问地址-->
    <servlet-mapping>
<!--        告诉服务器,配置的地址给哪个servlet程序使用-->
        <servlet-name>HelloServlet</servlet-name>
<!--        配置访问地址-->
<!--        / 表示 http://ip:port/工程路径   在tomcat配置的路径可以修改-->
<!--            /hello  表示进一步指定地址-->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>




</web-app>

在这里插入图片描述
在这里插入图片描述

注意常见错误:

1。 url-pattern 的路径不要漏写 /
2 。servlet-name的别名(类名)写错
3 。 servlet-class 全类名写错

在这里插入图片描述

servlet的生命周期

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

请求的分发

package com.atguigu.servlet;

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

public class HelloServlet implements Servlet {
    public HelloServlet() {
        System.out.println("Servlet 生命周期");
        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 {
//        专门处理请求和响应,,在web.xml中配置地址
        System.out.println(" 3 我是处理请求和响应,在web/web-inf/web.xml配置的/hello就会触发");

//        类型转换,获取getMethod()方法
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        // 获取请求方式
        String method = httpServletRequest.getMethod();
//        if("GET".equals(method)){ // 封装成一个方法
             // doGet();
//            System.out.println("get请求");
//        }else if("POST".equals(method)){
//            System.out.println("post请求");
//        }

    }
    // 封装doGet方法。doPost方法同理
    public void doGet(){
//        System.out.println("get请求");
    }
    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("4 销毁");
    }
}

一般使用HttpServlet 继承的方法来分发请求

package com.atguigu.servlet;

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

// 一般不直接实现Servlert接口,而是通过继承 HttpServlet 来实现,
// 并且重写doGet 和 doPost
public class HelloServlet2 extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("记得在web.xml中配置");
        System.out.println("因为HttpServlet已经帮我们封装好get请求的方法,doGet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("因为HttpServlet已经帮我们封装好post请求的方法,doPost");

    }
}

idea自动生成HttpServlet的类

在这里插入图片描述
在这里插入图片描述

继承和实现servlet、HttpServlet

在这里插入图片描述

ServletConfig可以获取一些配置信息

// HelloServlet文件
        @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2 init初始化");
        System.out.println("servlet的别名"+ servletConfig.getServletName());

        System.out.println("初始化参数usernmae"+ servletConfig.getInitParameter("username"));
        System.out.println("初始化参数url"+ servletConfig.getInitParameter("url"));
    }
// web.xml文件

    servlet指tomcat配置servlet程序-->
    <servlet>
<!--        servlet-name是servlet程序的别名(一般是类名)-->
        <servlet-name>HelloServlet</servlet-name>
<!--        servlet-class是servlet程序的全类名(包加类名)-->
        <servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>


        <!--    init初始化参数-->
        <init-param>
            <param-name>username</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql://localhost:3306/test</param-value>
        </init-param>
    </servlet>

在这里插入图片描述
在这里插入图片描述
除了在init方法中可以使用servletConfig可以使用

在 doGet(){ // 等方法中也可以
// 也可通过getServletConfig()
ServletConfig servletConfig = getServletConfig();

}

注意:重写init(),要调用super

在这里插入图片描述

ServletContext类

在这里插入图片描述
4、ServletContext是在web工程部署启动时创建,web停止时销毁

ServletContext作用

1)获取web.xml上下文参数

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

3)获取部署后在磁盘上的绝对路径

4)像Map一样存取数据

// 在自定义类 ContextServlet中,获取
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext context = getServletConfig().getServletContext();
        context.getInitParameter("1 上下文参数"+"username");
        context.getInitParameter("密码"+"password");
        System.out.println("2 当前路径"+ context.getContextPath());
        // 路径 / 表示:解析地址为:http://ip:port/工程名/  ====>也就是指当前项目的06_servlet/web/
        System.out.println("3 工程部署的路径"+context.getRealPath("/"));
        // 获取/web/css如下写法
        System.out.println("工程部署的路径"+context.getRealPath("/css"));


		// 存储--------
		ServletContext context1 = getServletContext();
        System.out.println(" 4  保存前的context1获取key1"+context1.getAttribute("key1"));//结果为null

        context1.setAttribute("key1","root"); //结果为root
        context1.setAttribute("key1","root"); //结果为root
    }

// ==============================================

// 在web.xml配置上下文
<!--    上下文参数-->
    <context-param>
        <param-name>username</param-name>
        <param-value>root</param-value>
    </context-param>
    <context-param>
        <param-name>password</param-name>
        <param-value>123456</param-value>
    </context-param>

在这里插入图片描述
在这里插入图片描述

请求格式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

响应格式

在这里插入图片描述

MIME类型说明

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值