基于JSP、java、Tomcat三者的项目实战--校园交易网(3)主页--实现修改商品的名字与价格功能(万字爆更)增查改删,三端交互样样齐全

技术支持:JAVA、JSP

服务器:TOMCAT 7.0.86

编程软件:IntelliJ IDEA 2021.1.3 x64

前文几个功能的实现的博客

基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(1)-项目搭建(前期准备工作)-CSDN博客

基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(2)登录功能实现_tomcat jsp mysql-CSDN博客

基于JSP、java、Tomcat三者的项目实战--校园交易网(2)注册功能实现-CSDN博客

基于JSP、java、Tomcat三者的项目实战--校园交易网(3)主页-显示清单(list)-CSDN博客

基于JSP、java、Tomcat三者的项目实战--校园交易网(3)主页--数据库也显示清单遗漏问题-CSDN博客

基于JSP、java、Tomcat三者的项目实战--校园交易网(3)主页--添加商品功能-CSDN博客

基于JSP、java、Tomcat三者的项目实战--校园交易网(3)主页--显示当前用户的信息和系统时间和实现一个简单的购物车功能,包括添加商品、增加数量、减少数量、删除商品以及计算总金额-CSDN博客


在上一篇博客中,我们讲完了添加商品功能和显示时间是怎么写的和一个简单的购物车功能

我们可将添加进来的商品,点击加入购物车按钮,他就会在下面显示我们的购物车一栏,自动计算单价乘以数量,并且我们做了部分优化,左边数量可以减到0,这一栏商品就会自动消失,右边的删除按钮也能删除掉这个商品。

但是,当我要上传的商品数量万一价格要是有所浮动,我们要改变价格这种时候我们要怎么办呢?

基于这个考虑,我们在上方这一栏,我们加入了修改功能。

具体代码在主页中体现

<a href="load?id=<%=e.getId()%>">修改</a>

作用是创建一个超链接,其中 e.getId() 用于动态地生成商品的ID作为参数。具体来说:

  • <a> 标签定义了一个超链接,用户点击该链接时会跳转到指定的页面。
  • href="load?id=<%=e.getId()%>" 设置了链接的目标地址为 load 的服务,并通过参数 id 将商品的ID传递给目标页面。
  • <%=e.getId()%> 是一个 Java 代码块,用于输出当前商品的ID。这里假设 e.getId() 是一个方法或者属性,返回该商品的唯一标识符。

因此,这个超链接的作用是允许用户点击以跳转到一个特定商品的修改页面,该页面根据传递的商品ID加载对应的商品信息以供修改操作。


当然,我们得充分意识到,当我们要进行一项修改工作时,我们首先要做的是先查找到数据,再去做修改数据的工作。

于是我们要再回到我们的这个load--->

load 是一个相对路径,指向你的项目中的某个 Servlet 或者 JSP 页面,在这段代码中我们指向的是一个服务来完成要做的事情,这个链接通常会被浏览器请求并发送到服务器端,服务器端根据路径和参数来处理请求。

因此使用 Servlet 来处理 load 请求,那么通常会在 web.xml 中配置 Servlet 的映射,指定请求的路径和对应的 Servlet 类。

web.xml

    <servlet><servlet-name>load</servlet-name><servlet-class>Servlet.SelectShoppingServlet</servlet-class></servlet><servlet-mapping><servlet-name>load</servlet-name><url-pattern>/load</url-pattern></servlet-mapping>

load-->SelectShoppingServlet,我们就去服务层中找我们的这个查找商品功能。


服务端(查找功能)

SelectShoppingServlet(查找服务)

package Servlet;import dao.StudentDAO;
import entiy.Product;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;public class SelectShoppingServlet extends HttpServlet {public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");StudentDAO studentDAO = new StudentDAO();String id = request.getParameter("id");System.out.println(id);PrintWriter writer = response.getWriter();try {Product product = studentDAO.findById(Integer.parseInt(id));request.setAttribute("goods",product );RequestDispatcher rd = request.getRequestDispatcher("Update.jsp");rd.forward(request,response);} catch (Exception e) {throw new RuntimeException(e);}}
}

