一个Servlet是如何处理多个请求的?

 更新时间:2021年06月16日 11:42:35   作者:我愿成为你头顶的云  
以前我一直以为一个Servlet只能处理一个请求,后来发现是自己太菜了,可以借助携带一个参数来完成多个请求的处理,根据参数的不同,在核心的service方法中调用不同的业务方法,来实现处理多个servlet请求的目的,废话不多说,直接上代码,需要的朋友可以参考下

1、servlet层

package com.ycz.controller;

import com.alibaba.fastjson.JSON;
import com.ycz.dao.PeopleDao;
import com.ycz.domain.People;

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;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @Description
 * @ClassName MyServlet
 * @Author yanchengzhi
 * @date 2021.06.06 20:16
 */
public class MyServlet extends HttpServlet {

    PeopleDao peopleDao = new PeopleDao();

    /*
    * @description: servlet的核心方法,每个servlet请求都会经过此方法处理
    * @param: [req, res]
    * @return: void
    * @author: yanchengzhi
    * @date: 2021/6/14 10:52
    */
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest)req;
        HttpServletResponse response = (HttpServletResponse)res;
        String command = request.getParameter("COMMAND");
        if("ADD".equals(command)) {
            addPeople(request,response);
            return;
        }
        if("UPDATE".equals(command)){
            updatePeople(request,response);
            return;
        }
        if("DEL".equals(command)) {
            deletePeople(request,response);
            return;
        }
        if("FIND".equals(command)) {
            findById(request,response);
            return;
        }
        if("FINDALL".equals(command)) {
            findAll(request,response);
            return;
        }
    }

    /*
    * @description: 添加
    * @param: [request, response]
    * @return: void
    * @author: yanchengzhi
    * @date: 2021/6/14 10:51
    */
    private void addPeople(HttpServletRequest request,HttpServletResponse response) throws IOException {
        People people = new People();
        people.setName("云过梦无痕");
        people.setBirth(new Date());
        people.setTag(0);
        response.setContentType("text/html;charset=utf-8");
        //response.setContentType("text/plain; charset=UTF-8");
        PrintWriter writer = response.getWriter();
        int res = peopleDao.addPeople(people);
        if(res > 0){
            writer.write("<h2>添加成功!</h2>");
        } else {
            writer.write("<h2>添加失败!</h2>");
        }
        writer.flush();
        writer.close();
    }


    /*
    * @description: 修改
    * @param: [request, response]
    * @return: void
    * @author: yanchengzhi
    * @date: 2021/6/14 10:54
    */
    private void updatePeople(HttpServletRequest request,HttpServletResponse response) throws IOException {
        // 获取修改记录的id
        Integer id = Integer.parseInt(request.getParameter("id"));
        People p = new People();
        p.setName("yanchengzhi");
        Calendar calendar = Calendar.getInstance();
        calendar.set(1995,9,18);
        Date date = calendar.getTime();
        p.setBirth(date);
        int res = peopleDao.updatePeople(p,id);
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        if(res > 0){
            writer.write("<h2>修改成功!</h2>");
        } else {
            writer.write("<h2>修改成功!</h2>");
        }
        writer.flush();
        writer.close();
    }
    
    /*
    * @description: 删除记录
    * @param: [request, response]
    * @return: void
    * @author: yanchengzhi
    * @date: 2021/6/14 12:15
    */
    private void deletePeople(HttpServletRequest request,HttpServletResponse response) throws IOException{
        Integer id = Integer.parseInt(request.getParameter("id"));
        int res = peopleDao.delPeople(id);
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        if(res > 0) {
            writer.write("<h2>删除成功!</h2>");
        } else {
            writer.write("<h2>删除失败!</h2>");
        }
        writer.flush();
        writer.close();
    }

    /*
    * @description: 按照id查询
    * @param: [request, response]
    * @return: void
    * @author: yanchengzhi
    * @date: 2021/6/14 14:20
    */
    private void findById(HttpServletRequest request,HttpServletResponse response) {
        Integer id = Integer.parseInt(request.getParameter("id"));
        People p = peopleDao.findById(id);
        if(p != null) {
            System.out.println("查找的记录信息如下:");
            System.out.println("-------------------");
            System.out.println("Id号:" + p.getId());
            System.out.println("姓名:" + p.getName());
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
            System.out.println("生日:" + sdf.format(p.getBirth()));
            System.out.println("Tag标记:" + p.getTag());
        } else {
            System.out.println("查询的记录不存在!");
        }
    }

    private void findAll(HttpServletRequest request,HttpServletResponse response) throws IOException{
        List<People> list = peopleDao.findAll();
        response.setContentType("text/plain;charset=utf-8");
        PrintWriter writer = response.getWriter();
        if(list != null && list.size() > 0){
            // 转为json串
            String jsonStr = JSON.toJSONString(list);
            writer.write(jsonStr);
        } else {
            writer.write("查无数据!");
        }
    }
}

