首页 > 编程语言 >软件设计之JavaWeb(3)

软件设计之JavaWeb(3)

时间:2024-09-16 09:55:11浏览次数:3  
标签:SET 请求 utf8mb4 软件设计 ---------------------------- -- NULL JavaWeb

软件设计之JavaWeb(3)

此篇应在MySQL之后进行学习:
路线图推荐:
【Java学习路线-极速版】【Java架构师技术图谱】
尚硅谷全新JavaWeb教程,企业主流javaweb技术栈
资料可以去尚硅谷官网免费领取
此章节最好学完JDBC观看

学习内容:

  1. 请求转发与响应重定向
  2. 路径问题
  3. MVC架构模式

1、请求转发与响应重定向

请求转发

1、请求转发是指服务器收到客户端的请求后,将该请求内部转发给同一服务器中的另一个资源(如Servlet、JSP等)来处理。客户端不会知道请求被转发了,浏览器的地址栏不会改变,仍显示最初的URL。常用于服务器端的内部逻辑处理,比如验证用户身份后将其转发到指定页面。
2、请求转发是通过HttpServletRequest对象实现的
3、客户端只产生了一次请求,服务端只产生了一对request和response对象
4、请求的参数是可以传递的
5、目标资源可以是servlt动态资源,也可以是html静态资源
6、目标资源可以是WEB-INF下的受保护的资源 该方式也是WEB-INF下的组员的唯一访问方式

响应重定向

1、是服务器收到请求后,向客户端发送一个重定向的响应,告诉客户端重新发送请求到另一个URL。浏览器地址栏会发生变化,指向新的URL。常用于需要客户端发送新的请求的场景,比如用户登录后重定向到主页面。
2、重定向是通过HttpServletResponse对象实现的
3、响应重定向是在服务器的提示下的,客户端的行为
4、请求产生了多次,后端就会有多个request对象 此时请求中的参数不能继续自动传递
5、目标资源可以是静态资源、外部资源、但不能是WEB-INF下的资源

2、路径问题

相对路径

相对路径:以当前资源所在路径为出发点;假设index.html在web目录下,那么就是从web开始找
语法上:不以/开头 ./表示当前资源路径../表示当前资源的上一级路径
重点:目录的加载是以客户端url进行主体分析,不能专注于磁盘下的目录结构
在这里插入图片描述

绝对路径

始终以固定的路径作为出发点去找目标资源,和当前资源所在路径没有关系
语法上以/开头,不同项目的固定路径出发点可能不一致,可以测试查看
base href标签可以针对当前html文件内容中,所有不加任何修饰的相对路径前,自动补充href的内容。(不加修饰的意思是除./../外)
请求转发的绝对路径是不需要添加项目上下文的,其代表的路径是
http://localhost:8080/d05(上下文路径)/

3、MVC架构模式

1、Model(模型):负责处理应用程序的数据逻辑。它从数据库中获取数据、处理业务逻辑,并将处理后的数据返回给 Controller 或 View。
2、View(视图):负责显示数据,是用户界面的部分。它通过 Controller 传递的数据来生成用户看到的内容。
3、Controller(控制器):负责处理用户的输入,并决定调用哪个 Model 来处理数据,再将数据返回给 View。
4、以日程管理为案例开发进行MVC代码思想学习

前后端分离MVC

在这里插入图片描述

非前后端分离MVC

在这里插入图片描述

数据库准备