我们可以看到,这段代码中主要来起作用的还是dao层的findById方法来锁定id进行查找,主要用于处理客户端的 HTTP 请求,并根据请求中的商品ID查询对应的商品信息,然后将该信息传递给一个名为 Update.jsp 的 JSP 页面进行展示或处理。

  1. 字符编码和响应类型设置

    • request.setCharacterEncoding("utf-8") 和 response.setContentType("text/html;charset=utf-8") 确保请求和响应都使用 UTF-8 编码,以支持处理中文和其他特殊字符。
  2. DAO 对象的创建和使用

    • StudentDAO studentDAO = new StudentDAO(); 创建了一个用于访问数据库的 StudentDAO 实例,用于执行对商品数据的操作。
  3. 获取和解析请求参数

    • String id = request.getParameter("id"); 获取名为 "id" 的请求参数,通常是客户端传递的商品ID。
  4. 查询数据库并获取商品信息

    • Product product = studentDAO.findById(Integer.parseInt(id)); 调用 studentDAO 的 findById 方法,根据解析后的商品ID查询数据库中对应的商品信息,并将结果存储在 product 对象中。
  5. 设置请求属性和请求转发

    • request.setAttribute("goods", product); 将查询得到的 product 对象作为名为 "goods" 的请求属性存储起来,以便后续在目标页面 Update.jsp 中使用。
    • RequestDispatcher rd = request.getRequestDispatcher("Update.jsp"); 创建一个请求分派器对象,用于将请求转发到名为 Update.jsp 的 JSP 页面。
    • rd.forward(request, response); 执行请求转发操作,将当前请求和响应对象传递给 Update.jsp 页面,使其能够处理商品信息的展示或进一步的操作。

处理客户端请求、查询数据库、设置请求属性并将请求转发到另一个页面

dao层

 public Product findById(int id) throws Exception{Connection conn = null;PreparedStatement prep = null;ResultSet rst = null;Product e =new Product();try {conn =DBUtil.getConnection();System.out.println(conn);prep = conn.prepareStatement("select * from goods where id="+id+"");System.out.println(id);rst = prep.executeQuery();if(rst.next()){int id1 = rst.getInt("id");String name = rst.getString("name");Double price = rst.getDouble("price");e.setId(id1);e.setName(name);e.setPrice(price);}}catch (Exception e1){e1.printStackTrace();throw e1;}finally {DBUtil.close(conn);}return e;}

findById方法用于根据给定的商品ID从数据库中查询对应的商品信息,并返回一个 Product 对象

  1. 数据库连接和准备语句

    • Connection conn = DBUtil.getConnection(); 获取数据库连接,DBUtil.getConnection() 是一个自定义的方法,用于获取数据库连接对象。
    • prep = conn.prepareStatement("select * from goods where id="+id+""); 创建 PreparedStatement 对象,预编译 SQL 查询语句,通过商品ID从数据库中查询商品信息。
  2. 执行查询并处理结果集

    • rst = prep.executeQuery(); 执行查询操作,将查询结果存储在 ResultSet 对象 rst 中。
    • if(rst.next()) { ... } 判断查询结果集中是否有数据,如果有,进入条件语句块处理查询到的商品信息。
  3. 将查询结果映射到实体对象

    • int id1 = rst.getInt("id"); 从结果集中获取商品ID。
    • String name = rst.getString("name"); 获取商品名称。
    • Double price = rst.getDouble("price"); 获取商品价格。
    • e.setId(id1);e.setName(name);e.setPrice(price); 将查询到的商品ID、名称和价格设置到 Product 对象 e 的对应属性中。
  4. 异常处理和资源关闭

    • catch (Exception e1) { ... } 捕获可能抛出的异常,打印异常堆栈信息,并重新抛出异常。
    • finally { DBUtil.close(conn); } 在 finally 块中关闭数据库连接,确保资源得到正确释放,避免资源泄漏。
  5. 返回查询结果

    • return e; 返回封装了查询到的商品信息的 Product 对象 e

