Servlet应用(Request+response对象)

news2025/1/18 10:02:51

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:JAVA开发者成长之路
✨特色专栏:国学周更-心性养成之路
🥭本文内容:Servlet应用(Request+response对象)
更多内容点击👇
      Java Servlet详解(补充,极其重要)

本文目录

    • Request对象
      • 【1】get和post区别
      • 【2】request主要方法
      • 【3】request应用
        • 1、编写HTML页面
        • 2、编写Servlet类
        • 3、浏览器提交
        • 4、后台获取数据
      • 【4】get请求收参问题
      • 【5】get中文乱码
      • 【6】post中文乱码
    • response对象
      • 【1】response主要方法
      • 【2】response应用
      • 【3】解决输出中文乱码
    • 综合案例(Servlet+JDBC)
      • 【1】案例需求
      • 【2】创建表admin并添加数据
      • 【3】搭建项目框架
      • 【4】HTML页面
      • 【5】LoginServlet
      • 【6】ShowAllAdminServlet

在这里插入图片描述

Request对象

在Servlet中用来处理客户端请求需要用doGet或doPost方法中的request对象。

在这里插入图片描述

【1】get和post区别

get请求

  • get提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连
  • get方式明文传递,数据量小,不安全
  • 效率高,浏览器默认请求方式为get请求
  • 对应的Servlet的方法是doGet()

post请求

  • post方法是把提交的数据放在HTTP包的body中
  • 密文传递数据,数据量大,安全
  • 效率没有get高
  • 对应的Servlet的方法是doPost()

【2】request主要方法

方法名方法说明
String getParameter(String name)根据表单组件名称获取提交的数据
void setCharacterEncoding(String charset)指定每个请求的编码

【3】request应用

1、编写HTML页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>欢迎页面</title>
</head>
<body>
    <h1>欢迎你</h1>
    <form action="welcomeServlet" method="post">
        <label>姓名:</label><input type="text" name="username" /><br />
        <label>年龄:</label><input type="text" name="userage" /><br />
        <input type="submit" value="提交" />
    </form>
</body>
</html>

2、编写Servlet类

package com.cxyzxc.www.demo01;

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;
@WebServlet("/welcomeServlet")
public class WelcomeServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取表单提交的姓名
        String username = req.getParameter("username");
        //获取表单提交的年龄
        String userage = req.getParameter("userage");
        //服务器端输出获取到的数据
        System.out.println("客户端发来的信息:姓名:"+username+",年龄:"+userage);
    }

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

3、浏览器提交

通过Hello.html进入登陆页面,然后提交登录信息到Servlet中去。

在这里插入图片描述

4、后台获取数据

servlet获取html提交的数据,将其数据打印到控制台。

在这里插入图片描述

【4】get请求收参问题

get请求发送后,在服务器端获取数据产生乱码,是因为服务器和客户端沟通的编码不一致造成的,所以解决办法是在客户端和服务器之间设置一个统一的编码,之后就按照设置的编码进行数据的传输和接收。

【5】get中文乱码

在Tomcat7及以下版本,客户端以UTF-8的编码传输数据到服务器端,而服务器端的request对象使用的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不一致,因此会产生中文乱码。

  • 1)解决办法:在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。
  • 2)Tomcat8的版本中get不会出现乱码了,因为服务器对url的编码格式可以自动转换。

【6】post中文乱码

由于客户端是以 UTF-8 字符编码将表单数据传输到服务器端的,因此服务器端也需要设置以UTF-8字符编码进行接收。

解决方法:使用从ServletRequest接口继承而来的 setCharacterEncoding(charset) 方法进行统一的编码设置。

response对象

response对象用于响应客户请求并向客户端输出信息

在这里插入图片描述

【1】response主要方法

方法名称方法作用
setHeader(name,value)设置响应信息头
setContenType(String)设置响应文件类型、响应式的编码格式
setCharacterEncoding(String)设置服务端响应内容编码格式
getWriter()获取字符输出流

【2】response应用

在这里插入图片描述
在这里插入图片描述
如果输出内容包含中文,则出现乱码,因为服务器默认采用ISO8859-1编码响应内容

在这里插入图片描述

在这里插入图片描述

【3】解决输出中文乱码

