织梦小说网站/青岛 google seo

织梦小说网站,青岛 google seo,手机wap网站制作需要多少钱,网站建设免费模板1.Bean层(Model层)​ 角色:就像餐厅里的“菜品”。​功能:是纯数据对象(如Person类),封装属性和 getter/setter(例如用户名、密码)。​示例:Person类 packa…

1.Bean层(Model层)​

  1. 角色:就像餐厅里的“菜品”。
  2. 功能:是纯数据对象(如Person类),封装属性和 getter/setter(例如用户名、密码)。
  3. 示例Person类
package com.bean;public class Person {private int id;private String name;private String pwd;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}
}

2.Dao层(Data Access Object)​

  • 角色:后厨的“厨师”,专注做菜(操作数据)。
  • 功能:直接和数据库对话,执行增删改查(CRUD)。
  • 示例UserDAO 类中的 saveUser(User user) 方法,负责把用户数据存入数据库。

接口

package com.dao;import com.bean.Person;import java.sql.SQLException;
import java.util.List;public interface PersonDao {public List<Person> queryAll() throws SQLException;public  Boolean selectOne(Person person) throws SQLException;public int save(Person person) throws SQLException;
}

实现接口

package com.dao.impl;import com.bean.Person;
import com.dao.PersonDao;
import com.db.DB;import java.sql.*;
import java.util.ArrayList;
import java.util.List;public class PersonDaoImpl implements PersonDao {// ------------------------- 方法1:查询所有用户 -------------------------@Overridepublic List<Person> queryAll() throws SQLException {Connection connection=new DB().getConnection(); //获取数据库连接Statement statement= connection.createStatement(); //创建SQL执行器ResultSet resultSet= statement.executeQuery("select * from person"); //执行查询SQL语句List list=new ArrayList(); //准备空集合装数据while (resultSet.next()){  //遍历查询结果(一行一行读)Person p=new Person(); //新建数据盒子p.setId(resultSet.getInt(1));  //取第一列(id)放入盒子p.setName(resultSet.getString(2));  //取第二列(name)放入p.setPwd(resultSet.getString(3));  //取第三列(pwd)放入list.add(p); //把盒子加入集合}resultSet.close();statement.close();connection.close();return list;}// ------------------------- 方法2:检查用户名是否存在 -------------------------@Overridepublic Boolean selectOne(Person person) throws SQLException {//Connection connection=new DB().getConnection(); getConnection()为静态方法就可以之间如下:Connection connection= DB.getConnection(); //获取一个数据库连接PreparedStatement statement= connection.prepareStatement("select * from person where name=?");statement.setString(1,person.getName()); //设置参数(替换第一个问号)ResultSet resultSet= statement.executeQuery(); //执行查询if (resultSet.next()){return false;}else {return true;}}// ------------------------- 方法3:保存用户 -------------------------@Overridepublic int save(Person person) throws SQLException {Connection connection= DB.getConnection();//  预编译SQL(提高性能,防止注入)PreparedStatement statement= connection.prepareStatement("insert into person(name,pwd) values(?,?)");statement.setString(1,person.getName()); //设置第一个参数(name)statement.setString(2,person.getPwd()); //设置第二个参数(pwd)int i= statement.executeUpdate(); //执行插入操作statement.close();connection.close();return i; //返回影响的行数(1=成功,0=失败)}
}

3.DB(驱动连接数据库)

  • 角色:餐厅的“仓库”,存储所有食材。
  • 功能:持久化保存数据(如 MySQL、PostgreSQL)