实体层

Product

package entiy;public class Product {private int id;private String name;private double price;// 其他商品属性,如颜色、库存等// 构造方法、getter和setter方法public int getId() {return id;}public void setId(int id) {this.id = id;}public Product(/*, 其他属性 */) {this.name = name;this.price = price;// 初始化其他属性}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() { return price; }public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Product{" +"id=" + id +", name='" + name + '\'' +", price=" + price +'}';}
}

Student

package entiy;public class Student {private String name;private int idname;private String pd;public String getName(){return name;}public void setName(String name){this.name=name;}public int getIdname(){return idname;}public void setIdname(int idname){this.idname = idname;}public String getPd(){return pd;}public void setPd(String pd){this.pd = pd;}@Overridepublic String toString(){return "Student{"+"name="+name+"idname="+idname+",pd="+pd+'}';}}


网页端

Update.jsp

<%@ page import="entiy.Product" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><title>修改商品信息</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css"href="css/style.css" />
</head><body>
<div id="wrap"><div id="top_content"><div id="header"><div id="rightheader"></div><div id="topheader"><h1 id="title">商品修改</h1></div><div id="navigation"></div></div><div id="content"><p id="whereami"></p><h1>修改商品信息:</h1><form action="update" method="post"><%Product product = (Product) request.getAttribute("goods");System.out.println(product.getId());%><table cellpadding="0" cellspacing="0" border="0"class="form_table"><tr><td valign="middle" align="right">商品:</td><td valign="middle" align="left"><input type="text" class="inputgri" name="name" value="<%=product.getName()%>" /></td></tr><tr><td valign="middle" align="right">价格:</td><td valign="middle" align="left"><input type="text" class="inputgri" name="price" value="<%=product.getPrice()%>" /><input type="hidden" name="id" value="<%=product.getId()%>"></td></tr></table><p><input type="submit" class="button" value="提交" /></p></form></div></div><div id="footer"><div id="footer_bg">ABC@126.com</div></div>
</div>
</body>
</html>

主要就是用于展示和修改商品信息的表单页面。

  • <%@ page import="entity.Product" %>:导入 Product 实体类,用于在页面中访问商品对象的属性和方法。
  • <form action="update" method="post">:表单的提交地址为 update,使用 POST 方法提交表单数据。
  • <% Product product = (Product) request.getAttribute("goods"); %>:从请求中获取名为 goods 的属性,并将其转换为 Product 对象 product。这通常是通过在 Servlet 中设置请求属性来实现的,用于向页面传递数据。
  • 表单元素

    • <input type="text" class="inputgri" name="name" value="<%=product.getName()%>" />:文本输入框用于显示和修改商品名称,其值从 product 对象的 getName() 方法获取。
    • <input type="text" class="inputgri" name="price" value="<%=product.getPrice()%>" />:文本输入框用于显示和修改商品价格,值从 product 对象的 getPrice() 方法获取。
    • <input type="hidden" name="id" value="<%=product.getId()%>">:隐藏输入框用于传递商品ID,值从 product 对象的 getId() 方法获取。
  • <% System.out.println(product.getId()); %>:在页面中打印商品的ID,通常用于调试目的。

因为其<form action="update" method="post">

表单的提交地址为 update,使用 POST 方法提交表单数据。所有我们在web.xml中又要再写一个

    <servlet><servlet-name>update</servlet-name><servlet-class>Servlet.UpdateShoppingServlet</servlet-class></servlet><servlet-mapping><servlet-name>update</servlet-name><url-pattern>/update</url-pattern></servlet-mapping>

所以在服务端,我们还要继续写一个update功能,能够实现从id查找到我我们选中的商品然后去进行修改

服务端(更新或者说是修改功能)

UpdateShoppinngServlet