方式一:设置服务器端响应的编码格式和设置客户端响应内容的头内容的文件类型及编码格式,这种方式不推荐

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

方式二:同时设置服务端的编码格式和客户端响应的文件类型及响应时的编码格式,推荐此方式

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

综合案例(Servlet+JDBC)

在MySQL中新建一个servletdatabase数据库,专门用来学习servlet操作数据库

【1】案例需求

实现登录功能、展示所有用户功能

【2】创建表admin并添加数据

#创建表admin
CREATE TABLE IF NOT EXISTS `admin`(
`username` VARCHAR(20) PRIMARY KEY,
`password` VARCHAR(20) NOT NULL,
`phone` VARCHAR(11) UNIQUE NOT NULL,
`address` VARCHAR(20) NOT NULL
);

#向admin表中插入数据
INSERT INTO `admin`(`username`,`password`,`phone`,`address`)
VALUES('张三','123456','13112345678','安徽合肥蜀山区');

INSERT INTO `admin`(`username`,`password`,`phone`,`address`)
VALUES('李四','123456','13822334455','安徽合肥高新区');

【3】搭建项目框架

1)创建项目

2)导入响应的jar包

3)创建工具包,创建工具类

4)创建实体类

5)创建AdminDao接口

6)创建AdminDaoImpl实现类

7)创建AdminService接口

8)创建AdminServiceImpl实现类

【4】HTML页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>欢迎页面</title>
</head>
<body>
    <h1>欢迎登陆</h1>
    <form action="ServletLogin" method="post">
        <label>用户名:</label><input type="text" name="userName" /><br />
        <label>密码:</label><input type="password" name="userPassword" /><br />
        <input type="submit" value="提交" />
    </form>
</body>
</html>

【5】LoginServlet

package cn.lqgx.servlet;

import cn.lqgx.entity.Admin;
import cn.lqgx.service.Impl.UserServiceImpl;
import cn.lqgx.service.UserService;

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.io.PrintWriter;

@WebServlet(name = "ServletLogin", value = "/ServletLogin")
public class ServletLogin extends HttpServlet {
    UserService pUserService=new UserServiceImpl();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //通过response输出在控制台
        PrintWriter printWriter  =response.getWriter();
        String userName= request.getParameter("userName");
        String userPassword= request.getParameter("userPassword");
        Admin adminNew=new Admin(userName,userPassword);
        Admin admin=pUserService.selectPUser(adminNew);
        if(user!=null){
            printWriter.println("登陆成功");
        }else{
            printWriter.println("<h2>用户名或密码错误,无法登录</h2>");
        }
    }

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

【6】ShowAllAdminServlet

package cn.lqgx.www;

import entity.Admin;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

@WebServlet(name = "ShowAllAdminServlet", value = "/ShowAllAdminServlet")
public class ShowAllAdminServletextends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Admin> adminList=(List<Admin>)request.getAttribute("admins");
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        PrintWriter printWriter=response.getWriter();
        response.setContentType("text/html;charset=UTF-8");
        printWriter.write("<html lang=\"en\">");
        printWriter.write("<head>");
        printWriter.write("<meta charset=\"UTF-8\">");
        printWriter.write("<title>Title</title>");
        printWriter.write("<style>");
        printWriter.write("td{width:200px;height:45px;line-height:45px;text-align:center;}");
        printWriter.write("table tr:nth-child(odd){background:green;}");
        printWriter.write("table tr:nth-child(even){background:#FE5F97;}");
        printWriter.write("th{height:40px;line-height:40px;text-align:center;background:white;}");
        printWriter.write("caption{height:45px;line-height:45px;text-align:center;}");
        printWriter.write("</style>");
        printWriter.write("</head>");
        printWriter.write("<body>");
        printWriter.write("<table border=\"1\" width=\"100%\" cellspacing=\"0\">");
        printWriter.write("<caption align=\"top\">所有用户信息</caption>");
        printWriter.write("<thead>");
        printWriter.write("<tr>");
        printWriter.write("<th>姓名</th>");
        printWriter.write("<th>地址</th>");
        printWriter.write("<th>电话号码</th>");
        printWriter.write("</tr>");
        printWriter.write("</thead>");
        printWriter.write("<tbody>");

        for (int i = 0; i < adminList.size(); i++) {
            printWriter.write("<tr>");
            printWriter.write("<td>"+adminList.get(i).getName()+"</td>");
            printWriter.write("<td>"+adminList.get(i).getAddress()+"</td>");
            printWriter.write("<td>"+adminList.get(i).getPhone()+"</td>");
            printWriter.write("</tr>");
        }
        printWriter.write("</tbody>");
        printWriter.write("</table>");
        printWriter.write("</body>");
        printWriter.write("</html>");
    }

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


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

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

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

