RequestResponse

news2024/11/24 13:09:13

image-20221217164932109

Request

Request继承体系

image-20221217171358015

Request获取请求数据

获取请求数据

image-20221217172606995

通用方式获取请求参数

image-20221217193709478

@WebServlet("/req1")
public class req1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //System.out.println("get...");
        // 获取所有参数的Map集合
        Map<String, String[]> parameterMap = req.getParameterMap();
        for (String s : parameterMap.keySet()) {
            System.out.print(s+":");
            String[] strings = parameterMap.get(s);
            for (String string : strings) {
                System.out.print(string+" ");
            }
            System.out.println();
        }
        // 根据key获取参数值。数组
        System.out.println("----------------");
        String[] hobbies = req.getParameterValues("hobby");
        for (String hobby : hobbies) {
            System.out.println(hobby);
        }
        // 根据key获取单个参数值
        System.out.println("-------------------");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println(username);
        System.out.println(password);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

image-20221217194508775

请求参数中文乱码

image-20221217213143179

@WebServlet("/req2")
public class req2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        username = new String(username.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);
        System.out.println(username);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        this.doGet(request, response);
    }
}

image-20221217213224318

Request请求转发

image-20221217222149294

Response

image-20221218153248538

Response设置响应数据功能介绍

image-20221218153557844

Response完成重定向

image-20221218155622573

目录问题

image-20221218160257377

动态获取虚拟目录:

image-20221218160502108

Response响应字符数据

image-20221218161944387

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 设置解析方式,和字符集
    //response.setHeader("content-type","text/html");
    response.setContentType("text/html;charset=utf-8");
    // 获取流
    PrintWriter writer = response.getWriter();
    writer.write("<h1>侯一鸣</h1>");
}

Response响应字节数据

image-20221218163234515

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 读取文件
        FileInputStream fis = new FileInputStream("d://桌面/1.png");

        // 获取response的输出流
        ServletOutputStream os = response.getOutputStream();

        // 完成流的拷贝
//        byte[] bytes = new byte[1024];
//        int len = 0;
//        while ((len = fis.read(bytes)) != -1){
//            os.write(bytes,0,len);
//        }
        IOUtils.copy(fis,os);
        fis.close();
    }

案例

用户登录

image-20221218214554146

image-20221218220015936

编写LoginServlet方法

@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        //调用maybatis查询
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.select(username, password);
        sqlSession.close();

        // 判断
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        if(user != null){
            writer.write("登陆成功");
        }else{
            writer.write("登陆失败");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

用户注册

image-20221219111745533

registerServlet

@WebServlet("/registerServlet")
public class registerServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        User user = new User();
        user.setUsername(username);
        user.setPassword(password);

        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        User u = mapper.selectByUsername(username);
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        if (u == null){
            mapper.add(user);
            sqlSession.commit();// 增删改需要提交事务
            sqlSession.close();
            writer.write("注册成功");
        }else{
            writer.write("用户名已存在");
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

SqlSessionFactory工具类抽取

image-20221219113835251

package com.houyiming.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class SqlSessionFactoryUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        // 静态代码块会随着类的加载自动执行,且只执行一次
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
}

可以用一行代码代替原来的三行

// 原来的三行
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);


// 新的一行
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
= "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);


// 新的一行
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/100293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑怎么隐藏文件夹?6个步骤完成!

在日常办公使用电脑的过程中&#xff0c;总会出现各种问题。比如&#xff1a;电脑怎么隐藏文件夹&#xff1f;当我们需要这些数据时&#xff0c;我们又该如何恢复&#xff1f;为了解决这些问题&#xff0c;小编在这里总结了6个操作步骤来隐藏文件夹数据的方法。让我们一起来看看…

【代码随想录】Day34链表:力扣203,707,206,142,面试0207

目录 基本知识 概念、类型、存储方式&#xff1a; 定义 操作 性能分析 经典方法 虚拟头结点 思路 例题&#xff1a;力扣203 链表的基本操作 思路 例题&#xff1a;力扣707 反转链表 思路 例题&#xff1a;力扣206 删除倒数第N个结点 思路&#xff1a; 例题&am…

jsp+ssm计算机毕业设计-东湖社区志愿者管理平台【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

[附源码]计算机毕业设计Python的在线作业批改系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

tomcat 服务突然停止、日志排查以及解决方案

文章目录一、服务停止调研1. jvm排查2. 日志排查3. 推测与ssh会话有关二、ssh会话强制退出验证2.1. 手动强制关闭进程12.2. 手动强制关闭进程22.3. 总结归纳与解决方案一、服务停止调研 1. jvm排查 有可能是jvm配置参数导致的&#xff0c;然后在/var/log和/app/apache-tomcat…

2022 软件测试大题【太原理工大学】

大题应该是有两道&#xff0c;每道10分&#xff0c;具体是不是我也不知道&#xff0c;老师也不确定。① 白盒测试 —— 控制流图&#xff0c;给出一段代码&#xff0c;画出控制流图&#xff0c;根据公式求程序段的环形复杂度&#xff0c;求程序基本路径集合中的独立路径&#x…

永磁同步电机(PMSM)磁场定向控制(FOC)电流环PI调节器参数整定

文章目录前言一、调节器的工程设计方法二、电流环PI调节器的参数整定2.1.电流环的结构框图2.2.典型I型系统2.3.电流环PI参数整定计算公式三、电流环PI调节器设计实例3.1.永磁同步电机磁场定向的电流闭环控制3.2.电流环PI参数计算3.3.仿真分析总结前言 本章节采用工程设计的方法…

