当前位置: 首页 > news >正文

黑马Javaweb Request和Response

一.介绍

在 Web 开发中,HttpServletRequestHttpServletResponse 是两个非常重要的类,它们分别用于处理客户端的请求和服务器的响应。以下是它们的详细说明和使用方法:

1. HttpServletRequest

HttpServletRequest 是一个接口,用于封装客户端的请求信息。它提供了多种方法来获取请求的详细信息,例如请求头、请求体、参数等。

2. HttpServletResponse

HttpServletResponse 是一个接口,用于封装服务器的响应信息。它提供了多种方法来设置响应的内容、状态码、响应头等。

package com.itheima.web.request;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.BufferedReader;
import java.io.IOException;/*** request 获取请求数据*/
@WebServlet("/req1")
public class RequestDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// String getMethod():获取请求方式: GETString method = req.getMethod();System.out.println(method);//GET// String getContextPath():获取虚拟目录(项目访问路径):/request-demoString contextPath = req.getContextPath();System.out.println(contextPath);// StringBuffer getRequestURL(): 获取URL(统一资源定位符):http://localhost:8080/request-demo/req1StringBuffer url = req.getRequestURL();System.out.println(url.toString());// String getRequestURI():获取URI(统一资源标识符): /request-demo/req1String uri = req.getRequestURI();System.out.println(uri);// String getQueryString():获取请求参数(GET方式): username=zhangsanString queryString = req.getQueryString();System.out.println(queryString);//------------// 获取请求头:user-agent: 浏览器的版本信息String agent = req.getHeader("user-agent");System.out.println(agent);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取post 请求体:请求参数//1. 获取字符输入流BufferedReader br = req.getReader();//2. 读取数据String line = br.readLine();System.out.println(line);}
}

package com.itheima;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("/resp3")
public class ResponseDemo3 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");//1. 获取字符输出流PrintWriter writer = response.getWriter();//content-type//response.setHeader("content-type","text/html");writer.write("你好吗");writer.write("<h1>aaa</h1>");//细节:流不需要关闭}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

展示图片

package com.itheima;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;/*** 响应字符数据:设置字符数据的响应体*/
@WebServlet("/resp4")
public class ResponseDemo4 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.读取文件FileInputStream fis = new FileInputStream("C:\\Users\\zhaoming\\Downloads\\archive1\\ac6\\train\\images\\032.png");//2.获取字符输出流ServletOutputStream os = response.getOutputStream();//3.完成输出byte[] bytes = new byte[1024];int  len = 0;while((len = fis.read(bytes)) != -1){os.write(bytes,0,len);//全自动:IOUtils.copy(fis,os);}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

二.案例

用户登录

流程

1. 前端发送请求

用户在网页的登录表单中输入用户名和密码,然后点击“登录”按钮。这个动作会触发前端代码(通常是 JavaScript 或 HTML 表单)向服务器发送一个请求。请求中包含了用户输入的用户名和密码。

2. 后端接收请求

服务器端的 LoginServlet 接收到前端发送的请求。LoginServlet 是一个 Java Web 应用中的 Servlet,专门用来处理登录相关的逻辑。

3. 提取用户名和密码

LoginServlet 从请求中提取用户输入的用户名和密码。这是通过调用 request.getParameter("username")request.getParameter("password") 来实现的。这两个方法会从请求中获取表单字段对应的值。

4. 调用 MyBatis 查询

接下来,LoginServlet 要通过 MyBatis 来查询数据库,检查用户输入的用户名和密码是否正确。

4.1 加载 MyBatis 配置

首先,需要加载 MyBatis 的配置文件(通常是 mybatis-config.xml)。这个文件包含了数据库连接信息、事务管理方式、环境配置等内容。通过加载这个文件,可以创建一个 SqlSessionFactory 对象,它是用来生成 SqlSession 的工厂。

4.2 创建 SqlSession

SqlSessionFactory 用来创建 SqlSession 对象。SqlSession 是 MyBatis 的核心对象,它提供了执行 SQL 命令、获取映射器和管理事务的方法。你可以把它理解为一个数据库会话,通过它可以和数据库进行交互。

4.3 获取 Mapper 接口

SqlSession 提供了一个方法 getMapper(),通过它可以获取到一个 Mapper 接口的实例。Mapper 接口是 MyBatis 中用来定义数据库操作方法的接口,比如 UserMapper,它里面定义了用户相关的数据库操作,比如登录时的查询操作。

4.4 执行查询操作

通过 Mapper 接口调用查询方法,比如 userMapper.select(username, password)。这个方法会根据传入的用户名和密码去数据库中查询用户信息。如果用户名和密码匹配,就会返回一个用户对象;如果没有匹配的记录,就会返回 null

5. 判断查询结果

查询完成后,LoginServlet 会检查查询结果:

  • 如果返回的用户对象不为 null,说明用户名和密码正确,登录成功。

  • 如果返回的用户对象为 null,说明用户名和密码不匹配,登录失败。

6. 返回响应