关注重点是service方法里的这些代码:

在这里插入图片描述

然后jsp中的代码如下:

在这里插入图片描述

可以看到一个共同点,就是所有的a链接后面都带有一个COMMAND参数,只是绑定的值不一样,就是根据这个绑定的值,来进入到不同的业务方法中。

2、dao层代码

package com.ycz.dao;

import com.ycz.conf.DataSourceManager;
import com.ycz.domain.People;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 * @Description  数据访问层
 * @ClassName PeopleDao
 * @Author yanchengzhi
 * @date 2021.06.08 08:50
 */
public class PeopleDao {


    /*
    * @description: 添加
    * @param: [people]
    * @return: int
    * @author: yanchengzhi
    * @date: 2021/6/14 11:03
    */
    public int addPeople(People people){
        int res = 0;
        String sql = "insert into people (name,birth,tag) values (?,UNIX_TIMESTAMP(?),?)";
        Connection connection = DataSourceManager.getConnection();
        PreparedStatement ps = null;
        try {
            ps = connection.prepareStatement(sql);
            ps.setString(1,people.getName());
            ps.setDate(2,new Date(people.getBirth().getTime()));
            ps.setInt(3,people.getTag());
            res = ps.executeUpdate();
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            DataSourceManager.closeConnection(connection);
            DataSourceManager.closeStatement(ps);
        }
        return res;
    }

    /*
    * @description: 修改
    * @param: [p, id]
    * @return: int
    * @author: yanchengzhi
    * @date: 2021/6/14 11:03
    */
    public int updatePeople(People p, Integer id) {
        int res = 0;
        String sql = "update people set name = ?,birth = UNIX_TIMESTAMP(?) where id = ?";
        Connection connection = DataSourceManager.getConnection();
        PreparedStatement ps = null;
        try {
            ps = connection.prepareStatement(sql);
            ps.setString(1,p.getName());
            ps.setDate(2,new Date(p.getBirth().getTime()));
            ps.setInt(3,id);
            res = ps.executeUpdate();
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            DataSourceManager.closeConnection(connection);
            DataSourceManager.closeStatement(ps);
        }
        return res;
    }

    /*
    * @description: 删除
    * @param: [id]
    * @return: int
    * @author: yanchengzhi
    * @date: 2021/6/14 12:20
    */
    public int delPeople(Integer id) {
        int res = 0;
        String sql = "delete from people where id = ?";
        Connection connection = DataSourceManager.getConnection();
        PreparedStatement ps = null;
        try {
            ps = connection.prepareStatement(sql);
            ps.setInt(1,id);
            res = ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DataSourceManager.closeConnection(connection);
            DataSourceManager.closeStatement(ps);
        }
        return res;
    }

