day48_servlet

今日内容

周一
0 复习上周
1 本周计划
2 MVC和三层架构
3 Login案例
4 请求转发
5 重定向

0 复习昨日

1 jdbc五大步骤

  1. 注册驱动(反射)
  2. 获得连接
  3. 获得执行sql对象
  4. 执行SQL
  5. 关流
    2 什么是SQL注入
    通过SQL关键词,在执行SQL时出现不正常的情况
    3 PreparedStatement怎么使用,有什么特点
    怎么使用? 之前拼接sql参数的地方,现在使用?占位,经过预处理后,再给?处赋值
    有什么特点? 1) 执行时不需要再给executeQuery()传参数
    2) 可以避免SQL注入的问题
    3) 向?赋值的时候,自动给字符串拼接单引号
    mybatis # PreparedStatement ,字符串’’
    $ Statement
    4 什么是servlet
    servlet是运行在服务上的程序
    servlet主要功能是: 接收请求,做出响应

5 Http请求方式有哪些
get
post
6 Http请求报文都有哪些内容
请求头,请求行,请求正文(数据)

针对不同的请求方式,后台有哪些请求方法?
doGet()
doPost()
7 后台接收请求内容的方法有哪些
req.getMethod()
req.getRequestURL()
req.getRequestURI()
req.getParameter(name属性的值);//获得请求数据
req.getParameterValues();

8 前端如何发送数据
form表单,标签得设置name属性

		<form action="/day48/login" method="get">
		  <input type="text" name="username" />
		  <input type="text" name="password" />
		  <input type="submit" value="提交" />
		</form>

​ ajax
​ a标签

<a href="/day48/login?username=root&pwd=555">登录</a>

9 前端后后台之间如何映射?
通过web.xml配置8行代码

	<servlet>
		<servlet-name>servlet1</servlet-name>
		<servlet-class>c.f.s.MyServlet1</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>servlet1</servlet-name>
		<url-parttern>*.do</url-parttern>
	</servlet-mapping>

1 MVC和三层架构

通过Login案例,一个LoginServlet中

  • 接收请求

  • 完成JDBC操作

  • 根据结果做出响应

    以上这种开发模式,不好,不便于后期迭代维护


在开发中有一个思想:“分而治之”

MVC思想

  • M model/模型
    • 模型主要是指javabean,有一些java类
    • 比如封装数据的类,User类
    • 比如其他功能类,UserService,UserDao
  • V view/视图
    • 视图就是页面,
    • 比如JSP/HTML
    • 为了展现数据
  • C controller/控制器
    • 控制器控制整个流程的走向
    • 控制页面跳转

三层架构: 是指开发中编码时项目结构,主要是指将不同的功能代码再细分

  • 控制层
    • servlet主要做控制
    • 控制页面跳转
  • 业务层
    • service层
    • 主要处理业务逻辑
  • 数据访问层
    • Dao层
    • 主要与数据库交互

2 Login案例

需求: HTML页面中输入框用户名和密码,登录

  • 登录成功给出提供,欢迎
  • 登录不成功,给出提示,用户名或密码错误

在这里插入图片描述

2.1 搭建环境

数据库环境