package Servlet;import dao.StudentDAO;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class UpdateShoppingServlet extends HttpServlet {public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {StudentDAO productDAO = new StudentDAO();request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");// Get parameters from requestString idStr = request.getParameter("id");String name = request.getParameter("name");String priceStr = request.getParameter("price");// Validate parametersif (idStr == null || name == null || priceStr == null || idStr.isEmpty() || name.isEmpty() || priceStr.isEmpty()) {response.getWriter().println("Invalid parameters. Please provide all fields.");return;}try {// Parse parametersint id = Integer.parseInt(idStr);double price = Double.parseDouble(priceStr);// Update product in DAOproductDAO.Update(id, name, price);// Redirect to list page after successful updateresponse.sendRedirect("list");} catch (NumberFormatException e) {// Handle if id or price is not a valid numberresponse.getWriter().println("Invalid id or price format. Please enter valid numbers.");} catch (Exception e) {// Handle other exceptionsthrow new ServletException("Error updating product", e);}}
}
  1. 导入依赖和设置编码

    • 导入了StudentDAO类,该类用于处理与数据库的交互。
    • 设置请求和响应的字符编码为UTF-8,以确保能够正确处理中文字符。
  2. 重写service方法

    • Servlet类重写了service方法,该方法接收HttpServletRequestHttpServletResponse作为参数,用于处理客户端的请求和生成响应。
  3. 创建DAO对象

    • 实例化了StudentDAO对象productDAO,用于后续的数据库操作。
  4. 获取和验证参数

    • 从请求中获取商品的ID(idStr)、名称(name)和价格(priceStr)。
    • 对获取的参数进行非空和有效性验证:
      • 如果有任何一个参数为空或空字符串,向响应输出错误信息并提前结束处理。
  5. 参数解析和更新操作

    • 尝试将获取到的ID和价格转换为整型和双精度浮点数,如果转换失败则捕获NumberFormatException
    • 调用productDAOUpdate方法,将解析后的ID、名称和价格传递给DAO层进行商品信息的更新操作。
  6. 处理更新结果

    • 如果更新成功,使用response.sendRedirect("list")将用户重定向到商品列表页面。
    • 如果更新过程中出现非数字格式的ID或价格,捕获并处理NumberFormatException,向响应输出相应的错误信息。
    • 如果更新过程中出现其他异常,捕获并抛出ServletException,并将异常信息传递给上层处理。

dao层(update方法)

public void Update(int id,String name,double price) throws Exception {Connection connection = DBUtil.getConnection();PreparedStatement preparedStatement = connection.prepareStatement("update goods set name=?,price=? where id =?;");preparedStatement.setString(1,name);preparedStatement.setDouble(2,price);preparedStatement.setInt(3,id);int i = preparedStatement.executeUpdate();connection.close();}

突然发现,可能前面都没说明这个DBUtil包的好像

DBUtil

package util;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class DBUtil {public static Connection getConnection() throws Exception {Connection conn = null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sdjyy?" +"useUnicode=true&characterEncoding=utf8","root","asd123");} catch (Exception e) {e.printStackTrace();throw e;}return conn;}public static void close(Connection conn){if(conn!=null){try {conn.close();}catch (SQLException e){e.printStackTrace();}}}public static void main(String[] args)throws Exception{Connection conn = getConnection();System.out.println(conn);}
}
  • getConnection 方法用于获取数据库连接对象 Connection
  • 首先,通过 Class.forName 加载 MySQL 数据库驱动程序 com.mysql.jdbc.Driver
  • 然后,使用 DriverManager.getConnection 方法建立与 MySQL 数据库的连接,连接的 URL 指定了本地主机和端口(localhost:3306),以及数据库名(sdjyy)和连接参数(使用Unicode编码和UTF-8字符集)。
  • 如果连接过程中出现异常,会将异常打印出来并重新抛出,向上层调用方法传递异常信息。

  • close 方法用于关闭 Connection 对象。
  • 首先检查传入的 conn 是否为 null,如果不为 null,则调用 conn.close() 方法关闭数据库连接。
  • 如果在关闭连接时发生 SQLException 异常,会将异常打印出来,但不会重新抛出异常,而是简单地记录异常信息。

实现功能截图

从网页上方我们可以明确得知我们拿到了id,也是,我们在写改操作时,常常会因为没有拿到id而数值传为空报错。

笔者在写改操作时,也是在dao层中没有写下我的setid方法,一直传为空,没有拿到id

修改完之后,我们可以看到成功修改了,同时也重定向回到了我们的list页面。

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

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

相关文章

5.5软件工程-系统测试

系统测试 意义和目的原则测试过程测试策略测试方法练习题 测试用例设计黑盒测试等价类划分边界值分析错误推测因果图 白盒测试逻辑覆盖循环覆盖基本路径测试法 练习题 调试软件度量练习题 考点少&#xff0c;知识点多 意义和目的 系统测试的意义&#xff1a;系统测试是为了发现…

科普文:微服务之分布式链路追踪SkyWalking单点服务搭建

1. 概述 1.1 概念 SkyWalking 是什么&#xff1f; SkyWalking 极简入门 | Apache SkyWalking FROM Apache SkyWalking 分布式系统的应用程序性能监视工具&#xff0c;专为微服务、云原生架构和基于容器&#xff08;Docker、K8s、Mesos&#xff09;架构而设计。 提供分布式追…

19.计算两点间的距离

Problem-2001 Problem Description 输入两点坐标&#xff08;X1,Y1&#xff09;,&#xff08;X2,Y2&#xff09;,计算并输出两点间的距离。 Input 输入数据有多组&#xff0c;每组占一行&#xff0c;由4个实数组成&#xff0c;分别表示x1,y1,x2,y2,数据之间用空格隔开。 Outpu…

Python实战——轻松实现动态网页爬虫(附详细源码)

大家好&#xff0c;我是东眠的鱼&#xff0c;专注原创&#xff0c;致力于用浅显易懂的语言分享爬虫、数据分析及可视化等干货&#xff0c;希望人人都能学到新知识。<文末附带精品籽料哦&#xff0c;也可以和博主一起学Python呀&#xff01;> 项目背景 有同学自学爬虫时…

Redis基础总结、持久化、主从复制、哨兵模式、内存淘汰策略、缓存

文章目录 Redis 基础Redis 是什么&#xff0c;有哪些特点为什么要使用 Redis 而不仅仅依赖 MySQLRedis 是单线程吗Redis 单线程为什么还这么快 Redis 数据类型和数据结构五种基本数据结构及应用场景其他数据类型Redis 底层数据结构 Redis 持久化数据不丢失的实现AOF 日志RDB 快…

go中的值传递和指针传递

文章目录 1、& 和 *2、空指针3、nil4、用值传递还是指针传递&#xff1f;5、补充 1、& 和 * &后跟一个变量名&#xff0c;得到的是这个变量的内存地址*int类型的变量&#xff0c;代表这个变量里存的值是int类型的变量的内存地址数据类型的指针类型&#xff0c;即在…

Spring Boot 参数校验 Validation 使用

概述 当我们想提供可靠的 API 接口&#xff0c;对参数的校验&#xff0c;以保证最终数据入库的正确性&#xff0c;是必不可少的活。前、后端校验都是保证参数的准确性的手段之一&#xff0c;前端校验并不安全&#xff0c;任何人都可以通过接口来调用我们的服务&#xff0c;就算…

【linux】【操作系统】内核之traps.c源码阅读

C 文件traps.c 是 Linux 内核的一部分&#xff0c;主要处理硬件陷阱和故障。文件中包含多个函数来处理不同类型的异常和错误。下面是详细的解析&#xff1a; 概览 目的&#xff1a;此文件负责处理各种硬件异常和故障。它包括了处理特定类型错误以及初始化异常处理器的函数。文…

前端的学习-CSS(弹性布局-flex)

一&#xff1a;什么是弹性布局-Flex flex 是 Flexible Box 的缩写&#xff0c;意为"弹性布局"&#xff0c;用来为盒状模型提供最大的灵活性。 语法&#xff1a; .box{display: flex; } .box{display: inline-flex; } 注意&#xff0c;设为 Flex 布局以后&#xff0…

SpringBoot整合Knife4j接口文档

1. 在项目入口模块pom文件导入依赖 <!-- knife4j&#xff08;API 文档工具&#xff09; --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi2-spring-boot-starter</artifactId><version>${knife4j…

新款奔驰S450升级动态按摩座椅有哪些功能

奔驰 S450 升级前排动态按摩座椅通常具有以下功能&#xff1a; 1. 多种按摩模式和强度选择&#xff1a;通过精心设计的气囊和机械装置&#xff0c;能够模拟如揉捏、敲击、推拿等不同的按摩手法&#xff0c;为驾驶者和前排乘客舒缓肌肉疲劳&#xff0c;放松身心。 2. 广泛的按…

6.C基础_输入输出函数

putchar 功能&#xff1a;输出一个字符 函数声明&#xff1a; int putchar(int c);返回值&#xff1a;参数c的ASCLL码值 c&#xff1a;要输出的字符&#xff0c;可以为字符常量、字符变量或表达式 注意点&#xff1a;输出的结果不带\n getchar 功能&#xff1a;从键盘读…

SpringCache集成Redis

1. 添加config配置类 配置SpringCache 与 redis 的集成 配置类 2. 在service层中加注解 在Service层中增加注解 CacheConfig() 里面的CacheNmes是redis的nameSpace命名空间 方法上的Cacheable是key的值 请求结果 第一次会查数据库&#xff0c;后面相同的查询会直接走redis&am…

LBS 开发微课堂|Polyline绘制优化:效果更丰富,性能更佳!

为了让广大的开发者 更深入地了解 百度地图开放平台的技术能力 轻松掌握满满的技术干货 更加简单地接入 开放平台的服务 我们特别推出了 “位置服务&#xff08;LBS&#xff09;开发微课堂” 系列技术案例 第一期的主题是 《Polyline 绘制优化升级》 你还想了解哪些…

vulhub:Apache解析漏洞CVE-2017-15715

Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个换行解析漏洞&#xff0c;在解析PHP时&#xff0c;1.php\x0A将被按照PHP后缀进行解析&#xff0c;导致绕过一些服务器的安全策略。 #启动靶机 cd /Vulnhub/vulhub-mast…

程序员的魔法石!

本文由 ChatMoney团队出品 AI自己写代码&#xff0c;这只是传说&#xff1f;还是摸鱼新指南&#xff1f; AI出现之前&#xff0c;从来都是老板或产品经理提需求&#xff0c;程序员熬夜加班吭哧吭哧写代码或者是从Github&#xff0c;Stackoverflow上controlc&#xff0c;control…

JavaFX布局-GridPane

JavaFX布局-GridPane 常用实行alignmenthgapvgappaddinggridLinesVisible 实现方式Java实现fxml实现 使用行和列来组织其子节点将节点放置在二维网格中的任何单元格&#xff0c;同时也可以设置跨越行、跨越列 常用实行 alignment 对齐方式&#xff0c;设置内容居中&#xff0…

数据库文件管理

数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查)效率低 2.数据库对数据管理效率高,使用方便 常用数据库: 1.关系型数据库&#xff1a; 将复杂的数据结构简化为二维表格形式 大型:Oracle、DB2 中型:MySql、SQLServer 小型:Sqlite 2.非关…

第三十一天 chrome调试工具

打开调试工具 页面空白处右击 检查 或者F12 使用调试工具 ctrl滚轮改变代码大小 左边是html 右边是css css可以直接改动数值左右箭头或者直接输入 查看颜色 ctrl0 复原浏览器大小 点击元素右侧出现样式引入 没有的话 说明类名或者样式引用错误 这里的.new-left是存在的 如果类…

【Android Studio】UI 布局

文章目录 view布局LinearLayout view 在Android开发中&#xff0c;View是一个非常重要的概念&#xff0c;它是所有用户界面组件的基类。View类及其子类构成了Android应用中的用户界面。每个View都占用屏幕上的一个矩形区域&#xff0c;并可以响应用户输入&#xff08;如触摸、按…