javaweb项目实战之myBlog

项目简介

技术栈: Java + Mysql + Html +Ajax + Css + JS + Json

项目说明 :项目使用maven创建,使用MVC架构模式

  1. 表示层:通俗讲就是展现给用户的界面和控制器层Servlet,接受请求、封装数据、调用业务
    逻辑层,响应数据。
  2. 业务逻辑层:针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
  3. 数据访问层(持久层):该层所做事务直接操作数据库,针对数据的新增、删除、修改、查
    找等每层之间是一种垂直的关系。
    最后分出的项目包主体应该有(目前阶段):
  4. utils:工具类
  5. dao:持久层(关于sql相关的操作)
  6. entity:实体类(数据库映射的JavaBean)
  7. service:业务层(用于处理具体业务)
  8. servlet/controller:控制器层(用于整合业务层与持久层)
    mvc项目流程图1 mvc架构模式流程

项目展示(部分)

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

项目架构
在这里插入图片描述
图2 项目架构

数据库—说明 :我的数据库版本是8.0.31
服务器—说明:我的tomcat是9.0.54

源码

myBlog
链接:https://pan.baidu.com/s/10oNwMx20WgPhzfUgKkoIjg?pwd=843m
提取码:843m

项目步骤

创建一个新的数据库 myBlogDB

建立表:

  1. 用户表:userTb
  2. 文章表:contextTb
    sql脚本
create database myBlogdb character set utf8;
use myBlogdb;
create table userTb (
id int primary key auto_increment,
username varchar(20),
password varchar(20)
)charset=utf8;
insert into userTb(username,password) values('雾潋','123');
insert into userTb(username,password) values('张三','123');
create table contextTb (
id int primary key auto_increment,
title varchar(30),
createTime varchar(30),
context varchar(2000),
userId int
)charset=utf8;

数据库驱动配置

druid.properties文件

# 数据库连接信息 myblogdb是数据库名,别连错数据库
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/myblogdb?characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
#用户名
username=root
#密码,自己的密码
password=root

# 连接池属性设置
# 连接池的初始化连接数(创建数据库连接池默认初始化的连接对象个数)
initialSize=10
# 连接池的最大连接数
maxActive=50
# 最小空闲连接数(当数据库使用率很低时,连接池中的连接会被释放一部分)
minIdle=5
# 超时等待时间(单位:ms)
maxWait=3000

项目依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.wulian</groupId>
  <artifactId>myBlog</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.31</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.10</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.83</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>myBlog</finalName>
  </build>
</project>

entity实体类

User类

package entity;

/**
 * usertb对应实体类
 * 1. 属性 - 数据表对应
 * 2. 构造方法(有参构造看需求)
 * 3. Get and Set方法
 * 4. toString
 */
public class User {
    private Integer id;
    private String username;
    private String password;

    public User() {
    }