CREATE TABLE `tb_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户编号',
  `username` varchar(10) DEFAULT NULL COMMENT '用户名',
  `password` varchar(10) DEFAULT NULL COMMENT '密码',
  `phone` varchar(11) DEFAULT NULL COMMENT '手机号',
  `createTime` date DEFAULT NULL COMMENT '注册时间',
  `money` double(10,2) DEFAULT NULL COMMENT '账户余额',
  `sex` int(1) DEFAULT NULL COMMENT '性别 1男2女',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8;

项目环境

  • 创建maven-web项目

  • 补全项目结构

  • 导入依赖

      <dependencies>
        <!-- servlet -->
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>4.0.1</version>
        </dependency>
    
        <!-- servlet-jsp -->
        <dependency>
          <groupId>javax.servlet.jsp</groupId>
          <artifactId>javax.servlet.jsp-api</artifactId>
          <version>2.3.1</version>
        </dependency>
    
        <!-- mysql驱动 -->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.47</version>
        </dependency>
        
        <!-- druid连接池 -->
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.1.10</version>
        </dependency>
      </dependencies>
    
  • 项目必备的java包和类

    • 工具包和工具类
    • 实体类
    • 包结构

2.2 页面

登录页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <form action="/day48/login" method="post">
        用户名<input type="text" name="username"><br>
        密码<input type="password" name="password"><br>
        <input type="submit" value="登录"><br>
    </form>
</div>
</body>
</html>

2.3 UserServlet

package com.qf.servlet;

import com.qf.model.User;
import com.qf.service.UserService;
import com.qf.service.impl.UserServiceImpl;

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;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc 控制层
 */
public class UserLoginServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 防止乱码
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");

        // 1 接收请求
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        // 2 调用业务层处理业务
        UserService userService = new UserServiceImpl( );
        User user = userService.login(username, password);

        // 3 根据结果做出响应
        PrintWriter out = resp.getWriter( );
        if (user != null) {
            // 响应登录成功
            // 应该是跳转一个页面来展现数据,而不是直接作出响应
            // 但是现在还没学,暂时还是使用手动响应
            out.write("<html>");
            out.write("<body>");
            out.write("<h1>");
            out.write("欢迎"+user.getUsername()+"登录");
            out.write("</h1>");
            out.write("</body>");
            out.write("</html>");
        } else {
            // 响应登录不成功
            out.write("<html>");
            out.write("<body>");
            out.write("<h1>");
            out.write("用户名或密码错误!");
            out.write("</h1>");
            out.write("</body>");
            out.write("</html>");
        }
    }
}

2.4 UserService

一般开发时,会将UserService以及UserDao设计成接口+实现类的形式

  • 可以先设计接口,规定项目的功能
  • 接口还可以松耦合,实现多态,易于代码扩展

UserService接口

package com.qf.service;

import com.qf.model.User;

import java.util.List;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc 用户的业务层处理
 */
public interface UserService {

    User login(String username, String password);

    // List<User> findAll();

    // boolean deleteUserById(int id);

}

UseServiceImpl

package com.qf.service.impl;

import com.qf.dao.UserDao;
import com.qf.dao.impl.UserDaoImpl;
import com.qf.model.User;
import com.qf.service.UserService;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc impl包,只用于存放实现类
 * 所有的实现类都应该是接口名+Impl来命名
 * 例如: UserServiceImpl
 * 通过这个名字,要得到两个信息
 * 1) 有一个接口UserService
 * 2) 有一个类UserServiceImpl
 * -----------------------------
 * Service层,是业务层,处理业务逻辑
 */
public class UserServiceImpl implements UserService {

    @Override
    public User login(String username, String password) {
        // 1 业务逻辑处理
        // 但是今天这个需求没有什么业务,就可以不做

        // 2 调用数据访问层操作数据库
        UserDao userDao = new UserDaoImpl();
        User user = userDao.login(username, password);

        // 业务层还可以对数据库返回的结果再处理

        return user;
    }
}

2.5 UserDao

UserDao接口

package com.qf.dao;

import com.qf.model.User;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc
 */
public interface UserDao {

    User login(String username, String password);

}

UserDaoImpl实现类

package com.qf.dao.impl;

import com.qf.dao.UserDao;
import com.qf.model.User;
import com.qf.util.DBUtil;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc
 */
public class UserDaoImpl implements UserDao {

    @Override
    public User login(String username, String password) {
        String sql = "select * from tb_user where username = ? and password = ?";
        User user = DBUtil.selectOne(sql, User.class, username, password);
        return user;
    }
}

这里使用了DBUtil,不习惯使用的话,也可以使用原始的JDBC自己操作

3 请求转发

请求对象HttpServletRequest

  • 请求的转发(将请求转发到其他的servlet)
  • 跳转页面
  • 请求域(存取数据)

请求转发的总结

  • 请求转发地址栏不动
  • 请求转发是服务器行为,是服务器内部动作
  • 浏览器只有一次请求
  • 可以当做请求域,数据可以在Servlet之间共享

在这里插入图片描述

3.1 请求转发

需求: 发出请求/a 映射AServlet,利用请求转发,将请求转发到BServlet

package com.qf.servlet;

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;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc
 */
public class AServlet extends HttpServlet {

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

        System.out.println("AServlet.doGet..." );


        // 请求转发
        // path: 就是要转发的Servlet对应的映射路径
        // RequestDispatcher dispatcher = req.getRequestDispatcher("/b");
        // 执行转发
        // dispatcher.forward(req,resp);
        // 路径不需要写成 /项目名/b
        req.getRequestDispatcher("/b").forward(req,resp);
    }
}
package com.qf.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc
 */
public class BServlet extends HttpServlet {

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

        System.out.println("BServlet.doGet..." );

    }
}
<?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_3_1.xsd"
version="3.1">

    <!-- 映射AServlet -->
    <servlet>
        <servlet-name>aServlet</servlet-name>
        <servlet-class>com.qf.servlet.AServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>aServlet</servlet-name>
        <url-pattern>/a</url-pattern>
    </servlet-mapping>

    <!-- 映射BServlet -->
    <servlet>
        <servlet-name>bServlet</servlet-name>
        <servlet-class>com.qf.servlet.BServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>bServlet</servlet-name>
        <url-pattern>/b</url-pattern>
    </servlet-mapping>
</web-app>

3.2 请求域

请求域是指: HttpServletRequest对象相当于是容器,存取数据,可以在请求转发的几个类中共享数据.

  • 存储数据 req.setAttribute(key,value)
  • 取出数据 req.getAttribute(key)

请求域作用以及场景: 在多个Servlet请求转发的时候,用来传递数据

package com.qf.servlet;

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.util.Date;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc
 */
public class AServlet extends HttpServlet {

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

        System.out.println("AServlet.doGet..." );

        // 请求域
        // 存储数据到请求域
        req.setAttribute("username","jack");

        // 请求转发
        // path: 就是要转发的Servlet对应的映射路径
        // RequestDispatcher dispatcher = req.getRequestDispatcher("/b");
        // 执行转发
        // dispatcher.forward(req,resp);
        // 路径不需要写成 /项目名/b
        req.getRequestDispatcher("/b").forward(req,resp);
    }
}
package com.qf.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * --- 天道酬勤 ---
 *
 * @author QiuShiju
 * @desc
 */
public class BServlet extends HttpServlet {

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

        System.out.println("BServlet.doGet..." );

        // 请求域中取出数据
        String username = (String) req.getAttribute("username");

        System.out.println("username = " + username);
    }
}

3.3 跳转页面

在这里插入图片描述

4 重定向

重定向是HttpServletResponse对象完成一个动作

  • 可以将请求重新跳转至其他Servlet
  • 可以跳转页面

重定向总结:

  • 重定向是浏览器动作
  • 重定向地址栏会有变化
  • 是发出两次请求
  • 请求域中的数据在重定向后不能共享(因为是两次请求)

需求:

需求: 发出请求/a 映射AServlet,利用重定向,将请求重新发送请求到BServlet

public class AServlet extends HttpServlet {

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

        System.out.println("AServlet.doGet..." );

        // 请求域
        // 存储数据到请求域
        req.setAttribute("username","jack");

        // 请求转发
        // path: 就是要转发的Servlet对应的映射路径
        // RequestDispatcher dispatcher = req.getRequestDispatcher("/b");
        // 执行转发
        // dispatcher.forward(req,resp);
        // 路径不需要写成 /项目名/b,是因为请求转发是服务器动作
        // /b,即从服务器根路径开始访问,服务器的根路径自带项目名
        // http://localhost:8080/day48/b
        //req.getRequestDispatcher("/b").forward(req,resp);

        // 请求转发可以跳转页面
        // req.getRequestDispatcher("/404.html").forward(req,resp);


        // 重定向
        // 重定向是浏览器行为,发出/b请求,那就是从浏览器的根路径发出请求
        // 浏览器的根路径是端口: http://localhost:8080/b
        String contextPath = req.getContextPath( ); // 获得项目名 /day48
        System.out.println("contextPath = " + contextPath);

        // resp.sendRedirect(contextPath+"/b");
        resp.sendRedirect(contextPath+"/404.html");
    }
}

5 注解

JDK1.5后出现的技术,注解(Annotation),是一种注释,给程序注释然后程序运行给JVM中的java代码看的

  • @Override

注解文件既不是类也不是接口

5.1 创建注解文件

在这里插入图片描述

5.2 元注解

注解的注解就是元注解

5.2.1 @Target

@Target 目标,用来规定注解能用在什么位置

位置ElementType
包上PACKAGE
类/接口/数组/枚举上TYPE
成员变量/局部变量FIELD/LOCAL_VARIABLE
方法/构造方法METHOD/CONSTRUCTOR

5.2.2 @Retention

保留,指注解保留到什么时候,或者说叫保留至什么时候生效

ps: 如果是自定义注解,一般是为了通过反射技术读取注解,所以要定义保留策略为RUNTIME

保留策略解释
SOURCE源码阶段有效
CLASS编译后class中有效
RUNTIME运行时生效

5.3 注解参数

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnno {
    // 注解的参数
    // 数据类型 参数名();
    // 一旦设置了参数,那么在使用注解时就必需给注解参数赋值
    // 除非给参数设置了默认值
    int a() default 0;

    // 当注解的参数名value,使用时可以省略
    String value() default "";

    String[] values() default "";

}

注解的参数都是为了通过反射技术去读取到注解参数中的值

5.4 实际应用

Servlet开发中也支持使用注解,大大提高开发效率

  • @WebServlet 注解,可以取代web.xml中[经典8行]代码

作业

login案例重写2遍 (注解)

通过代码演示记住 请求转发和重定向的特点

SQL15道题

牛客网-SQL专项 (每天2-3)
留策略解释
SOURCE源码阶段有效
CLASS编译后class中有效
RUNTIME运行时生效

5.3 注解参数

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnno {
    // 注解的参数
    // 数据类型 参数名();
    // 一旦设置了参数,那么在使用注解时就必需给注解参数赋值
    // 除非给参数设置了默认值
    int a() default 0;

    // 当注解的参数名value,使用时可以省略
    String value() default "";

    String[] values() default "";

}

注解的参数都是为了通过反射技术去读取到注解参数中的值

5.4 实际应用

Servlet开发中也支持使用注解,大大提高开发效率

  • @WebServlet 注解,可以取代web.xml中[经典8行]代码

作业

login案例重写2遍 (注解)

通过代码演示记住 请求转发和重定向的特点

SQL15道题

牛客网-SQL专项 (每天2-3)

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

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

相关文章

SpringAOP从入门到源码分析大全(四)SpringAOP的源码分析

文章目录 系列文档索引六、EnableAspectJAutoProxy源码分析1、AnnotationAwareAspectJAutoProxyCreator源码&#xff08;1&#xff09;wrapIfNecessary方法&#xff08;2&#xff09;createProxy 2、getAdvicesAndAdvisorsForBean查找所有Advisor&#xff08;1&#xff09;find…

人工智能入门(一):基于Pytorch的手写数字识别模型

前言&#xff1a; 因为还在上学&#xff0c;时间不太够用&#xff0c;很多内容写到后面心有余力不足&#xff0c;未来有时间我会慢慢补充。人工智能的知识涉猎范围广又杂乱无章&#xff0c;啃书或上课学到的知识往往很早就过时了或者离实际的项目无关。所以&#xff0c;我很希…

安装mmsegmentation默认主分支main

安装时间2024.4.21 mmsegmentation新版本main分支&#xff08;v1.2.2&#xff09; 安装过程 conda create --name openmmlab python3.8 -y conda activate openmmlab// 很关键&#xff0c;可以避免mmcv版本问题 pip install torch1.10.1cu113 torchvision0.11.2cu113 torcha…

【力扣 Hot100 | 第七天】4.22(移动零)

文章目录 1.移动零1.1题目1.2解法&#xff1a;双指针1.2.1双指针思路1.2.2代码实现 1.移动零 1.1题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数…

[docker] volume 补充 环境变量 参数

[docker] volume 补充 & 环境变量 & 参数 这里补充一下 volume 剩下的内容&#xff0c;以及添加参数(ARG) 和 环境变量 ENV 的内容 read only volumes ❯ docker run-p 3000:80--rm--name feedback-app-v feedback:/app/feedback-v "$(pwd):/app"-v /app/…

第 394 场 LeetCode 周赛题解

A 统计特殊字母的数量 I 哈希&#xff1a;遍历然后枚举 class Solution {public:int numberOfSpecialChars(string word) {unordered_map<char, int> m;for (auto ch : word)m[ch] 1;int res 0;for (char ch a; ch < z; ch)if (m.count(ch) && m.count(A …

爬虫采集:数据提取

目录 1. 数据分类 2. JSON 2.1 json数据转换​编辑 3. 正则表达式 3.1 re模块 3.1.1 常见方法 3.1.2 单字符匹配 3.1.4 匹配开头和结尾 3.1.5 分组匹配 3.1.6 贪婪非贪婪匹配 4. Xpath 4.1 语法 4.2 查找特定节点 4.3 lxml 模块 4.3.1 安装 4.3.2 导入 4.3.3 使…

【行为型模式】命令模式

一、命令模式概述 命令模式的定义&#xff1a;将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。(对象行为型) 命令模式优缺点&#xff1a; 优点&#xff1a; 1.类间解耦&#xff1a;调用者角色与接收者角色之间没有任何依…

TPG原理以及verilog实现

文章目录 一、前言二、verilog代码实现三、仿真以及结果分析 一、前言 TPG(video_test_pattern generator) 视频测试模式发生器用于产生测试数据&#xff0c;对视频数据通路测试。根据视频输出时序产生相应的图像数据 二、verilog代码实现 timescale 1ns / 1nsmodule tpg ( i…

鸿蒙入门10-CheckBoxGroup组件

复选框群组 用于控制多个复选框全选或者不全选状态 参数 参数形式 &#xff1a; CheckboxGroup( options?: { group?: string } ) 创建复选框群组&#xff0c;可以用于控制群组内的 CheckBox 成员 全选 或者 不全选 相同 group 的 CheckBox 和 CheckBoxGroup 为同一群组 参…

Python turtle海龟绘制美国队长盾牌

使用Python中的turtle模块绘制美队盾牌 具体思路如下&#xff1a; 导入海龟库第1个圆&#xff1a;半径 200&#xff0c;红色填充第2个圆&#xff1a;半径 150&#xff0c;白色填充第3个圆&#xff1a;半径 100&#xff0c;红色填充第4个圆&#xff1a;半径 50&#xff0c;蓝色…

摩科智能协办“提高不动产登记质量,促进优化营商环境培训会”

为深入落实国家和自治区自然资源工作会议精神&#xff0c;加强不动产登记队伍作风常态化建设&#xff0c;提高不动产登记质量&#xff0c;促进优化营商环境&#xff0c;学习先进地区工作经验。2024年4月19日&#xff0c;“提高不动产登记质量 促进优化营商环境培训会”在浙江省…

在PostgreSQL中如何实现分区表以提高查询效率和管理大型表?

文章目录 解决方案1. 确定分区键2. 创建分区表3. 数据插入与查询4. 维护与管理 示例代码1. 创建父表和子表2. 插入数据3. 查询数据 总结 随着数据量的增长&#xff0c;单一的大型表可能会遇到性能瓶颈和管理难题。PostgreSQL的分区表功能允许我们将一个大型表分割成多个较小的、…

windows驱动开发-内存概述

“90%的程序问题都是由内存引起的&#xff0c;剩下的10%是使用内存引起的&#xff01;”这是一句非常经典的论证&#xff0c;实际上&#xff0c;在程序开发中&#xff0c;内存问题就是最大的问题&#xff0c;没有之一。 现代的计算机体系中&#xff0c;内存承载了太多的功能&a…

HttpServlet,ServletContext,Listener它仨的故事

1.HttpServlet。 听起来是不是感觉像是个上古词汇&#xff0c;是不是没有阅读下去的兴趣了&#xff1f;Tomcat知道吧&#xff0c;它就是一个servlet容器&#xff0c;当用户向服务器发送一个HTTP请求时&#xff0c;Servlet容器&#xff08;如Tomcat&#xff09;会根据其配置找到…

Vue项目实现懒加载——自用笔记

熟悉指令语法&#xff1a; <template><HomePanel title"人气推荐" sub-title"人气爆款 不容错过"><ul class"goods-list"><li v-for"item in hotList" :key"item.id"><RouterLink to"/&qu…

嵌入式Linux开发

(17 封私信 / 1 条消息) 嵌入式Linux应用 - 搜索结果 - 知乎 (zhihu.com)

【面试】输出设备-①-Tableau入门

感谢大佬 举个栗子&#xff01;Tableau 技巧&#xff08;266&#xff09;&#xff1a;学做双向圆角条形图-CSDN博客 感谢W3Cschool Tableau 概述_w3cschool 感谢Tableau 官方社区 Discover | Tableau Public 1.目标和计划 近期公司需要进行数据大屏的制作&#xff0c;调研了一下…

【大语言模型LLM】-大语言模型乐园,高效办公不迷路!

&#x1f525;博客主页&#xff1a;西瓜WiFi &#x1f3a5;系列专栏&#xff1a;《大语言模型》 ❤️感谢大家点赞&#x1f44d; 收藏⭐ 评论⭐ &#x1f3a5;大语言模型LLM基础-系列文章&#xff1a; 【大语言模型LLM】-大语言模型如何编写Prompt? 【大语言模型LLM】-如何…

Pytorch第一部分数据模块

数据划分&#xff1a; 从数据集中将数据划分为训练集&#xff0c;测试集&#xff0c;验证集 # -*- coding: utf-8 -*- """ # file name : 1_split_dataset.py # author : tingsongyu # date : 2019-09-07 10:08:00 # brief : 将数据集划分为训…