package com.db;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public  class  DB {public static Connection getConnection(){Connection connection=null;try {Class.forName("com.mysql.cj.jdbc.Driver");connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/users?serverTimezone=GMT%2B8","root","123456");} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return connection;}}

4.Service层

  • 角色:餐厅的“经理”,协调复杂流程。
  • 功能:处理业务逻辑(例如注册时检查用户名是否重复 + 加密密码)。
  • 示例UserService 的 registerUser() 方法会调用 DAO 的多个操作,并处理事务。

接口

package com.service;import com.bean.Person;import java.sql.SQLException;
import java.util.List;public interface PersonSercie {public List<Person> AllPerson() throws SQLException;public boolean register(Person person) throws SQLException;
}

实现接口

package com.service.impl;import com.bean.Person;
import com.dao.PersonDao;
import com.dao.impl.PersonDaoImpl;
import com.service.PersonSercie;import java.sql.SQLException;
import java.util.List;public class PersonServiceImpl implements PersonSercie {@Overridepublic List<Person> AllPerson() throws SQLException {PersonDao dao=new PersonDaoImpl(); // 1. 创建DAO对象,准备访问数据库return dao.queryAll();  // 2. 调用DAO查询所有用户}@Overridepublic boolean register(Person person) throws SQLException {PersonDao dao=new PersonDaoImpl();//检查用户名是否已存在if(dao.selectOne(person)){  //调用DAO查询是否存在同名用户dao.save(person); //无重复 → 保存用户return true; //返回注册成功}else {return false; //返回注册失败}}
}

5.Servlet(Controller层)​

  • 角色:餐厅的“服务员”,接待客人并传递需求。
  • 功能:接收 HTTP 请求(如 POST /login),调用 Service 处理,返回响应(跳转页面或 JSON)。
  • 示例LoginServlet 获取表单参数,交给 UserService 验证登录。

删除

package com.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.sql.*;@WebServlet(name = "DeleteServlet",urlPatterns = "/del")
public class DeleteServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String id=request.getParameter("id");try {Class.forName("com.mysql.cj.jdbc.Driver");Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/users?serverTimezone=GMT%2B8","root","123456");//Statement statement= connection.createStatement();PreparedStatement statement= connection.prepareStatement("delete  from person where id=?");statement.setInt(1,Integer.parseInt(id));int i=statement.executeUpdate();if(i>0){response.sendRedirect("listall");}else {response.getWriter().println("Error");}statement.close();connection.close();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}
}

查看

package com.servlet;import com.bean.Person;
import com.service.PersonSercie;
import com.service.impl.PersonServiceImpl;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.sql.*;
import java.util.List;@WebServlet(name = "ListAllServlet",urlPatterns = "/listall")
public class ListAllServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {PersonSercie personSercie=new PersonServiceImpl();try {List<Person> list=personSercie.AllPerson();request.setAttribute("persons",list);request.getRequestDispatcher("listall.jsp").forward(request,response);} catch (SQLException e) {e.printStackTrace();}}
}

增加

package com.servlet;import com.bean.Person;
import com.service.PersonSercie;
import com.service.impl.PersonServiceImpl;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.sql.SQLException;@WebServlet(name = "RegServlet",urlPatterns = "/reg")
public class RegServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name=request.getParameter("uname");String pwd=request.getParameter("upwd");Person person=new Person();person.setName(name);person.setPwd(pwd);//调用模型中注册业务逻辑实现PersonSercie personSercie = new PersonServiceImpl(); // 创建服务层对象(业务逻辑处理者)try {if(personSercie.register(person)){  // 调用服务层的注册方法response.sendRedirect("login.jsp");   // 注册成功:跳转到登录页}else {response.sendRedirect("reg.jsp");// 注册失败:返回注册页};} catch (SQLException e) {e.printStackTrace();}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

改1

package com.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.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;@WebServlet(name = "UpdateDoServlet",urlPatterns = "/updateDo")
public class UpdateDoServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String id=request.getParameter("id");String name=request.getParameter("username");String pwd=request.getParameter("userpwd");try {Class.forName("com.mysql.cj.jdbc.Driver");Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/users?serverTimezone=GMT%2B8","root","123456");//Statement statement= connection.createStatement();PreparedStatement statement= connection.prepareStatement("update person set name=?,pwd=? where  id=?");statement.setString(1,name);statement.setString(2,pwd);statement.setInt(3,Integer.parseInt(id));int i=statement.executeUpdate();if(i>0){response.sendRedirect("listall");}else {response.getWriter().println("Error");}statement.close();connection.close();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

改2

package com.servlet;import com.bean.Person;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.sql.*;@WebServlet(name = "UpdateServlet",urlPatterns = "/update")
public class UpdateServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String id=request.getParameter("id");try {Class.forName("com.mysql.cj.jdbc.Driver");Connection connection= DriverManager.getConnection("jdbc:mysql://localhost:3306/users?serverTimezone=GMT%2B8","root","123456");PreparedStatement statement= connection.prepareStatement("select *  from person where id=?");statement.setInt(1,Integer.parseInt(id));ResultSet resultSet=statement.executeQuery();Person p=new Person();if (resultSet.next()){p.setId(resultSet.getInt(1));p.setName(resultSet.getString(2));p.setPwd(resultSet.getString(3));}request.setAttribute("user",p);resultSet.close();statement.close();connection.close();request.getRequestDispatcher("update.jsp").forward(request,response);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}
}

总结

大概流程:就像网购流程:JSP→ 你下单(Servlet收件)→ 调度中心检查(Service处理)→ 仓库存取(DAO操作→仓库DB)→ 最终收到包裹(响应结果)

  1. 用户填写表单
    👉 在 reg.jsp 页面输入用户名和密码,点击提交。

  2. Servlet接收请求
    👉 RegServlet 像快递员一样收到包裹(HTTP请求),拆开包裹取出数据(request.getParameter)。

  3. 封装成Bean
    👉 把数据装进 Person 盒子(person.setName(name))。

  4. Service处理业务
    👉 调度员(PersonServiceImpl)开始工作:

    • 问仓库管理员(DAO):“这个用户名有人用吗?”(selectOne
    • 如果没人用,告诉管理员:“存进仓库!”(save
  5. DAO操作数据库
    👉 管理员打开仓库(DB连接),执行 SQL 存入数据。

  6. 返回结果给用户
    👉 Servlet 根据结果,跳转到登录页(成功)或返回注册页(失败)。

至于Servlet中doGet和doPost方法该使用哪个

 

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

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

相关文章

多任务学习与持续学习微调:深入探索大型语言模型的性能与适应性

引言 大型语言模型&#xff08;LLMs&#xff09;的出现极大地推动了自然语言处理领域的发展。为了使其在各种特定任务和动态环境中表现出色&#xff0c;微调技术至关重要。本节将深入探讨多任务学习&#xff08;Multi-task Learning, MTL&#xff09;和持续学习&#xff08;Co…

Ubuntu24.04 启动后突然进入tty,无法进入图形界面

问题描述 昨晚在编译 Android AOSP 14 后&#xff0c;进入了登录页面&#xff0c;但出现了无法输入密码的情况&#xff0c;且无法正常关机&#xff0c;只能强制重启。重启后&#xff0c;系统只能进入 TTY 页面&#xff0c;无法进入图形界面。 问题排查 经过初步排查&#x…

图论——广度优先搜索实现

99. 岛屿数量 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。 输入描述 第一行包含两个整数 N, M,表示矩阵的行数和列数。 后续 N 行,每行…

【sql靶场】第13、14、17关-post提交报错注入保姆级教程

目录 【sql靶场】第13、14、17关-post提交报错注入保姆级教程 1.知识回顾 1.报错注入深解 2.报错注入格式 3.使用的函数 4.URL 5.核心组成部分 6.数据编码规范 7.请求方法 2.第十三关 1.测试闭合 2.列数测试 3.测试回显 4.爆出数据库名 5.爆出表名 6.爆出字段 …

[项目]基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信

基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信 一.Si24Ri原理图二.Si24R1芯片手册解读三.驱动函数讲解五.移植2.4g通讯&#xff08;飞控部分&#xff09;六.移植2.4g通讯&#xff08;遥控部分&#xff09;七.通讯模块的完成&#xff08;遥控部分&#xff09; 一.Si24Ri原理图 S…

【源码分析】Nacos实例注册流程分析-事件驱动框架

【踩坑记录】 本人下载的Nacos 服务端版本是2.3.2&#xff0c;在开始进行源码编译便遇到问题&#xff0c;下面是各个问题记录 源码大量爆红 在最开始用Idea加载Maven项目的时候&#xff0c;发现项目中大量的代码爆红&#xff0c;提示其类或者包不存在&#xff0c;后来结果查…

【白话神经网络(二)】矩阵、CNN、RNN

全连接层 回顾前面学过的知识&#xff1a; 一个最简单的神经网络&#xff0c;就是ywxb 套上一个激活函数。 如果有多个输入&#xff0c;那就是多个w和x 如果有多个输出&#xff0c;那就再来一行公式&#xff0c;多一组w和b 要是神经元多了的话&#xff0c;公式密密麻麻的&…

Unity教程(二十二)技能系统 分身技能

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

CTF WEB题

[文件包含,少许难度] 地址:攻防世界 代码审计WRONG WAY! <?php include("flag.php"); #包含了一个“flag.php”文件 highlight_file(__FILE__); #来显示当前文件的源代码 if(isset($_GET["file1"]) && isset($_GET["file2"])) #isse…

c++图论(一)之图论的起源和图的概念

C 图论之图论的起源和图的概念 图论&#xff08;Graph Theory&#xff09;是数学和计算机科学中的一个重要分支&#xff0c;其起源可以追溯到 18 世纪 的经典问题。以下是图论的历史背景、核心起源问题及其与基本概念和用途&#xff1a; 借用一下CSDN的图片哈 一、图论的起源&…

Ollama + CherryStudio:构建本地私有知识库

前面我们介绍了Ollama的安装和使用&#xff0c;并通过Open-WebUI进行调用&#xff0c;相信大家对Ollama也有了一定的了解&#xff1b;这篇博文就结合Ollama工具和CherryStudio工具构建一个本地知识库&#xff08;RAG&#xff09;&#xff1b;在进行接下来的操作之前&#xff0c…

【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.1AWS OpenSearch无服务器方案

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 8.2.1AWS OpenSearch 无服务器方案深度解析与实践指南1. Serverless架构的核心价值与行业趋势1.1 传统Elasticsearch集群的运维挑战1.2 Serverless技术演进路线技术特性对比…

图搜索的两种写法,广度优先和深度优先

最近AI的爆发大家都疯了&#xff0c;也确实够疯&#xff0c;前几年谁能天天和AI聊天呢&#xff0c;特别它越来越智能&#xff0c;越来越理解你&#xff0c;你越来越离不开它&#xff0c;我很好奇将来它会不会有情绪&#xff0c;太可怕了&#xff0c;一旦有了这个就有了感情&…

嵌入式八股RTOS与Linux---前言篇

前言 Linux与RTOS是校招八股的时候很喜欢考察的知识,在这里并没有把两个操作系统完全的独立开去讲,放在一起对比或许可能加深印象。我们讲Linux的内核有五部分组成:进程调度、内存管理、文件系统、网络接口、进程间通信,所以我也将从这五方面出发 中断管理去对比和RTOS的不同。…

基于Vue实现Echarts的平滑曲线

在Vue2.x的项目中使用echarts实现如下效果 安装echarts npm install echarts --save组件引入echarts // 在你的Vue组件中 import * as echarts from echarts;在模板中添加一个div元素&#xff0c;用来放置图表 <divref"chart"class"chart"style"…

Java 集合框架中 `List` 接口及其子类的详细介绍,并用 UML 图表展示层次结构关系,用表格对比各个类的差异。

下面是 Java 集合框架中 List 接口及其子类的详细介绍&#xff0c;并用 UML 图表展示层次结构关系。最后&#xff0c;我会用表格对比各个类的差异。 Java 集合框架中 List 接口及其子类 UML 类图描述 以下是 List 接口及其子类的 UML 类图描述&#xff0c;不包含方法。 详细…

Java面试八股—Redis篇

一、Redis的使用场景 &#xff08;一&#xff09;缓存 1.Redis使用场景缓存 场景&#xff1a;缓存热点数据&#xff08;如用户信息、商品详情&#xff09;&#xff0c;减少数据库访问压力&#xff0c;提升响应速度。 2.缓存穿透 正常的访问是&#xff1a;根据ID查询文章&…

【GPT入门】第22课 langchain LCEL介绍

【GPT入门】第22课 langchain LCEL介绍 1. LCEL介绍与特点2. 原生API与LCEL的对比2. 简单demo 1. LCEL介绍与特点 LCEL 即 LangChain Expression Language&#xff0c;是 LangChain 推出的一种声明式语言&#xff0c;用于简化和优化在 LangChain 框架内构建复杂链和应用的过程…

数据结构——单链表list

前言&#xff1a;大家好&#x1f60d;&#xff0c;本文主要介绍数据结构——单链表 目录 一、单链表 二、使用步骤 1.结构体定义 2.初始化 3.插入 3.1 头插 3.2 尾插 3.3 按位置插 四.删除 4.1头删 4.2 尾删 4.3 按位置删 4.4按值删 五 统计有效值个数 六 销毁…

堆排序:力扣215.数组中的第K个大元素

一、问题描述 在一个整数数组 nums 中&#xff0c;需要找出第 k 个最大的元素。这里要注意&#xff0c;我们要找的是数组排序后的第 k 个最大元素&#xff0c;而不是第 k 个不同的元素。例如&#xff0c;对于数组 [3,2,1,5,6,4]&#xff0c;当 k 2 时&#xff0c;第 2 个最大…