Servlet

1.什么是Servlet

        1.1 servlet是javaEE规范之一。规范就是接口

        1.2 Servlet是JavaWeb三大组件之一。三大组件分别是:Servlet程序,Filter过滤器,                                 Listener监听器。

        1.3 Servlet是运行在服务器上的一个java小程序,它可以接收客户端发送过来的请求,

                并响应数据给客户端。

2. 手动实现Servlet程序

        2.1 编写一个类去实现Servlet接口

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

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

实现类实现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;
    }

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

    @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-mapping>
        <!-- servlet-name 标签的作用是告诉服务器,我当前配置的地址给哪个Servlet程序使用      -->
        <servlet-name>HelloServlet</servlet-name>
        <!-- url-pattern 标签配置访问地址
                /斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径
               /hello 表示表示地址为:http://ip:port/工程路径/hello     <br/>
               -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

</web-app>

常见错误1: url-pattern中路径没有以 / 开头;

常见错误2:servlet-name 配置的值不存在;

 常见错误3:servlet-class标签 全路径名错误;

3. Servlet-url地址如何定位到Servlet程序去访问

4.Servlet的声明周期

        1.执行Servlet构造器方法

        2. 执行init初始化方法

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

        3. 执行service方法

                第三步每次访问都会调用;

        4. 执行destroy方法

                第四步,在web工程停止的时候才会调用;

5. servlet请求分发处理

web 文件夹下新建html页面。

 a.html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="http://localhost:8080/06_servlet/hello" method="get">
        <input type="submit">
    </form>
</body>
</html>

访问地址:http://localhost:8080/06_servlet/a.html

 @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3. service === Hello Servlet 被访问了");
        HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
        String method = httpServletRequest.getMethod();
        System.out.println(method);

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

    public void doGet(){
        System.out.println("Get请求");
        System.out.println("Get请求");
    }

    public void doPost(){
        System.out.println("Post请求");
        System.out.println("Post请求");
    }

6. 通过继承HttpServlet实现 Servlet程序

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

1. 编写一个类去继承HttpServlet类;

2. 根据业务需要重写doGet 或 doPost方法;

3. 到web.xml中配置 Servlet程序的访问地址;

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;

public class HelloServlet2 extends HttpServlet {

    /**
     * doGet()在get请求时候调用
     * */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloServlet2的doGet方法");
    }

    /**
     * doPost()在post请求时候调用
     * */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloServlet2的doPost方法");
    }
}

 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>
        <servlet-name>HelloServlet2</servlet-name>
        <servlet-class>com.atguigu.servlet.HelloServlet2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet2</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>

</web-app>

7.通过IDEA生成Servlet程序

 

 

8. Servlet类的继承体系

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值