    /*
    * @description: 按照id查询
    * @param: [id]
    * @return: com.ycz.domain.People
    * @author: yanchengzhi
    * @date: 2021/6/14 14:20
    */
    public People findById(Integer id) {
        String sql = "select id,name,FROM_UNIXTIME(birth) birthday,tag from people where id = ?";
        Connection connection = DataSourceManager.getConnection();
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        try {
            ps = connection.prepareStatement(sql);
            ps.setInt(1,id);
            resultSet = ps.executeQuery();
            while(resultSet.next()){
                People p = new People();
                p.setId(resultSet.getInt("id"));
                p.setName(resultSet.getString("name"));
                p.setBirth(resultSet.getDate("birthday"));
                p.setTag(resultSet.getInt("tag"));
                return p;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DataSourceManager.closeConnection(connection);
            DataSourceManager.closeStatement(ps);
            DataSourceManager.closeResultSet(resultSet);
        }
        return null;
    }

    /*
    * @description: 查询所有记录
    * @param: []
    * @return: java.util.List<com.ycz.domain.People>
    * @author: yanchengzhi
    * @date: 2021/6/14 14:43
    */
    public List<People> findAll() {
        List<People> peoples = new ArrayList<>();
        String sql = "select id,name,FROM_UNIXTIME(birth) birthday,tag from people";
        Connection connection = DataSourceManager.getConnection();
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        try {
            ps = connection.prepareStatement(sql);
            resultSet = ps.executeQuery();
            while(resultSet.next()){
                People p = new People();
                p.setId(resultSet.getInt("id"));
                p.setName(resultSet.getString("name"));
                p.setBirth(resultSet.getDate("birthday"));
                p.setTag(resultSet.getInt("tag"));
                peoples.add(p);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DataSourceManager.closeConnection(connection);
            DataSourceManager.closeStatement(ps);
            DataSourceManager.closeResultSet(resultSet);
        }
        return peoples;
    }
}

3、web.xml

在这里插入图片描述

到此这篇关于一个Servlet是如何处理多个请求的?的文章就介绍到这了,更多相关Servlet处理多个请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中i++与++i的区别和使用

    Java中i++与++i的区别和使用

    这篇文章主要介绍了Java中i++与++i的区别和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Java漏桶算法的简单代码实例

    Java漏桶算法的简单代码实例

    这篇文章主要介绍了Java漏桶算法的简单代码实例,漏桶算法的意义在于能够平滑请求,不给下游服务造成过大压力,特别适用于突发流量或者定时任务拉取大量数据时,需要处理大量数据或者请求的场景,需要的朋友可以参考下
    2024-01-01
  • SpringBoot使用前缀树过滤敏感词的方法实例

    SpringBoot使用前缀树过滤敏感词的方法实例

    Trie也叫做字典树、前缀树(Prefix Tree)、单词查找树,特点:查找效率高,消耗内存大,这篇文章主要给大家介绍了关于SpringBoot使用前缀树过滤敏感词的相关资料,需要的朋友可以参考下
    2022-01-01
  • Java结构型设计模式之组合模式详解

    Java结构型设计模式之组合模式详解

    组合模式,又叫部分整体模式,它创建了对象组的数据结构组合模式使得用户对单个对象和组合对象的访问具有一致性。本文将通过示例为大家详细介绍一下组合模式,需要的可以参考一下
    2022-09-09
  • java与c#的语法区别详细介绍

    java与c#的语法区别详细介绍

    由C#转入Java一段时间了,总结下个人认为的Java同C#语法之间的不同之处,有不同意见之处还望各位海涵,刚学Java时觉得语法同C#大致是相同的(应该说C#同Java大致相同
    2012-11-11
  • Maven项src/main/java目录下配置文件无法被导出或者生效的问题和处理方案

    Maven项src/main/java目录下配置文件无法被导出或者生效的问题和处理方案

    这篇文章主要介绍了Maven项src/main/java目录下配置文件无法被导出或者生效的问题和处理方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java简易登录注册功能实现代码解析

    Java简易登录注册功能实现代码解析

    这篇文章主要介绍了Java简易登录注册功能实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • java 中Map详解及实例代码

    java 中Map详解及实例代码

    这篇文章主要介绍了java 中Map详解及实例代码的相关资料,需要的朋友可以参考下
    2017-04-04
  • Spring中的Aware接口详细解析

    Spring中的Aware接口详细解析

    这篇文章主要介绍了Spring中的Aware接口详细解析,Aware是一个具有标识作用的超级接口,具体实现是有子接口去决定的,但是子接口至少要有一个带一个参数的且返回是空的方法,需要的朋友可以参考下
    2023-12-12
  • 一篇文章带你学习Mybatis-Plus(新手入门)

    一篇文章带你学习Mybatis-Plus(新手入门)

    这篇文章主要介绍了MyBatis-Plus 快速入门案例(小白教程),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08

最新评论