CommaFeed:仿Google Readerd的RSS阅读器

最近老苏身边中招的人也开始多起来了&#xff0c;大家要保重~ 本文开始于 9 月下旬&#xff0c;完成于 10 月下旬&#xff0c;目前正式版本还是老苏打包时用的 2.6.0&#xff0c;不过现在已经有了 3.0.0 RC1 什么是 CommaFeed &#xff1f; CommaFeed 是受 Google Reader 启发而…

CS144-Lab0解析

讲在开头 cs144建议我们使用Modern C来完成所有的lab&#xff0c;关于modern c的全面的用法可以在(http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)获取。 以下是一些代码规范&#xff1a; 不要使用malloc()和free()不要使用new和delete在不得不使用指针时应…

如何自动估算项目开发成本及报价,提高估算效率?

项目估算需要有科学专业的估算方法&#xff0c;需要有明确的量化指标&#xff0c;那么如何自动估算项目开发成本及报价&#xff1f; 第一步&#xff1a;功能点复杂程度的估算 CoCode需求分析工具&#xff0c;根据用户需求&#xff0c;使用COSMIC和IFPUG项目规模估算法&#xff…

数据结构C语言版 —— 队列+循环队列实现

文章目录队列1.概念2. 生活中队列应用3. 队列的实现初始化队列入队列出队列获取队头元素获取队尾元素获取队列中元素个数判断队列是否为空销毁队列2. 循环队列队列 1.概念 和栈相反&#xff0c;队列(queue)是一种先进先出的线性表&#xff0c;它只允许在一端进行插入&#xf…

C#-winform调用COM组件(COM组件由Qt开发)

一、场景介绍 在项目开发中,需要Qt与C#进行混合编程,完成项目开发。C#这边作为主框架,Qt负责编写插件,将功能模块通过COM组件的形式封装注册,再由C#调用、交互完成最终的项目。 程序开发环境: win10 64位 编译器: VS2017 Qt版本: Qt5.12.6 二、Qt封装COM组件 2.1 环境…

android flutter 安装

下载 flutter官网下载安装&#xff1a;https://flutter.dev/docs/development/tools/sdk/releases 将下载下来的zip安装包解压到想安装Flutter SDK的路径。注意&#xff0c;不要将flutter安装到需要一些高权限的路径&#xff0c;比如C:\Program Files\ 配置环境变量 添加fl…

案例教学 | 如何确定ADAMS简化模型的准确性,以及简化模型精度不够怎么办?

仿真建模过程中不可避免地对各种复杂元素进行简化处理。这种建模思路的终极目标是不牺牲仿真精度、还提升仿真效率。在Adams仿真建模过程中也有一些常见的简化方式&#xff0c;如非线性元素按线性建模、不考虑摩擦力、通过耦合约束等效传动关系等等。应用简化建模之前&#xff…

蓝桥杯有必要参赛吗?

昨天和群里的小伙伴在群里聊&#xff0c;有的小伙伴竟然说蓝桥杯一等奖没有含量&#xff0c;我也是醉了&#xff01; 就像去年看了一个号主写的&#xff1a;研究生遍地都是! 放眼全国14亿人口&#xff0c;别说研究生了&#xff0c;本科生占比有多少? “蓝桥杯是我人生中得到…

多态性:中的向下转型,instanceof 操作符的使用

多态性&#xff1a;中的向下转型&#xff0c;instanceof 操作符的使用 每博一文案 都说树叶不是一天变黄的&#xff0c;人心也不是一天变凉的&#xff0c;每一个现在的自己&#xff0c;其实都是过去的自己拼凑的。 如今我们的气质里都藏着过去走过的路&#xff0c;看过的书和爱…

混合模式和预乘原理的理解

首先说到混合模式&#xff0c;简单理解&#xff0c;混合模式就是同一像素上有两个颜色需要混合成一个使用的模式。 这里的两个像素点&#xff0c;我们把原先已经存在的&#xff0c;也就是下面的像素点颜色定义为目标颜色。把新加上来的&#xff0c;也就是上面的像素点颜色定义为…

【Selenium IDE录制脚本】三分钟教会你安装Selenium IDE的安装及使用

目录 1、安装Selenium IDE 1.1、安装Firefox浏览器 1.2、安装selenium IDE 2、selenium的脚本录制 1、安装Selenium IDE 1.1、安装Firefox浏览器 因为selenium的不同版本对Firefox的支持不同&#xff0c;所以我们安装了Firefox之后&#xff0c;需要关闭他的自动更新 搜索&…

Python-Tinydb数据库详解

目录 数据库 Tinydb Tinydb 使用 安装 导入 创建数据库 创建 table 增 删 查 改 其他函数 示例 最后 数据库 数据库就是存储数据的的地方&#xff0c;现在我们生活中几乎每时每刻做的事可能都有它的作用。今天来介绍 Tinydb 数据库&#xff0c;它适合初学者&am…

设计模式概述之建造者模式(五)

常说的设计模式是23种设计模式&#xff0c;分为3大类&#xff1a; 创建型模式5种&#xff1a;工厂方法、抽象工厂、单例、建造者、原型 结构型模式7种&#xff1a;适配器、代理、桥接、装饰者、外观、享元、组合 行为型模式11种&#xff1a;模板方法、解释器、策略、观察者、…