    public User(Integer id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

Context类

package entity;
//博客实体类
public class Context {
    private Integer id;
    private String title;
    private String createTime;
    private String context;
    private Integer userId;

    public Context() {
    }

    public Context(Integer id, String title, String createTime, String context, Integer userId) {
        this.id = id;
        this.title = title;
        this.createTime = createTime;
        this.context = context;
        this.userId = userId;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getCreateTime() {
        return createTime;
    }

    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }

    public String getContext() {
        return context;
    }

    public void setContext(String context) {
        this.context = context;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    @Override
    public String toString() {
        return "Context{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", createTime='" + createTime + '\'' +
                ", context='" + context + '\'' +
                ", userId=" + userId +
                '}';
    }
}

utils层

工具层 主要是提供一些工具比如数据库连接

数据库工具:

本次数据库采用druid连接
Druid数据库连接池工具类

package utils;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * Druid数据库连接池工具类
 */
public class DruidUtils {
    //1. 定义DruidDateSource对象:表示Druid数据量连接池(数据源)
    private static DruidDataSource druidDataSource;

    //2. 定义静态代码块初始化DruidDateSource对象
    static{
        try {
            //读取druid.propertis配置文件中的内容
            // 此位置加上getClassLoader()类加载器的原因,在于我么你现在读取的配置文件在resource这个目录中
            InputStream is = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            Properties properties = new Properties();
            properties.load(is);
            //使用属性文件初始化DruidDateSource对象
            druidDataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //3. 创建静态方法,从连接池中获取连接对象
    public static Connection getConnection(){
        Connection connection = null;
        try {
            connection = druidDataSource.getConnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return connection;
    }

    /**
     * 关闭连接
     * 多态的应用:使用Statement接口做从参数,既可以传递Statement接口对象,也可以传递
     * PreparedStatement接口对象
     */
    public static void close(Statement statement, Connection connection){
        close(null,statement,connection);
    }

    /**
     * 重载的方式如果存在ResultSet那么我们调用以下方法进行关闭,
     * 如果没有调用上面的关闭方法
     * 具体关闭方法
     */
    public static void close(ResultSet resultSet, Statement statement, Connection connection){
        try {
            if(resultSet != null && !resultSet.isClosed()){
                resultSet.close();
            }
            if(statement != null && !statement.isClosed()){
                statement.close();
            }
            if(connection != null && !connection.isClosed()){
                connection.close();
            }
        } catch (Exception throwables) {
            throwables.printStackTrace();
            System.out.println("-----关闭连接数据库失败!");
        }
    }
}

R层

R层通过此类型给前端发送JSON数据格式,此类型中的属性包含对应的状态码、消息、数据

package utils;
//通过此类型给前端发送JSON数据格式
//此类型中的属性包含对应的状态码、消息、数据
public class R<T> {
    private int code;//状态码
    private String message;//前端收到的消息
    private T data;//前端请求的数据

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    /**
     * 服务器成功返回用户请求的数据
     * @param data 数据
     * @return 具体JSON携带的数据
     */
    public static R ok(Object data){
        R r = new R();
        r.setCode(200);
        r.setMessage("ok");
        r.setData(data);
        return r;
    }

    /**
     * 服务器成功返回用户请求的数据
     * @param message 消息
     * @return 具体返回的JSON数据
     */
    public static R ok(String message){
        R r = new R();
        r.setCode(200);
        r.setMessage(message);
        return r;
    }

    /**
     * 服务器返回错误消息方法
     * @param message 错误消息
     * @return 具体返回的JSON数据
     */
    public static R error(String message){
        R r = new R();
        r.setCode(400);
        r.setMessage(message);
        return r;
    }
}

dao层

主要是和数据库大打交道

userDao

package dao;

import entity.User;
import utils.DruidUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * usertb表相关的持久层操作
 */
public class UserDao {

    //添加用户方法
    public int addUser(User user){
        //与数据库进行连接
        Connection connection = DruidUtils.getConnection();
        int i = 0;//返回值小于零说明加入失败,反之则成功
        try {
            //编写sql语句
            String sql = "insert into usertb(username,password) values(?,?)";
            //预执行
            PreparedStatement ps = connection.prepareStatement(sql);
            ps.setString(1,user.getUsername());
            ps.setString(2,user.getPassword());
            //执行更新user表
            i = ps.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return i;
    }

    //根据用户名查询数据方法
    public User select(String username){
        try {
            //连接数据库
            Connection connection = DruidUtils.getConnection();
            //编写sql语句
            String sql = "select id,username,password from usertb where username=?";
            //预执行
            PreparedStatement ps = connection.prepareStatement(sql);
            ps.setString(1,username);
            ResultSet rs = ps.executeQuery();
            while(rs.next()){
                User user = new User();
                user.setId(rs.getInt(1));
                user.setUsername(rs.getString(2));
                user.setPassword(rs.getString(3));
                //将读取出的用户数据变成user对象进行返回
                return user;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    //根据用户名、密码来查找用户数据
    public User select(String username,String password){
        try {
            //链接数据库
           Connection connection = DruidUtils.getConnection();
           //编写sql语句
            String sql = "select id,username from usertb where username=? and password=?";
            //预执行
            PreparedStatement ps = connection.prepareStatement(sql);
            //sql注入
            ps.setString(1,username);
            ps.setString(2,password);
            ResultSet rs = ps.executeQuery();
            while(rs.next()){
                User user = new User();
                user.setId(rs.getInt(1));
                user.setUsername(rs.getString(2));
                //将读取出的用户数据变成user对象进行返回
                return user;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }
}

contextDao

package dao;

import entity.Context;
import utils.DruidUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ContextDao {

    //获取当前用户的全部文章
    public List<Context> select(Integer userId){
        Connection connection = DruidUtils.getConnection();
        //返回的List集合,包含当前用户的全部文章
        ArrayList<Context> contexts = new ArrayList<Context>();
        try {
            String sql = "select id,title,createTime,context from contexttb where userId=?";
            PreparedStatement ps = connection.prepareStatement(sql);
            ps.setInt(1,userId);
            ResultSet rs = ps.executeQuery();
            while(rs.next()){
                //每读出一篇文章就需要存入到Context实体类对象中
                Context context = new Context();
                context.setId(rs.getInt(1));
                context.setTitle(rs.getString(2));
                context.setCreateTime(rs.getString(3));
                context.setContext(rs.getString(4));
                //每一篇文章都是一个context对象,把所有的文章放入到List集合中
                contexts.add(context);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return contexts;
    }

    //根据文章id获取文章详情
    public Context selectContext(Integer id){
        Connection connection = DruidUtils.getConnection();
        try {
            String sql = "select title,createTime,context from contexttb where id=?";
            PreparedStatement ps = connection.prepareStatement(sql);
            ps.setInt(1,id);
            ResultSet rs = ps.executeQuery();
            while(rs.next()){
                //每读出一篇文章就需要存入到Context实体类对象中
                Context context = new Context();
                context.setTitle(rs.getString(1));
                context.setCreateTime(rs.getString(2));
                context.setContext(rs.getString(3));
                return context;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }
}

service层

service主要是处理具体的事务

userService

package service;

import dao.UserDao;
import entity.User;

//user相关的业务层
public class UserService {
    //用户注册方法
    public boolean register(String username,String password){
        User user = new User(username,password);
        //默认返回为true注册成功
        boolean flag = true;
        //调用Userdao层
        UserDao userDao = new UserDao();
        // 调用查询方法来查询用户名是否存在
        User u = userDao.select(username);
        //判断u类型是否为空,如果为空表示可以注册否则用户名重复
        if(u == null){
            //不存在注册
            userDao.addUser(user);
            return flag;
        }else{
            //表示用户已经注册过
            flag = false;
            return flag;
        }
    }

    //用户登录方法
    public User login(String username,String password){
        //调用持久层
        UserDao userDao = new UserDao();
        User user = userDao.select(username,password);
        if(user != null){
            return user;
        }
        return null;
    }
}

contextService

package service;

import dao.ContextDao;
import entity.Context;
import entity.User;

import java.util.List;

public class ContextService {
    //获取当前用户全部文章
    public List<Context> selectAll(User user){
        List<Context> contexts;
        //判断session中是否有数据(是否有用户登录)
        if(user != null){
            //从session中取出登录的用户id
            Integer userId = user.getId();
            //调用Dao层
            ContextDao contextDao = new ContextDao();
            //取出用户文章数据
            contexts = contextDao.select(userId);
            return contexts;
        }
        return null;
    }

    //根据文章id获取具体文章详情
    public Context selectDetail(User user,Integer id){
        //判断Session中是否有数据(用户是否登录)
        if(user != null){
            //调用dao层
            ContextDao contextDao = new ContextDao();
            Context detail = contextDao.selectContext(id);
            return detail;
        }
        return null;
    }
}

servlet(控制层)

主要对前端传来的数据做出反应,控制层的逻辑就是通过Session获取登录的用户信息。

注册

package servlet;

import com.alibaba.fastjson.JSON;
import service.UserService;
import utils.R;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/reg")
public class RegServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置字符集
        request.setCharacterEncoding("utf-8");
        // 获取用户参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //调用service层
        UserService service = new UserService();
        //调用注册方法
        boolean flag = service.register(username,password);
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        if(flag){
            //改成为传递JSON数据
            writer.print(JSON.toJSON(R.ok("注册成功!")));
        }else{
            //直接通过JSON数据输出对应内容
            writer.print(JSON.toJSON(R.error("用户名已存在!")));
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
}

登录

package servlet;

import com.alibaba.fastjson.JSON;
import entity.User;
import service.UserService;
import utils.R;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置字符集
        request.setCharacterEncoding("utf-8");
        //设置响应头和数据格式
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        // 获取用户参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        // 获取'记住我'选框的值
        String remember = request.getParameter("remember");
        //调用service层
        UserService service = new UserService();
        //调用登录方法
        User user = service.login(username,password);
        if(user != null){
            //判断用户是否勾选了记住我按钮
            if("1".equals(remember)){
                //勾选了,发送Cookie
                Cookie c1 = new Cookie("username",username);
                Cookie c2 = new Cookie("password",password);
                //设置Cookie存活时间
                c1.setMaxAge(60 * 60 * 24 * 7);
                c2.setMaxAge(60 * 60 * 24 * 7);
                //发送
                response.addCookie(c1);
                response.addCookie(c2);
            }
            //登录成功后通过Session保存用户信息
            HttpSession session = request.getSession();
            session.setAttribute("user",user);
            writer.print(JSON.toJSON(R.ok("登录成功!")));
        }else{
            writer.print(JSON.toJSON(R.error("账号或者密码错误!")));
        }

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
}

主页

package servlet;

import com.alibaba.fastjson.JSON;
import entity.User;
import service.UserService;
import utils.R;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/msg")
public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置字符集
        request.setCharacterEncoding("utf-8");
        //设置响应头和数据格式
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        //判断session中是否有用户数据
        //判断用户登录状态
        HttpSession session = request.getSession();
        User user = (User)session.getAttribute("user");
        if(user != null){
            String username = user.getUsername();
            writer.print(JSON.toJSON(R.ok(username)));
        }else{
            writer.print(JSON.toJSON(R.error("未登录")));
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
}

文章处理

package servlet;

import com.alibaba.fastjson.JSON;
import entity.Context;
import entity.User;
import service.ContextService;
import utils.R;

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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

@WebServlet("/context")
public class ContextServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置字符集
        request.setCharacterEncoding("utf-8");
        //设置响应头和数据格式
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        //判断session中是否有用户数据
        //判断用户登录状态
        HttpSession session = request.getSession();
        User user = (User)session.getAttribute("user");

        //调用service层
        ContextService contextService = new ContextService();
        List<Context> contexts = contextService.selectAll(user);

        //判断此用户是否有文章
        if(!contexts.isEmpty()){
            writer.print(JSON.toJSON(R.ok(contexts)));
        }else{
            writer.print(JSON.toJSON(R.error("此用户没有文章")));
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
}

细节处理

package servlet;

import com.alibaba.fastjson.JSON;
import entity.Context;
import entity.User;
import service.ContextService;
import utils.R;

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 javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

@WebServlet("/detail")
public class DetailServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取用户参数 文章id
        String str = request.getParameter("id");
        Integer id = Integer.parseInt(str);
        // 设置字符集
        request.setCharacterEncoding("utf-8");
        //设置响应头和数据格式
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        //判断session中是否有用户数据
        //判断用户登录状态
        HttpSession session = request.getSession();
        User user = (User)session.getAttribute("user");

        //调用service层
        ContextService contextService = new ContextService();
        Context detail = contextService.selectDetail(user,id);

        //判断此用户是否有文章
        if(detail != null){
            writer.print(JSON.toJSON(R.ok(detail)));
        }else{
            writer.print(JSON.toJSON(R.error("用户没有登录")));
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
}

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

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

相关文章

JavaScript实现计算100之间能被5整除的数的代码

以下为实现计算100之间能被5整除的数的程序代码和运行截图 目录 前言 一、计算100之间能被5整除的数 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xff1b; 2.本博文代码可以根据题…

平衡二叉树理论详解

文章目录 基本概念平衡二叉树插入结点LL&#xff08;左单旋&#xff09;RR&#xff08;右单旋&#xff09;LR&#xff08;左右旋&#xff09;RL&#xff08;右左旋&#xff09; 示例插入推导过程 基本概念 平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1&…

linux环境下设置python定时任务

linux环境下设置python定时任务 Linux 系统提供了使用者控制计划任务的命令 :crontab 命令 1、在linux环境执行命令,进入编辑界面 crontab -e2、按键盘 i 键&#xff0c;进入编辑模式&#xff0c;输入以下内容&#xff0c;设置2个定时任务 定时任务1&#xff1a;每隔10分钟执…

C语言爬取HTML-爬取壁纸 文末附源码

前言&#xff1a;这学期计算机软件课程设计的其中一个题目是使用C语言爬取HTML&#xff0c;本打算使用C语言的CSpidr库来实现&#xff0c;但是因为它的依赖liburi没有找到在哪里安装&#xff0c;所以放弃了这个想法&#xff0c;使用的是curl以及libxml2这两个库&#xff0c;能够…

GOOGLE|只有大模型才能理解你举的例子(In-context learning)是什么

一、概述 title&#xff1a;LARGER LANGUAGE MODELS DO IN-CONTEXT LEARNING DIFFERENTLY 论文地址&#xff1a;https://arxiv.org/abs/2303.03846 参考&#xff1a;https://www.xiaohongshu.com/user/profile/5f01057f0000000001003c91/640aa237000000001303d871 1.1 Moti…

springboot基于vue的地方美食分享网站

开发技术介绍 Java介绍 JavaScript是一种网络脚本语言&#xff0c;广泛运用于web应用开发&#xff0c;可以用来添加网页的格式动态效果&#xff0c;该语言不用进行预编译就直接运行&#xff0c;可以直接嵌入HTML语言中&#xff0c;写成js语言&#xff0c;便于结构的分离&…

Python文件上传 S3(AWS) 简单实现

1.AWS设置 建立aws账户&#xff0c;进入到S3界面 点击 "Create bucket" 一系列操作之后——这里给bucket命名为csfyp 2. Python部分 python需要先&#xff1a; pip install loguru pip install boto3 这两个包含一些连接python和s3 连接的api 然后直接上代码…

Redis学习---05

一、Redis集群搭建&#xff0c;Redis主从复制&#xff0c;读写分离 默认情况下每台redis服务器都是主节点。 (1) 主从复制&#xff1a;是指将一台redis服务器的数据&#xff0c;复制道其他redis服务。前者成为主节点&#xff0c;后者成为从节点。默认情况下每一台redis服务器…

puppeteer-不需重构,无痛加强vue单页面应用的SEO,提升百度收录排名

背景 最近产品觉得我们网站在百度收录上排名太靠后了&#xff0c;又不肯花钱&#xff0c;就让我们想办法提升网站的SEO。由于项目是用vue3写的&#xff0c;并且已经迭代多个版本了&#xff0c;用nuxt实在不适宜&#xff0c;当然俺的开发水平也不够&#xff0c;周期也会拉得很长…

【华为机试】——每日刷题经验分享

【华为机试】——每日刷题经验分享&#x1f60e; 前言&#x1f64c;题目&#xff1a;HJ9 提取不重复的整数 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神贯注的上吧&#xff01;&#xff01;&#xff01; &a…

LabVIEWCompactRIO 开发指南22 CVT客户端通信(CCC)

LabVIEWCompactRIO 开发指南22 CVT客户端通信&#xff08;CCC&#xff09; 如果使用第3章中讨论的CVT进行进程间通信&#xff0c;请考虑使用CCC。如果已经创建了CVT标签&#xff0c;并且想在网络上发布此数据&#xff0c;CCC不失为一个简单而优雅的解决方案。它基于TCP/IP&am…

Linux 指令3

文章目录 标题日期date时间戳 cal 日历find -name 查找which ls 搜指令whereisgrep 行文本过滤工具&#xff08;例如找到main函数入口&#xff09;用途例子 ps ajx 进程 打包压缩&#xff0c;解包解压&#xff08;过程是这么个过程&#xff0c;简化成压缩->解压&#xff09;…

Java进阶-面向对象进阶(多态包权限修饰符代码块)

1 多态 1.1 多态的形式 多态是继封装、继承之后&#xff0c;面向对象的第三大特性。 多态是出现在继承或者实现关系中的。 多态体现的格式&#xff1a; 父类类型 变量名 new 子类/实现类构造器(); 变量名.方法名();多态的前提&#xff1a;有继承关系&#xff0c;子类对象…

MySQL高级语句(三)

一、正则表达式&#xff08;REGEXP&#xff09; 1、正则表达式匹配符 字符解释举列^匹配文本的开始字符’ ^aa ’ 匹配以 aa 开头的字符串$匹配文本的结束字符’ aa$ ’ 匹配以aa结尾的字符串.匹配任何单个字符’ a.b 匹配任何a和b之间有一个字符的字符串*匹配零个或多个在它…

MHA高可用与故障切换

一、MHA的概述 1、 MHA的概念 MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故…

前端需要注意和了解的SEO

SEO的基本了解 1.什么是SEO? SEO&#xff08;Search Engine Optimization又叫做搜索引擎优化。是一种方式&#xff1a;利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名。 2. 前端怎么理解SEO? 对于SEO引擎&#xff0c;在前端需要的是做出来的网站&#xff0c;页面…

揭秘物联网平台设备管理核心!Java代码示例对比,一篇文章全知道!

《高并发系统实战派》-- 值得拥有 一、 设备管理模块的意义 设备管理模块是物联网平台的核心模块之一&#xff0c;主要负责设备的接入、注册、管理、监控等工作&#xff0c;是构建物联网平台的基础。通过设备管理模块&#xff0c;可以实现对设备的资源动态管理、设备状态实时…

服务(第二十一篇)mysql高级查询语句(二)

①视图表&#xff1a; 视图表是虚拟表&#xff0c;用来存储SQL语句的定义 如果视图表和原表的字段相同&#xff0c;是可以进行数据修改的&#xff1b; 如果两者的字段不通&#xff0c;不可以修改数据。 语法&#xff1a; 创建&#xff1a;create view 试图表名 as ... 查…

vue3项目搭建超详解

vue3安装与目录讲解 文章目录 vue3安装与目录讲解安装node.jsnpm绑定淘宝镜像安装vue脚手架创建vue项目目录解释推荐使用vscode 安装node.js http://nodejs.cn/download/ 根据自己电脑的位数自行下载。可安装到任意盘哈&#xff0c;因为我C盘比较大&#xff0c;我就直接在C盘了…

springboot项目如何优雅停机

文章目录 前言kill -9 pid的危害如何优雅的停机理论步骤优雅方式1、kill -15 pid 命令停机2、ApplicationContext close停机3、actuator shutdown 停机4、ApplicationListener 监听延时停机 前言 相信很多同学都会用Kill -9 PID来杀死进程&#xff0c;如果用在我们微服务项目里…