【搭建JavaEE】(3)前后端交互,请求响应机制,JDBC数据库连接

前后端交互

在这里插入图片描述

Apache Tomat

在这里插入图片描述

B/S目前主流。

在这里插入图片描述

tomat包含2部分:

  1. apache
  2. 容器

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

再认识servlet

在这里插入图片描述

在这里插入图片描述

抽象出的开发模式

在这里插入图片描述

项目创建配置

maven +javaee+tomcat
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

忽略一些不用的文件

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

webapp文件夹

在这里插入图片描述

HiServlet

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

这里面出现了webinfo,这个别删因为这个呢,是这这个这个文件特别重要。

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

Url–>uri(抽象)
在这里插入图片描述

虚拟地址——web.xml

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

TOmat启动前

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

注解版–SuperHiSevlet

在这里插入图片描述

*请求-响应

MyRequestServlet

在这里插入图片描述

HttpServletRequest

在这里插入图片描述

获取前端数据

  request.getParameter("前端参数")
  • form表单中name属性
<input name='username' value='abc'>
  • a标签
<a href='localhost:8099/deep?name=abc&pass=123'

在这里插入图片描述

获取多个数据
获取请求方法
获取头

HttpServletRequest.class

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

package com.ffyc.servlet;

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.util.Arrays;
import java.util.Enumeration;

