Servlet应用(Request+response对象)

news/2024/11/18 8:18:06/

在这里插入图片描述

✅作者简介:热爱国学的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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取表单提交的姓名String username = req.getParameter("username");//获取表单提交的年龄String userage = req.getParameter("userage");//服务器端输出获取到的数据System.out.println("客户端发来的信息:姓名:"+username+",年龄:"+userage);}@Overrideprotected 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();@Overrideprotected 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>");}}@Overrideprotected 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 {@Overrideprotected 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>");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

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

在这里插入图片描述


http://www.ppmy.cn/news/4171.html

相关文章

在vite中根据view中的文件自动生成路由(vue3)

前景提要&#xff1a;在实现这个功能的过程中&#xff1a;我碰到了三个问题 1.在vite中无法使用fs模块 2.vite不支持动态更改&#xff0c;需要去下载插件&#xff0c;其实我下载了还是没有用 3.动态路由中不可以使用别名&#xff0c;因为解析不到 首先展示我是怎么实现的 直接…

JSP运动会信息网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 模块划分&#xff1a;通知类型、通知信息、裁判信息、运动员信息、项目类型、项目 信息、场地信息、项目安排、报名信息…

python采集付费论文批量下载 并保存到文档,毕设论文再也不愁......

嗨害大家好鸭&#xff01; 我是小熊猫鸭~ 大家是不是在写毕业论文的时候 需要参考某一段的内容 要用到复制粘贴&#xff0c;但是吧&#xff0c;某文库就需要付费&#xff0c; 就老难受了… 我们今天就来解决这个"老难受" 环境使用&#xff1a; python 3.8 pych…

JVM Java内存模型(JMM)

很多人将Java内存结构与Java内存模型傻傻分不清&#xff0c;Java内存模型是Java memory model&#xff08;JMM&#xff09;的意思。简单地说&#xff0c;JMM定义了一套在多线程的环境下读写共享数据&#xff08;比如成员变量、数组&#xff09;时&#xff0c;对数据的可见性、有…

傻白入门芯片设计,盘点GPU业界的大佬(十五)

在PC个人电脑时代&#xff0c;英特尔&#xff08;Inter&#xff09;是无可争议的芯片巨头&#xff0c;凭借着X86架构在数据中心CPU中的压倒性地位&#xff0c;一度垄断全球90%的市场份额。然而在人工智能时代&#xff0c;以英伟达&#xff08;NVIDIA&#xff09;为首的GPU、AI芯…

早餐店+饮品+烘焙,如何做多群体早中晚生意?

早餐吃好、午餐吃饱、晚餐少吃&#xff0c;如今早餐店已经不再局限于豆浆油条、鸡蛋面包&#xff0c;同时还有饮品&#xff0c;芳芳珍早鲜奶店是一家早餐店&#xff0c;30个SKU销量很高&#xff0c;一天中有近75%的销售都集中在早餐场景。 这家早餐店是如何做的&#xff1f; 01…

5G基站射频传导测试研究与应用

【摘 要】基站是5G网络中的重要节点,其RF(射频)性能与其网络覆盖范围和服务质量高度相关。详细介绍了5G基站的射频测试标准,并通过对测试项目物理意义和实际影响的分析,给出了射频传导测试方法以及测试环境构建中的注意事项,通过对实际基站的测试及对其结果的分析,指出…

Servlet转发与重定向

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;JAVA开发者…