相关文章

测试架构师需要具备哪些能力?

目录 前言 为什么软件项目需要架构设计&#xff1f; 测试架构师需要解决什么问题&#xff1f; 测试架构师需要具备哪些能力&#xff1f; 测试工程师如何培养架构能力&#xff1f; 总结 重点&#xff1a;配套学习资料和视频教学 前言 相比于我们常见的研发架构师&#x…

微信机器人的构建与使用

一个不知名大学生&#xff0c;江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2022.12.15 Last edited: 2022.12.15 目录 《微信机器人》程序使用说明 微信机器人使用说明 1&#xff0e;项目说明 2. 系统环境 3.准备条…

Java+MySQL基于SSH的扶贫信息管理系统 开题 毕业设计

扶贫信息管理系统采用了B/S(浏览器/服务器)体系结构,JAVA作为开发语言,MySQL作为数据存储进行开发,Tomcat作为WEB服务器,开发平台windows,开发工具采用比elicpse更好用的myeclipse。系统角色分为用户和管理员,主要模块有&#xff1a;县管理模块、贫困户管理模块、扶贫文件管理模…

B站试用期刚过,被HR和大老板一起谈话,说我工作没任何问题,但今晚必须走人!...

最近B站的裁员消息大家关注了吗&#xff1f;一位B站的新员工哭诉&#xff1a;试用期刚过&#xff0c;就被HR和大老板一起谈话&#xff0c;说他工作态度、工作能力、工作产出都没有任何问题&#xff0c;但必须在12.16号走人&#xff01;他不接受&#xff0c;争辩了很久&#xff…

鉴源论坛 · 观模丨AUTOSAR调度表可调度性的形式化分析

作者 | 郭建 上海控安可信软件创新研究院特聘专家 版块 | 鉴源论坛 观模 汽车上大量软件和电子控制单元&#xff08;ECU,Electronic Control Unit&#xff09;的使用导致了汽车电子架构变得更为复杂&#xff0c;现如今从工厂生产的汽车更像是带轮子的电脑。现代汽车由大约50到…

Java+MySQL基于ssm的物理竞赛管理系统 开题 论文

物理竞赛是对课堂上所学的理论知识的实践运用,加深所学知识的理解,锻炼团队协作能力。学生可以根据个人爱好,个人特长选择参与,不仅能培养学生的创新意思、提高专业技能,还能锻炼学生的组织能力和协作能力。物理竞赛是在中国科协的领导下,由中国物理学会主办,各省、自治区、直辖…

windows11-IIS和nginx部署 vue3项目

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 IIS部署vue3项目一、IIS 安装二、解决404问题三、windows环境下安装/使用 nginx提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、IIS 安装 https…

Ac-Nle-P-Nle-D-AMC

Ac-nLPnLD-AMC, substrate for proteasome.Ac-nLPnLD-AMC&#xff0c;蛋白酶体底物。 编号: 185966中文名称: 蛋白酶体底物&#xff1a;Ac-Nle-Pro-Nle-Asp-7-氨基-4-甲基香豆素CAS号: 355140-49-7单字母: Ac-Nle-P-Nle-D-AMC三字母: Ac-Nle-Pro-Nle-Asp-AMC氨基酸个数: 4分子式…

高压放大器怎么选择型号的(高压放大器选型标准规范最新版)

高压放大器一般是指能够产生最大功率输出以驱动特定负载的装置&#xff0c;这是电子测量行业比较常见的一种仪器&#xff0c;可以对信号源的电压信号进行放大。 ATA-2000系列电压放大器选型指南&#xff1a; 高压放大器特点介绍&#xff1a; 1、可以输出1W以上更大的功率。 2、…