@WebServlet(value = "/req")
public class MyRequestServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
        String name = request.getParameter("name");
        String username = request.getParameter("username");

        System.out.println(name + ":" + username);

        System.out.println("------------------------------------------");
        String methodName = request.getMethod();
        System.out.println("method名称:" + methodName);
        String[] hobbies = request.getParameterValues("hobby");//多个数据

        System.out.println("爱好:" + Arrays.toString(hobbies));


        Enumeration<String> headerNames = request.getHeaderNames();

        System.out.println("----请求头----------------------");
        while(headerNames.hasMoreElements()){
            System.out.println(headerNames.nextElement());
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试请求</title>
</head>
<body>

    <a href="http://localhost:8099/deep/req?name=abc">测试请求</a>

    <hr/>

    <form action="http://localhost:8099/deep/req" method="post">
        <input type="text" name="username" placeholder="请输入用户名">
        <input type="checkbox" name="hobby" value="basket-ball">basket-ball
        <input type="checkbox" name="hobby" value="TV">TV
        <input type="checkbox" name="hobby" value="GAME">GAME
        <input type="submit" value="提交">

请求乱码问题

 request.setCharacterEncoding("utf-8");

过滤器–切面

在这里插入图片描述

过滤器–不同的功能块

在这里插入图片描述

配置 .xml

插在servlet之前响应

在这里插入图片描述

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

后台响应

乱码问题(HttpServletResponse)

servletRequest.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=utf-8");
filterChain.doFilter(servletRequest, servletResponse);

在这里插入图片描述

登录页面

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

过滤器

在这里插入图片描述

import javax.servlet.*;
import java.io.IOException;

public class CodingFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=utf-8");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

在这里插入图片描述

映射–index.html(LoginServlet.java)

在这里插入图片描述

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

《没有Web包》

在这里插入图片描述

代码

在这里插入图片描述

LoginServlet.java

package com.ffyc.servlet;

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(value = "/login.do")
public class LoginServlet extends HttpServlet {

    final String USERNAME = "admin";
    final String PASSWORD = "123";

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        if (USERNAME.equals(username) && PASSWORD.equals(password)) {
            //success
            resp.sendRedirect("login-success.html");
        } else {
            //login
            resp.sendRedirect("index.html");
        }

    }

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

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录页面</title>
</head>
<body>

<form action="http://localhost:8099/login.do" method="post">
    <fieldset>
        <legend>用户登录</legend>

        <div>
            <input type="text" name="username" placeholder="用户名">
        </div>
        <div>
            <input type="password" name="password" placeholder="密码">
        </div>

        <div>
            <input type="submit" value="登录">
            <input type="reset" value="取消">
        </div>

    </fieldset>
</form>

</body>
</html>

login-success.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录成功页面</title>
</head>
<body>

    <img src="https://img95.699pic.com/photo/40236/5997.jpg_wh300.jpg"/>
    <h1>登录成功</h1>

</body>
</html>

CodingFilter.java

package com.ffyc.filter;


import javax.servlet.*;
import java.io.IOException;

public class CodingFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=utf-8");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <filter>
        <filter-name>charset</filter-name>
        <filter-class>com.ffyc.filter.CodingFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>charset</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>
</web-app>

JDBC

在这里插入图片描述

引入JDBC

       <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>

在这里插入图片描述

创建表

在这里插入图片描述

创建用户类

  <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.34</version>
        </dependency>

在这里插入图片描述

@Data
public class User {
    private Integer id;
    private String username;
    private String password;
    private String name;
}

在这里插入图片描述

1

    private final String USERNAME="root";
    private final String PASSWORD = "123456";
    private final String URL =
            "jdbc:mysql://localhost:3306/kingdom_db?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";

2

    try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

3

在这里插入图片描述

4

在这里插入图片描述

5
在这里插入图片描述

UserDaolmpl.java

package com.ffyc.dao.impl;

import com.ffyc.dao.IUserDao;
import com.ffyc.entity.User;

import java.sql.*;

/**
 * 与数据库交互
 */
public class UserDaoImpl implements IUserDao {

    private final String USERNAME = "root";
    private final String PASSWORD = "123456";
    private final String URL =
            "jdbc:mysql://localhost:3306/stu_db?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";

    private Connection conn;
    private PreparedStatement pst;
    private ResultSet rs;

    public UserDaoImpl() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

    @Override
    public User findUsernameAndPassword(String username, String password) {
        try {
            String sql = "Select * FROM user_tab WHERE user_username=? AND user_password=?";

            pst = conn.prepareStatement(sql);
            pst.setString(1,username);
            pst.setString(2, password);

            rs = pst.executeQuery();

            if(!rs.next()){
                return null;
            }else{
              Integer id =  rs.getInt("user_id");
              String u = rs.getString("user_username");
              String p = rs.getString("user_password");
              String name = rs.getString("user_name");
              User user = new User();
              user.setId(id);
              user.setUsername(u);
              user.setPassword(p);
              user.setName(name);
              return user;
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }


    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

美摄科技PC端视频编辑解决方案,为企业打造专属的高效创作平台

在当今这个信息爆炸的时代&#xff0c;视频已成为不可或缺的重要内容形式&#xff0c;美摄科技推出了PC端视频编辑解决方案的私有化部署服务&#xff0c;旨在为企业提供一款量身定制的高效创作平台。 一、全面功能&#xff0c;满足企业多样化需求 美摄科技的PC端视频编辑解决…

探索图像编辑的无限可能——Adobe Photoshop全解析

文章目录 前言一、PS的历史二、PS的应用场景三、PS的功能及工具用法四、图层的概念五、调整与滤镜六、创建蒙版七、绘制形状与路径八、实战练习结语 前言 在当今数字化的世界里&#xff0c;视觉内容无处不在&#xff0c;而创建和编辑这些内容的能力已经成为许多行业的核心技能…

STM32-笔记41-RTC(实时时钟)

一、什么是RTC&#xff1f; 实时时钟的缩写是RTC(Real_Time Clock)。RTC 是集成电路&#xff0c;通常称为时钟芯片。 实时时钟是一个独立的定时器。 RTC模块拥有一组连续计数的计数器&#xff0c;在相应软件配置下&#xff0c;可提供时钟日历的功能。修改计数器的值可以重新设…

51c自动驾驶~合集46

我自己的原文哦~ https://blog.51cto.com/whaosoft/13050104 #世界模型会是L3自动驾驶的唯一解吗 三维空间占有率&#xff08;3D Occupancy&#xff09;预测的目的是预测三维空间中的每个体素是否被占有&#xff0c;如果被占有&#xff0c;则对应的体素将被标记。3D Semant…

mybatis-spring @MapperScan走读分析

接上一篇文章&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145100531&#xff0c; 本文注解分析mybatis-spring中的MapperScan注解&#xff0c;则将容易许多。 目录 MapperScan注解定义ConfigurationClassPostProcessor扫描注册beanDefinitionorg.mybatis.s…

Apache PAIMON 学习

参考&#xff1a;Apache PAIMON&#xff1a;实时数据湖技术框架及其实践 数据湖不仅仅是一个存储不同类数据的技术手段&#xff0c;更是提高数据分析效率、支持数据驱动决策、加速AI发展的基础设施。 新一代实时数据湖技术&#xff0c;Apache PAIMON兼容Apache Flink、Spark等…

SQL面试题1:连续登陆问题

引言 场景介绍&#xff1a; 许多互联网平台为了提高用户的参与度和忠诚度&#xff0c;会推出各种连续登录奖励机制。例如&#xff0c;游戏平台会给连续登录的玩家发放游戏道具、金币等奖励&#xff1b;学习类 APP 会为连续登录学习的用户提供积分&#xff0c;积分可兑换课程或…

电商系统,核心通用架构案例设计方案浅析

文章目录 一、用户系统案例设计1、用户信息的存储方案2、用户注册确保唯一3、用户数据合并方案4、用户敏感信息加密存储5、数据传输安全性6、多用户数据隔离性7、防止恶意注册8、用户好友关系存储方案9、用户登录token方案10、会员优先处理设计 二、网关系统设计1、网关的功能2…

【EI 会议征稿】第四届材料工程与应用力学国际学术会议(ICMEAAE 2025)

2025 4th International Conference on Materials Engineering and Applied Mechanics 重要信息 大会官网&#xff1a;www.icmeaae.com 大会时间&#xff1a;2025年3月7-9日 大会地点&#xff1a;中国西安 截稿时间&#xff1a;2025年1月24日23:59 接受/拒稿通知&#xf…

SQL面试题2:留存率问题

引言 场景介绍&#xff1a; 在互联网产品运营中&#xff0c;用户注册量和留存率是衡量产品吸引力和用户粘性的关键指标&#xff0c;直接影响产品的可持续发展和商业价值。通过分析这些数据&#xff0c;企业可以了解用户行为&#xff0c;优化产品策略&#xff0c;提升用户体验…

【Rust自学】11.7. 按测试的名称运行测试

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.7.1. 按名称运行测试的子集 如果想要选择运行的测试&#xff0c;就将测试的名称&#xff08;一个或多个&#xff09;作为cargo test的…

深入浅出 Android AES 加密解密:从理论到实战

深入浅出 Android AES 加密解密&#xff1a;从理论到实战 在现代移动应用中&#xff0c;数据安全是不可忽视的一环。无论是用户隐私保护&#xff0c;还是敏感信息的存储与传输&#xff0c;加密技术都扮演着重要角色。本文将以 AES&#xff08;Advanced Encryption Standard&am…

jupyter notebook练手项目:线性回归——学习时间与成绩的关系

线性回归——学习时间与学习成绩的关系 第1步&#xff1a;导入工具库 pandas——数据分析库&#xff0c;提供了数据结构&#xff08;如DataFrame和Series&#xff09;和数据操作方法&#xff0c;方便对数据集进行读取、清洗、转换等操作。 matplotlib——绘图库&#xff0c;p…

JVM虚拟机的组成 笼统理解 六大部分 类加载子系统 运行时数据区 执行引擎 本地接口 垃圾回收器 线程工具

目录 JVM虚拟机的组成&#xff1a;概述 JVM虚拟机的组成&#xff1a;详细解析 1. 类加载子系统 2. 运行时数据区 3. 执行引擎 4. 本地接口 5. 垃圾回收器 6. 线程管理与调试工具 概述 JVM&#xff08;Java Virtual Machine&#xff09;是一个虚拟计算机&#xff0c;执行…

单细胞组学大模型(8)--- scGenePT,scGPT和GenePT的结合,实验数据和文本数据的交融模型

–https://doi.org/10.1101/2024.10.23.619972 研究团队和单位 Theofanis Karaletsos–Head Of AI - Science at Chan Zuckerberg Initiative &#xff08;Chan Zuckerberg Initiative是扎克伯格和他妻子Chan成立的科研&教育机构&#xff09; 研究简介 研究背景&…

kafka原理和实践

Kafka是当前分布式系统中最流行的消息中间件之一&#xff0c;凭借着其高吞吐量的设计&#xff0c;在日志收集系统和消息系统的应用场景中深得开发者喜爱。本篇就聊聊Kafka相关的一些知识点。主要包括以下内容&#xff1a; Kafka简介 Kafka特点Kafka基本概念Kafka架构Kafka的几…

CSS | 实现三列布局(两边边定宽 中间自适应,自适应成比)

目录 示例1 &#xff08;中间自适应 示例2&#xff08;中间自适应 示例3&#xff08;中间自适应 示例4 &#xff08;自适应成比 示例5&#xff08;左中定宽&#xff0c;右边自适应 示例6&#xff08;中间自适应 示例7&#xff08;中间自适应 示例8&#xff08;中间定宽…

【大数据】机器学习------神经网络模型

一、神经网络模型 1. 基本概念 神经网络是一种模拟人类大脑神经元结构的计算模型&#xff0c;由多个神经元&#xff08;节点&#xff09;组成&#xff0c;这些节点按照不同层次排列&#xff0c;通常包括输入层、一个或多个隐藏层和输出层。每个神经元接收来自上一层神经元的输…

docker一张图理解

1、push 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库。参数说明&#xff1a; –disable-content-trust : 忽略镜像的校验,默认开启 # 上传本地镜像myapache:v1到镜像仓库中。 docker push myapache:v1 1.2、search 从Docker Hub查找镜像。参数说明&#xff1a; –…

Unity shader中真的可以动态关闭Stencil Test吗?

这个问题很多年前就有人问了&#xff1a; https://discussions.unity.com/t/how-to-disable-the-stencil-block-via-shader-properties/600273/1 最后的答案是&#xff1a; set [_StencilComp] to CompareFunction.Disabled to disable the Stencil Op completely. 但是我测试…