创建完之后,在IDEA可以连接数据库,有一个database按钮

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- 创建日程表
-- ----------------------------
DROP TABLE IF EXISTS `sys_schedule`;
CREATE TABLE `sys_schedule`  (
  `sid` int NOT NULL AUTO_INCREMENT,
  `uid` int NULL DEFAULT NULL,
  `title` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `completed` int(1) NULL DEFAULT NULL,
  PRIMARY KEY (`sid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- 插入日程数据
-- ----------------------------

-- ----------------------------
-- 创建用户表
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user`  (
  `uid` int NOT NULL AUTO_INCREMENT,
  `username` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `user_pwd` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`uid`) USING BTREE,
  UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- 插入用户数据
-- ----------------------------
INSERT INTO `sys_user` VALUES (1, 'zhangsan', 'e10adc3949ba59abbe56e057f20f883e');
INSERT INTO `sys_user` VALUES (2, 'lisi', 'e10adc3949ba59abbe56e057f20f883e');

SET FOREIGN_KEY_CHECKS = 1;

实体类创建(pojo)

1、实体类的类名和表格名称应该对应(对应不是一致)
2、实体类的属性与表格列名应该对应
3、每个属性都必须是私有的
4、每个属性都应该具备getter setter
5、必须具备无参构造器
6、应该实现序列化接口(缓存、分布式项目数据传递,可能会将对象序列化)
7、应该重写类的hashCode和equals方法
8、toString方法是否重写不要求
9、使用lombok帮助我们生成这些内容 getter setter 全参构造 无参构造 equals hashCode
步骤1:检查idea是否安装lombok插件,在设置->插件->已安装里面找,找不到就去marketplace里找找
步骤2:检查是否勾选了enable annotation processer,在设置->构建、执行、部署->编译器->注解处理器->启动注解处理
步骤3:导入lombok的依赖(lombok1.18.24.jar)

//根据两个表,分别创建两个实体类,此处只展示了sys_schedule表对应实体类创建
package com.atguigu.schedule.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@AllArgsConstructor//添加了全参构造
@NoArgsConstructor//添加了无参构造
@Data //getter setter equals hashcode
public class Sys_Schedule implements Serializable {
    private Integer sid;
    private Integer uid;
    private String title;
    private Integer completed;
}

DAO层代码

DAO:data access object数据访问对象
该类中用于定义针对表格的CRUD方法
DAO层一般需要定义接口和实现类
这里需要借助之前JDBC中设计的BaseDao类(基础查询、增删改操作)、JDBCUtil类(管理连接池)
思路:创建表对应Dao,以SysScheduleDao为例,里面包含对数据库操作,SysScheduleDaoImpl是实现类,它继承于BaseDao类,可以使用其中的函数,并实现SysScheduleDao接口内定义的对应数据库操作函数。

Controller包处理

1、构建BaseController类,作为其他表对应Controller的父类,提供功能:根据访问路径找到并使用对应函数
2、其他Controller类只要提供对应访问路径的函数即可,减少代码冗余
3、调用service层代码处理业务逻辑

public class BaseController extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //判断此次请求是增删改查哪一个
        String requestURI = req.getRequestURI();// /schedule/add
        String[] split = requestURI.split("/");
        String methodName = split[split.length-1];
        //使用反射通过方法名获取下面的方法
        Class aClass = this.getClass();
        try {
            Method declaredMethod = aClass.getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            //暴力破解方法的访问修饰符权限
            declaredMethod.setAccessible(true);
            //执行方法
            declaredMethod.invoke(this,req,resp);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

工作流程梳理

1、Controller层:接收用户的请求,调用Service层来处理业务逻辑。
2、Service层:执行业务逻辑,调用DAO层来进行数据操作。
3、DAO层:与数据库交互,进行数据的增、删、改、查操作,返回操作结果给Service层。
4、POJO层:封装数据,将数据库中的数据转换为对象形式,并在不同层之间传递。

标签:SET,请求,utf8mb4,软件设计,----------------------------,--,NULL,JavaWeb
From: https://blog.csdn.net/thm19990903/article/details/142186063

相关文章

  • Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
     2.3.2入门阿里云oss对象存储服务的准备工作我们已经完成了,接下来我们就来完成第二步操作:参照官方所提供的sdk示例来编写入门程序。首先我们需要来打开阿里云OSS的官方文档,在官方文档中找到SDK的示例代码:编辑编辑编辑编辑参照官方提供的SDK,改造一下,即可实现文件上传功能:import......
  • 10个JavaWeb和JavaSE小项目:SSM、SpringBoot。毕设学习好模板。
    本仓列举了15个JavaWeb和JavaSE小项目:有SSM的、SpringBoot+Mybatis的、纯JavaSE+JavaFX的。对初学者非常友好,感兴趣的同学拿去学习。有问题请私信我。汽车租赁管理demo教务信息查询管理demo简易就业信息管理系统简易理财管理系统医院人事管理系统房屋租赁管理dem......
  • 【2025】javaweb教师工作量管理系统(源码+文档+调试+答疑)
    ......
  • 【附源码】超市管理系统(源码+数据库+毕业论文+答辩ppt齐全)java开发springboot框架vu
    ......
  • Javaweb之SpringBootWeb案例之阿里云OSS服务的详细解析
     2.3阿里云OSS2.3.1准备阿里云是阿里巴巴集团旗下全球领先的云计算公司,也是国内最大的云服务提供商。编辑云服务指的就是通过互联网对外提供的各种各样的服务,比如像:语音服务、短信服务、邮件服务、视频直播服务、文字识别服务、对象存储服务等等。当我们在项目开发时需要用到某......
  • Tomcat_使用IDEA开发javaWeb工程并部署运用
    目录1.配置文件点击fileprojectStructure   配置SDK和languagelevel的语言版本一致。apply然后ok。2.然后点击web-all创建一个moudle叫做demo02-web02。 3.这仅仅是一个java的目录结构,我们需要把他转换成javaweb的结构。所以我们需要添加web资源组件。右击demo02-......
  • 软件设计之JavaWeb(2)
    软件设计之JavaWeb(2)此篇应在MySQL之后进行学习:路线图推荐:【Java学习路线-极速版】【Java架构师技术图谱】尚硅谷全新JavaWeb教程,企业主流javaweb技术栈资料可以去尚硅谷官网免费领取此章节最好学完JDBC观看学习内容:HTTP简介Servlet1、HTTP简介交互的方式:请求......
  • 基于单片机的水温监测系统软件设计
    基于单片机的水温监测系统软件设计1主程序框架本温度监测系统的主程序框架如图4-1所示,系统开始是单片机对各个模块进行初始化,通过按键和液晶显示两者之间的交互来实现各个功能的显示,通过按键来切换系统的功能模式,更方便用户了解整个系统的流程,最后实现对温度的监测与显示......
  • Javaweb之SpringBootWeb案例本地存储的详细解析
     2.2本地存储前面我们已分析了文件上传功能前端和后端的基础代码实现,文件上传时在服务端会产生一个临时文件,请求响应完成之后,这个临时文件被自动删除,并没有进行保存。下面呢,我们就需要完成将上传的文件保存在服务器的本地磁盘上。代码实现:在服务器本地磁盘上创建images目录,用来存......
  • 学习高校课程-软件设计模式-软件设计原则(lec2)
    FeatureofGoodDesign(1)优秀设计的特点(一)Codereuse代码复用–Challenge:tightcouplingbetweencomponents,dependenciesonconcreteclassesinsteadofinterfaces,hardcodedoperations–Solution:designpatterns–挑战:组件之间的紧密耦合、对具体类而不......