ReplicaSet和Deployment

ReplicaSet和Deployment 写在前面 语雀原文阅读效果更佳&#xff1a;198 ReplicaSet和Deployment 语雀 《198 ReplicaSet和Deployment》 1、ReplicaSet 假如我们现在有一个 Pod 正在提供线上的服务&#xff0c;我们来想想一下我们可能会遇到的一些场景&#xff1a; 某次运营…

[思考进阶]03 每一个成年人都应该掌握的学习技巧

除了要提升自己的技术能力&#xff0c;思维的学习和成长也非常非常重要&#xff0c;特推出此[思考进阶]系列&#xff0c;进行刻意练习&#xff0c;从而提升自己的认知。 这世间有两种人&#xff1a;一种被誉为天之骄子&#xff0c;拥有那种天才的创造能力&#xff0c;这种人极少…

React 入门:使用 Express 快速搭建web服务

文章目录什么是 ExpressExpress 用来做什么安装 Express创建 web 服务器启动服务器访问服务器什么是 Express 官方概念 Express 是基于 Node.js 平台&#xff0c;快速、开放、极简的 Web 开发框架。通俗理解 Express 的作用和 Node.js 内置的 http 模块类似&#xff0c;是专门…

最近更换系统盘踩了不少坑,主要是软件运行错误,造成原成原系统盘被损毁

更换系统盘应该注意的问题&#xff1a; PE系统要是经过测试的系统&#xff0c;这次损毁的PE我很信任&#xff0c;但是有个克隆软件&#xff0c;今天一用就损毁了&#xff0c;他的名字是“Acronis True Image",不建议用他克隆整盘。 推荐几个经过严格测试的好用的PE&#…

我们公司使用了6年的Spring Boot项目部署方案,打包 + 一键部署,稳的一批

时间就如白驹过隙&#xff0c;转眼间已经是 2028 年了。小二入职一家初创公司已经 6 年了&#xff0c;眼瞅着开发团队从 3 个人壮大到 54 人&#xff0c;心里有时候会感觉挺不可思议的。 这些年&#xff0c;身边的同事来了又去&#xff0c;有些刚熟悉没多久&#xff0c;就因为…

java 项目之瑞吉外卖 笔记1 软件开发整体介绍 员工登录功能 登录过滤器设置

软件开发流程 角色分工 软件环境 开发环境搭建 创建工程 application.yml: server:port: 80 spring:application:name: reggie_takedatasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/r…

GitHub日排行第二名!手把手刷算法项目fucking-algorithm,干翻算法

今天给大家分享一个开源项目&#xff0c;在 GitHub 排行榜上今天特别火&#xff0c;都爬到了日排行榜的第二名。 大家想知道&#xff0c;面试互联网大厂&#xff0c;必面的是什么吗&#xff1f;当然是算法。作为程序员&#xff0c;互联网大厂的面试&#xff0c;算法是最重要的…

如何进行系统设计

文章目录1. 理解需求1.1 功能性需求1.2 非功能性需求2. 系统设计3. Api设计4. 数据模型设计5. 高可用、高性能、可监控等数据密集型应用设计凤凰架构 重点&#xff1a;自己整理的非权威&#xff0c;不具代表性&#xff0c;自己去取舍哈。 1. 理解需求 1.1 功能性需求 解决什么…

Python -- 流程控制语句

目录 1、条件判断语句 1.1 if语句的使用 1.2 if...else语句的使用 1.3 if...elif...else语句的使用 2、循环语句 2.1 while语句 2.2 for语句 3、break和continue 4、循环中else的使用 1、条件判断语句 1.1 if语句的使用 if语句是用来进行判断的&#xff0c;其使用格式…

大一学生《基于HTML+CSS制作体育篮球网页》期末网页制作

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

如何在 PDF 中搜索并准确找到您要查找的文本内容

您是否需要在冗长的 PDF 文档中快速查找单词或短语&#xff1f; 没有什么比打开一个只有文本墙的大型 PDF 文档更令人沮丧的了。或者必须在很长的文本中找到特定的单词或短语。或者很长的 PDF。 它不方便、耗时&#xff0c;如果时间紧迫则更糟。 幸运的是&#xff0c;大多…