LoginServlet 根据查询结果向前端返回响应。如果登录成功,可以返回一个“登录成功”的消息;如果登录失败,返回一个“登录失败”的消息。这个响应可以是一个简单的字符串,也可以是一个 JSON 对象,具体取决于前端的实现。

7. 释放资源

最后,LoginServlet 会关闭 SqlSession,释放数据库连接等资源。这是很重要的一步,因为如果不释放资源,可能会导致数据库连接耗尽等问题。

总结

整个登录流程可以概括为:

  1. 前端发送包含用户名和密码的请求。

  2. 后端的 LoginServlet 接收请求并提取用户名和密码。

  3. 通过 MyBatis 查询数据库,检查用户名和密码是否匹配。

  4. 根据查询结果判断登录是否成功,并返回相应的响应。

  5. 释放数据库资源。

这个流程确保了用户输入的信息能够被正确处理,并且能够安全地与数据库交互。

mybatis-config

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--起别名--><typeAliases><package name="com.itheima.pojo"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/db01?useSSL=false&amp;useServerPrepStmts=true"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><!--扫描mapper--><package name="com.itheima.Mapper"/></mappers>
</configuration>

mapper xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.Mapper.UserMapper"></mapper>

Usermapper

package com.itheima.Mapper;import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;public interface UserMapper {/*** 根据与用户名密码查询对象* @param username* @param password* @return*/@Select("select * from tb_user where username=#{username} and password=#{password}")User select(@Param("username") String username, @Param("password")String password);}

logservlet

package com.itheima.web;import com.itheima.Mapper.UserMapper;
import com.itheima.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;@WebServlet("/loginservlet")
public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.接受用户名和密码String username = request.getParameter("username");String password = request.getParameter("password");//2.调用mybatis查询//2.1获取sqlsessionfactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.2获取sqlseesion对象SqlSession sqlSession = sqlSessionFactory.openSession();//2.3获取mapperUserMapper userMapper = sqlSession.getMapper(UserMapper.class);//2.4调用方法User user = userMapper.select(username, password);//2.5释放资源sqlSession.close();//字符输出流response.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();//3.判断user是否为nullif(user != null){writer.write("登录成功");}else{writer.write("登录失败");}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

用户注册

registerservlet.java

package com.itheima.web;import com.itheima.Mapper.UserMapper;
import com.itheima.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.InputStream;@WebServlet("/registerservlet")
public class registerservlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.接受数据String username = request.getParameter("username");String password = request.getParameter("password");//2.封装对象User user = new User();user.setUsername(username);user.setPassword(password);//2.1获取sqlsessionfactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.2获取sqlseesion对象SqlSession sqlSession = sqlSessionFactory.openSession();//2.3获取mapperUserMapper userMapper = sqlSession.getMapper(UserMapper.class);//2.4调用方法User u = userMapper.selectByUsername(username);//是否为nullif(u == null){//不存在,可添加userMapper.add(user);//提交sqlSession.commit();//释放资源sqlSession.close();response.setContentType("text/html;charset=utf-8");response.getWriter().write("good submit");}else{//存在,不可添加response.setContentType("text/html;charset=utf-8");response.getWriter().write("用户名已存在");}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

usermapper.java

/*** 根据与用户名查询对象* @param username* @return*/@Select("select * from tb_user where username = #{username}")User selectByUsername(@Param("username") String username);/*** 添加*/@Insert("insert into tb_user values(null,#{username},#{password})")void add(User user);

测试运行结果良好。

相关文章:

  • 【数据结构】图论基石:最小生成树(MST)实战精解与Prim/Kruskal算法详解
  • 探索 Shell:选择适合你的命令行利器 bash, zsh, fish, dash, sh...
  • 【学习笔记】深入理解Java虚拟机学习笔记——第3章 垃圾收集器与内存分配策略
  • JVM——对象模型:JVM对象的内部机制和存在方式是怎样的?
  • 嵌入式全栈面试指南:TCP/IP、C 语言基础、STM32 外设与 RT‑Thread
  • 04.管理表
  • iview-admin静态资源js按需加载配置
  • 【JVM面试篇】高频八股汇总——Java内存区域
  • OCCT基础类库介绍: Foundation Classes - Basics
  • 常见查找算法原理与应用详解
  • AURA智能助手在物联网(IoT)和数字化改造领域的使用
  • pandas 字符串存储技术演进:从 object 到 PyArrow 的十年历程
  • 华为IP(8)(OSPF开放最短路径优先)
  • 上位机知识篇---dialoutuucp组
  • 数据结构——D/串
  • 数据结构——F/图
  • 408第一季 - 数据结构 - 图II
  • 数据结构---红黑树
  • 八、数据库恢复技术
  • 第四篇:服务商(工人端)-01服务商入驻申请
  • 小程序制作流程微信/河北百度竞价优化
  • 上海景泰建设有限公司网站/百度seo怎么提高排名
  • 做易拉宝的素材网站/windows优化大师免费
  • 做页面设计的网站/百度云链接
  • wordpress 跟随滚动/搜索引擎优化seo什么意思
  • 做教育网站多少钱/seo营销策略