Servlet(一)

文章目录

1.Servlet整体框架

2.Servlet快速入门

1.创建项目配置基本环境

上个文件有详细介绍

2.添加jar包
1.在WEB-INF下创建目录lib,添加文件
2.添加到项目中
3.配置代码提示
3.src下创建文件
4.实现Servlet接口
java 复制代码
package HelloServlet;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
public class HelloServlet implements Servlet {
    /**
     * 当创建HelloServlet会调用,且只会调用一次
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init()");
    }

    /**
     * 返回ServletConfig,也就是servlet的配置
     * @return
     */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * 1.该方法处理浏览器的请求
     * 2.当浏览器每次请求一次servlet时,就会调用一次
     * 3.当tomcat调用该方法时,会把http请求的数据封装成实现ServletRequest接口的request对象
     * 4.通过servletRequest对象,可以得到用户提交的数据
     * 5.ServletResponsed对象可以用于返回数据给tomcat服务器
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hi, helloServlet");
    }

    /**
     * 返回servlet的信息,使用较少
     * @return
     */
    @Override
    public String getServletInfo() {
        return null;
    }

    /**
     * 1.该方法是servlet销毁时调用的
     * 2.只会调用一次
     */
    @Override
    public void destroy() {

    }
}
5.在web.xml配置HelloServlet
6.通过浏览器访问HelloServlet

3.浏览器访问Servlet的流程分析

一共有三个容器
url-name
name-全类名
name-实例
Servlet的生命周期
初始化阶段
处理浏览器请求阶段
终止阶段

4.GET和POST的分发处理

代码示例
java 复制代码
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //GET和POST的分发处理
        //1.首先需要知道,ServletRequest的运行类型其实是它的子类HttpServletRequest的实现类,而getMethod方法是这个子接口的,所以需要将这个父接口转换为子接口的类型
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; //现在就是他的子接口,指向它的实现类,封装了请求的方法
        String method = httpServletRequest.getMethod();
        if (method.equals("GET")) {
            doGet();
        }
        else if (method.equals("POST")) {
            doPost();
        }
    }
    //编写doGet和doPost方法,用于分发处理
    public void doGet() {
        System.out.println("doGet被调用");
    }
    public void doPost() {
        System.out.println("doPost被调用");
    }
jsp 复制代码
<%--
  Created by IntelliJ IDEA.
  User: 8615941515990
  Date: 2024/1/24
  Time: 16:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <form action="http://localhost:8080/servlet/helloServlet" method="post">
    username: <input type="text" name="username">
  </form>
  </body>
</html>

5.继承HttpServlet来开发Servlet

1.创建文件
2.配置web.xml
3.实现doGet和doPost方法并编写
java 复制代码
package HelloServlet;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
public class HiServlet extends HttpServlet {

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}
4.浏览器访问
5.过程解析
1.http://localhost:8080/servlet/hiServlet发送请求到Tomcat服务
2.Tomcat服务根据资源路径/hiServlet,找到HelloServlet.HiServlet
3.创建HiServlet的实例,并调用它的init()方法和service()方法
4.init()方法就是个空的,重点看service()方法,是它的父类HttpServlet的
6.debug方法
1.打断点
2.debug
3.输入网址
4.此时由于是get方式,所以程序会停在断点处
5.查看运行类型的确是HiServlet

6.Servlet注意事项

最简化的浏览器访问Servlet过程
  1. 浏览器向Tomcat服务发送请求
  2. Tomcat服务根据浏览器地址最后的路由/xxx去web.xml中找到对应的类并创建一个对象
  3. 调用init()方法和service()方法
  4. 第二次则直接调用service()方法

7.Servlet注解方式

1.快速入门
1.代码实例
java 复制代码
package annotation;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
//使用注解配置路由,一个servlet可以有多个路由,访问网址为http://localhost:8080/servlet/ok1 或者http://localhost:8080/servlet/ok2
@WebServlet(urlPatterns = {"/ok1", "/ok2"})
public class OkServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("注解的doGet");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("注解的doPost");
    }
}
2.结果
2.Servlet注解方式解密
1.与xml方式的区别
简要介绍
  1. 浏览器向Tomcat服务发送请求
  2. 服务扫描所有类的全路径并且通过反射获取注解对象,从而得到urlPatterns(路由)
  3. 将其与浏览器地址最后的/xxx比对,如果比对成功则调用init()方法和service()方法
  4. 第二次就直接调用service()方法
2.Servlet注解的参数说明
3.注解URL的4种匹配方式
1.精确匹配
2.目录匹配
3.扩展名匹配
4.任意匹配
4.URL配置注意事项

8.课后练习

1.练习一
login.html
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8080/servlet/cat" method="post">
  username:<input name="username" type="text">
</form>
</body>
</html>
CatServlet.java
java 复制代码
package HomeWork;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
public class CatServlet implements Servlet {
    private int num = 0; //统计次数
    @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 {
        System.out.println("访问次数:" + (++num));
        //向下转型获取请求方式
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        String method = httpServletRequest.getMethod();
        if (method.equals("GET")) {
            System.out.println("GET");
        }
        else if (method.equals("POST")) {
            System.out.println("POST");
        }
    }


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

    @Override
    public void destroy() {

    }
}
web.xml
结果
2.练习二
login.html
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8080/servlet/dog" method="post">
  username:<input name="username" type="text">
</form>
</body>
</html>
DogServlet.java
java 复制代码
package HomeWork;

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

/**
 * @author 孙显圣
 * @version 1.0
 */
public class DogServlet extends HttpServlet {
    //统计次数
    private int get = 0;
    private int post = 0;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("GET:" + (++get));
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("POST:" + (++post));
    }
}
web.xml
结果
3.练习三
PigServlet.java
java 复制代码
package HomeWork;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.InetAddress;

/**
 * @author 孙显圣
 * @version 1.0
 */
@WebServlet(urlPatterns = {"/pig1", "/pig2"})
public class PigServlet extends HttpServlet {
    //统计次数
    private int get = 0;
    private int post = 0;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("发出请求的浏览器的ip:" + req.getRemoteAddr());
        System.out.println("GET:" + (++get));
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("发出请求的浏览器的ip:" + req.getRemoteAddr());
        System.out.println("POST:" + (++post));
    }
}
结果
相关推荐
识途老码2 天前
Centos7安装Jenkins
运维·servlet·jenkins
奔跑吧邓邓子2 天前
Jenkins从入门到精通,构建高效自动化流程
servlet·自动化·jenkins
人生匆匆3 天前
bluefs _flush_range allocated: osd用空间但是显示ceph_bluefs_db_used_bytes is 100%
数据库·ceph·servlet
周巴帝3 天前
2024新版IDEA创建JSP项目
java·ide·intellij-idea·javaweb·jsp
天下蒂一厨3 天前
jenkins微服务
linux·servlet·微服务·jenkins
Liuxu09034 天前
Ajax开发技术
java·前端·ajax·okhttp·javaweb
cyt涛6 天前
WEB服务器——Tomcat
运维·服务器·http·servlet·tomcat·web·jsp
算法与编程之美6 天前
通过两个类计算一个长方形的周长和面积
java·开发语言·javascript·jvm·servlet
不修×蝙蝠6 天前
后端(实例)08
java·后端·servlet·eclipse
学习Java的aki6 天前
Servlet——springMvc底层原理
servlet