我的第一个JavaWeb项目

从零开始搭建第一个 JavaWeb 项目 访问Oracle官网(https://www.oracle.com/java/technologies/downloads/),根据自己的操作系统选择合适的JDK版本进行下载。Servlet 是 JavaWeb 的核心组件,运行在服务器端,用于处理客户端的 HTTP 请求并生成响应。在开始搭建JavaWeb项目之前,我们需要准备好相应的开发环境,这是项目顺利进行的基础。JDK(Java Development Kit)是Java开发的核心工具包,包含了Java编译器、运行时环境等必备组件。 阅读详情

总纲:项目开发逻辑

1.项目流程

确定需求->代码编码(数据库创建,创建项目-(包结构,工具类,工具包,逻辑代码编写))->测试阶段->上线

2. 包的主要结构

bean                        存放实体类

dao                          接口包
    dao.impl               接口的实现类包,存放操作数据库的方法

service                     接口包
    service.impl         接口的实现类包,存放业务逻辑代码

web/servlet              定义servlet处理类
util                           自定义的工具包

3.包结构的调取关系 

servlet 调取service ,service 调取dao, dao操作bean

4.包的填充 

填充顺序:bean,  dao, impl,  service,   service.impl,  servlet

(1) bean(实体类包):用来和数据库表做对应关系的

代码编写规范:类名=表名,列名=属性名

属性的类型建议使用包装类

(2)dao包:用来定义操作数据库的方法

命名规范:bean实体类+Dao

(3)dao.impl包:定义dao的实现类

命名规范:接口名+Impl

(4)service包:用来定义业务逻辑的方法

命名规范:bean实体类+Service

(5)service.impl包:定义service的实现类

命名规范:接口名+Impl

(6)web/servlet包:定义处理请求的servlet

命名规范版本1:功能名+Servlet,示例:InsertUsersServlet,DeleteUsersServlet

ps:数据库中的一条数据==java中的一个对象

service接口层的代码在javaweb开发期间,和dao层的接口是一样的

将项目中所用到的jar包放到tomcat的lib文件夹下

新建的项目,记得把项目路径改成/

5.准备工作:创建数据表,导入jar包,实体类,工具类,配置好连接数据库的属性文件

数据表

导入jar包

连接数据库的属性文件 

url=jdbc:mysql://localhost:3306/mydemo1?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
uname=root
upass=1380341
driverClass=com.mysql.cj.jdbc.Driver

 实体类

 最初的实体类,后续还有很多更改

package bean;

public class Users {
    //属性
    private Integer userid;
    private String username;
    private Integer age;
    private String sex;
    private String password;

    //无参
    public Users() {

    }

    //全参
    public Users(Integer userid, String username, Integer age, String sex, String password) {
        this.userid = userid;
        this.username = username;
        this.age = age;
        this.sex = sex;
        this.password = password;
    }

    //重写toString(),get(),set()方法

    @Override
    public String toString() {
        return "Users{" +
                "userid=" + userid +
                ", username='" + username + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public Integer getUserid() {
        return userid;
    }

    public void setUserid(Integer userid) {
        this.userid = userid;
    }

    public String getUsername() {
        return username;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getPassword() {
        return password;
    }

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

工具类 DBUtilsPlus

package util;

import com.alibaba.druid.pool.DruidDataSource;

import java.sql.*;
import java.util.List;
import java.util.ResourceBundle;

// BaseDao   将链接数据库的步骤进行封装,简化后续JDBC操作
public class DBUtilsPlus {


      // 德鲁伊 数据库连接池
    private static DruidDataSource dataSource;
    //1.定义常用的工具类(Protected修饰的属性或方法可以在子类中被调用)
    protected  Connection connection;
    protected PreparedStatement pps;
    protected ResultSet resultSet;

    static {
        dataSource=new DruidDataSource();
        ResourceBundle db = ResourceBundle.getBundle("jdbc");
        dataSource.setUrl(db.getString("url"));
        dataSource.setDriverClassName(db.getString("driverclass"));
        dataSource.setUsername(db.getString("uname"));
        dataSource.setPassword(db.getString("upass"));
        //设置链接数量
       // dataSource.setInitialSize(30);
        dataSource.setMaxActive(8);
    }

    //3.得到链接对象
    protected  Connection getConnection(){
        try {
            connection = dataSource.getConnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return connection;
    }
  //4.创建通道
    protected  PreparedStatement getPps(String sql){
        getConnection();
        try {
            pps = connection.prepareStatement(sql);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return pps;
    }

    //5.绑定占位符的值  insert into A(sid,sname,sex,age .... ) values(?,?,?,?)
    //List 参数存储的是给占位符所赋的值
    //setParameter(new ArrayList())
    public  void setParameter(List list){
        try {
            if (list != null&&list.size()>0) { //对List集合进行有效性验证
                for (int i=0;i<list.size();i++) {
                    pps.setObject(i+1,list.get(i));
                }
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    //6.执行sql-增删改
    protected  int updateDB(String sql,List list){
        int i = 0;
        try {
            getPps(sql);//sql
            setParameter(list);//list-绑定的是占位符的参数
            i = pps.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return i;
    }

    //7.执行sql-查询
    protected  ResultSet selectDB(String sql,List list){

        try {
            getPps(sql);//sql
            setParameter(list);//list-绑定的是占位符的参数
            resultSet=pps.executeQuery();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return resultSet;
    }

    //8.关闭资源
    public void closeAll(){
        try {
            if (resultSet != null) {
                resultSet.close();
            }

            if (pps != null) {
                pps.close();
            }

            if (connection != null) {
                connection.close();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}

6.编程思路

写完实体类后Users之后 

(1)根据逻辑,dao操作bean,我们想到接下来是在dao包定义Users类的UsersDao接口类

(2)定义了UsersDao接口类,我们又需要UsersDaoImpl实现类。

(3)根据逻辑,service调取dao,我们创建UsersService接口类。

(4)同理,定义了UsersService接口类,我们又需要UsersServiceImpl实现类。

(5)根据逻辑servlet 调取service,我们每一个功能,都需要创建一个servlet类 

比如登录功能,我们就需要一个LoginServlet类,由他开始调取 UsersService,再由UsersService调取UsersDao,UsersDao来操作Users

模块一:登录退出功能的实现

实现流程图

1.登录功能代码实现

 思路:页面请求—>servlet处理类调取service ,service 调取dao, dao操作bean

 编程思路:1.根据请求创建页面实例

1.首先有了请求,我们先将index.jsp动态页面,建成一个登陆界面 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
     <h1>登录</h1>
     <form action="/login" method="post">
       用户名:<input type="text" name="username"><br>
       密码:<input type="password" name="userpass"><br>
         <input type="submit" value="登录">

     </form>
  </body>
</html>

2创建LoginServlet处理类

2.有了请求之后根据调取逻辑,首先是servlet调取service,所以要创建LoginServlet处理类,继承HttpServlet 类重写service方法。

这里先加入了接收参数部分 

package web;

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

public class LoginServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接参数
        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("username");//要和表单的name值相同
        String userpass =req.getParameter("userpass");
        //写逻辑
        //返结果



        return null;  
        
    }
}

3.配置web.xml文件

有了servlet之后,我们需要同时在web.xml文件中配置servlet 

<servlet>
          <servlet-name>loginuser</servlet-name>
          <servlet-class>
              web.LoginServlet
          </servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>loginuser</servlet-name>
          <url-pattern>/login</url-pattern>
      </servlet-mapping>

登录是我们的第一个功能,我们先按照根据调用逻辑开始写一个登录的方法

 servlet 调取service ,service 调取dao, dao操作bean

4.UsersService与UsersDao的Login方法

UsersService的Login方法 

public Users Login(String username,String pass);

UsersDao的Login方法

public Users Login(String username,String pass);

这两个Login方法一模一样,

但 UsersDao接口是用来定义操作数据库的方法的

而UsersService接口是用来定义业务逻辑方法的

二者有本质区别,具体表现在他们各自的实现类上。

UsersService的实现类UsersServiceImpl,就是返回一个调取UsersDao的login方法的方法

service 调取dao

5.UsersServiceImpl实现业务调用逻辑

package service.impl;

import bean.Users;
import dao.UsersDao;
import dao.impl.UsersDaoImpl;
import service.UsersService;

public class UsersServiceImpl implements UsersService {
    UsersDao usersDao=new UsersDaoImpl();
    @Override
    public Users Login(String username, String pass) {
        return usersDao.Login(username,pass);
    }
}

而 UsersDao的实现类UsersDaoImpl则需要实现具体的方法

要实现登录方法,我们就需要查询数据库的username,password数据,找的用户名密码相匹配的数据,因此需要用到DBUtilsPlus中的selectDB(sql,params)这个方法。

编程思路:首先继承工具类 DBUtilsPlus,因为我们需要使用它的selectDB(sql,params)方法操作数据库,而selectDB(sql,params);方法有两个参数,分别是sql与params,而我们的代码就是 要想办法获取这两个参数。

6. UsersDaoImpl实现操作数据库的逻辑

@Override
    public Users Login(String username, String pass) {
        Users u1 = null;
        try {
            String sql="select * from users where username=? and password=?";
            List params=new ArrayList();
            params.add(username);
            params.add(pass);
            resultSet=selectDB(sql,params);
            //将结果集的内容拿到java对象中(当结果集有数据时,就会进入得到循环中,每一次循环都会拿到数据库的中一行数据)
            while(resultSet.next()){
                u1=new Users();
                u1.setUserid(resultSet.getInt("userid"));
                u1.setAge(resultSet.getInt("age"));
                u1.setPassword(resultSet.getString("password"));
                u1.setSex(resultSet.getString("sex"));
                u1.setUsername(resultSet.getString("username"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeAll();
        }
        return u1;
    }

 现在操作逻辑,业务逻辑都有了,我们可以补齐LoginServlet代码了,LoginServlet接收用户名密码参数后,首先调用LoginService逻辑,最后返回结果成功or失败给页面。

7.完善LoginOutServlet代码

package web;

import bean.Users;
import service.UsersService;
import service.impl.UsersServiceImpl;

import javax.servlet.ServletException;
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;


public class LoginServlet extends HttpServlet {
    //重写方法时 二选一
    //1重写Service()
    //2重写doget()与dopost()方法
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.接参数
        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("username");//要和表单的name值相同
        String userpass =req.getParameter("userpass");
        //写逻辑:面向接口编程
        UsersService usersService=new UsersServiceImpl();
        Users u = usersService.Login(username, userpass);
        //3.返结果
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        if (u==null){
            //登录失败(在后端给前端返回一个弹窗-若用js,就不要再用重定向或转发跳页面了否则405错误)
            //location.href是属于重定向跳转页面
            writer.print("<script type='text/javascript'>alert('用户名或密码不正确');location.href='index.jsp'</script>");

        }else {
            //登录成功
            HttpSession session = req.getSession();
            session.setAttribute("u1",u);
            writer.print("<script type='text/javascript'>alert('登录成功');location.href='success.jsp'</script>");
        }
    
    }
}

8.返回结果页面 

如果登录成功,我们又需要一个成功页面

<%@ page import="bean.Users" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    Users u1 =(Users) session.getAttribute("u1");
%>
<h1>
    success.jsp,<%=u1.getUsername()%>欢迎您:
</h1>
</body>
</html>

做完成功页面,我们的第一个功能,登录功能就完成了

2.测试登录功能

使用maven之后,在这里运行Tomcat

程序启动之后在控制台点击链接,可以直接跳转页面 

养成没实现一个功能就测试一次的习惯 

输入正确的用户明密码

错误的用户名密码 

然后回到页面 

3.项目踩坑 

第一个坑:maven不会导jar包。

解决方案

删除掉之前lib的设置,打开https://mvnrepository.com/网站,按照jar包关键字,搜索jar包,再将其坐标发送到pom.xml文件中。

详细经过

点击复制,再打开 pom.xml文件

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.27</version>
    </dependency>


<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.8</version>
    </dependency>

    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-impl</artifactId>
      <version>1.2.5</version>
      <scope>runtime</scope>
    </dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl -->
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

第二个坑:sevlet版本过低,这里自带的2.3

解决方案

首先修改pom文件

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>

然后在web.xml文件中修改新的头文件

<?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_4_0.xsd"
         version="4.0">

第三个坑,找不到jdbc,其中三处错误

错误一:属性文件名叫db.properties,而工具类的 文件名却是jdbc

解决方案:修改静态代码块,与错误三一起修改

错误二:属性文件需要在resources包下,而不是直接在项目包下

解决方案:在mian/java包下新建一个resources包,把db.properties复制过去

错误三:driverClass没有生效,原因是jdbc工具类中,driverclass没有按照小驼峰规范,用了小写

解决方案:修改静态代码块

static {
        dataSource=new DruidDataSource();
        ResourceBundle db = ResourceBundle.getBundle("db");
        dataSource.setUrl(db.getString("url"));
        dataSource.setDriverClassName(db.getString("driverClass"));
        dataSource.setUsername(db.getString("uname"));
        dataSource.setPassword(db.getString("upass"));
        //设置链接数量
       // dataSource.setInitialSize(30);
        dataSource.setMaxActive(8);
    }

ps:新的项目需要改tomcat路径

完成第一个功能,接着完成第二个功能,退出

 思路:页面请求—>servlet处理类调取service ,service 调取dao, dao操作bean

 跟登录功能的思路大体相同。

 4.退出功能代码实现

 编程思路:1.有了退出请求,我们先将success.jsp动态页面,建成一个退出的按钮

<a href="/loginout">退出</a>

我

第一个javaweb项目——图书管理系统 javaweb图书管理系统,idea开发,到,service,servlet三层架构。实现借书还书,查询修改等功能 阅读详情

相关推荐

阿里云轻量应用服务器从购买到配置环境以及部署javaweb项目过程

阿里云轻量应用服务器配置过程 文章目录阿里云轻量应用服务器配置过程前言购买域名购买阿里云轻量应用服务器域名备案和解析开通阿里云的防火墙端口部署服务器下载安装好Xshell和Xftp(有资源)配置服务器开发环境所需要的jar包:安装JDK安装Tomcat如何能够通过访问域名来访问我们的项目省略输入端口号的步骤省略输入项目名称的步骤安装MySQL部署自己的第一个javaweb项目到服务器结尾留言 前言 大家新年好呀,我是一名大二的学生,最近也是刚做完自己的第一个网站,在部署阿里云轻量应用服务器的时候遇到了很多问

weixin_46199427的博客 3472

通过IDEA创建运行第一个Servlet项目

通过IDEA创建运行第一个Servlet项目 IDEA版本为2020.2 1. 创建第一个Servlet项目 创建java项目 给项目起名 java项目创建完成, 下图为目录结构 添加框架支持, 是项目成为Servlet项目 在web/WEB-INF下创建classes和lib目录 将上述两个目录配置到项目中, 并添加Servlet所需的JAR包 配置完成后, 项目的目录结构如下 从你的Tomcat安装目录下找到servlet-api-jar并添加

借用一下服务器 2264

IntelliJ Idea 创建第一个 Servlet 项目

  本文主要根据Intellij Idea 创建Web项目并部署servlet,JavaWeb开发 - 使用IDEA创建Servlet程序两篇文章。   一开始入手 JavaWeb、Tomcat 还是有一点点迷茫的,因为自己还没有太多的接触过有关的网络编程,不过学习编程早已习惯了一开始的无从下手,不用怕,找路就是了。本文记录的是使用 IntelliJ Idea 2017.3.2编写第一个 Ja...

丿丶风花灬逐月 1389

JavaWeb开发环境配置

JavaWeb开发环境配置 主要处理一些细节问题 通篇通俗易懂 方便上手

CXQD_的博客 677

JavaWeb--02.项目搭建

JavaWeb编程–02 目录JavaWeb编程--02前言项目搭建创建第一个JavaWeb项目(IDEA)(1).下载Tomcat①修改端口号②关闭占用端口号的软件(2).创建Web项目方式一方式二(3).在IDEA中配置Tomcat(4).新建初始化页面(5).运行项目 前言 21世纪,走进了信息时代,各种各样的软件层出不穷,但是总离不开程序开发,离不开程序开发语言,Java语言作为人们所熟知的一门语言,对于其有必要进行系统的学习。 项目搭建 创建第一个JavaWeb项目(IDEA) (1).下载

qq_46531387的博客 434

javaweb(一):jsp环境搭建及入门

一.准备知识 1. jsp:动态网页 动态与静态的区分不要和是否有‘动感’混为一谈,关键是看是否随着时间地点用户操作的改变而改变。动态网页需要使用到服务端脚本语言(JSP)。 jsp其实就是在html中嵌套的java代码 // A code block <html> <hean> <title> my jsp project</title&...

qq_36869436的博客 1306

JavaWeb开发之如何创建一个web项目

首先,打开Myeclipse,看到左上角File—&gt;New—&gt;Web Project 出现如下界面: 在Project Name处输入项目的名字:Myfirstdemo 这样就建成了第一个web项目,我们来观察一下项目的目录结构: **src:**存放Java源代码的目录。 **Libraries:**存放的是Tomcat及JRE中的jar包。 **WebRoot:**存放的是需...

qq_42252333的博客 1487

JavaWeb快速入门(一)——新建JavaWeb项目

今天是暑期实训的第三天,上午继续昨天未讲完的任务java,比如:java的异常处理、java的集合等其它java常用知识,具体讲解链接如下。下午开始将JavaWeb服务器端程序开发,包含:处理请求和展示返回回来的数据。其中,处理请求分为四步:1、创建javaweb工程,2、开启服务器,3、编写处理请求的代码,4、运行。(一)创建javaweb工程 在创建之前,电脑需要有myeclip...

IT女孩儿的日常的博客 14万+

安装idea社区版并开发JavaWeb项目

众所周知,idea是一个很强悍的javaIDE,但是社区版只能开发java项目而不能开发web项目。作为学生,在学习时,做深度开发的需求较少,因此想着如何能够在社区版开发web项目。 本次教程由三部分组成,分别是基础知识,idea社区版的安装,配置开发JavaWeb项目。

xiaoxibiande的博客 1万+

2020年最新的javaweb项目分享, 毕设选题分享

最近收集了一些不错的javaweb项目, 放在了github上, 但是由于众所周知的原因, github访问太慢了,我就把这些项目迁移到了国内的gitee上 希望能够帮助大家 基于Java+SSM的网上订餐系统 基于Java+SSM的健身房俱乐部管理系统 基于Java+SSH的在线教学交流平台 基于Java+SSM的超市进销存管理系统 基于Java+JSP+Servlet的学生成绩管理系统 基于Java+JSP+Mysql+Servlet的学生宿舍管理系统 基于Java+SSM的毕业设计管理系统 基于Jav

m0_48342140的博客 1万+

【IntelliJ IDEA2021】 JavaWeb项目结构(IDEA2021 配置Tomcat,创建Javaweb项目,IDEA自动部署Tomcat的原理,手动部署IDEA中写好的JavaWeb)

【IntelliJ IDEA2021】IDEA2021中JavaWeb项目结构(IDEA2021 配置Tomcat,创建Javaweb项目,IDEA自动部署Tomcat的原理,手动部署IDEA中写好的JavaWeb,之前用的包突然就找不到的解决方法,Tomcat中 css/js/jsp修改后没有效果)

weixin_45691686的博客 5101

宝塔Linux部署JavaWeb项目两种方式,图文并茂

宝塔部署javaweb项目完整篇,给想要使用宝塔部署java web项目的人一些参考,觉得不错的可以在下方留言点赞哦,有错误的地方也请大家帮忙指出,发消息给我吧,我好修改。 1、进入宝塔Linux面板宝塔linux面板,一键安装LAMP/LNMP/SSL/Tomcat (bt.cn) 2、安装宝塔面板然后:因为我们用的java,这里的环境不适合,选择仅宝塔面板 3、登陆面板 看到这样的界面就算安装成功了,先去你服务器那里开放8888端口不然访问不了,然后复制地址到浏览器打开 我...

bakelFF的博客 1万+

idea2023-快速搭建一个本地tomcat的javaWeb项目(从0到1保姆教学)

idea创建javaweb项目,配置tomcat

weixin_52937170的博客 2741

Servlet | Servlet简单入门——构建第一个Servlet项目

构建第一个Servlet项目

Alita233_的博客 2002

深入解析DisplayPort(DP)接口:从主链路到辅助通道的全方位技术剖析

本文深入解析DisplayPort(DP)接口的核心技术架构,重点剖析了其三大功能模块:承载视频/音频数据洪流的Main-Link主链路、负责链路训练与设备控制的AUX CH辅助通道,以及实现智能交互的HPD热插拔检测。文章详细阐述了主链路的可伸缩Lane配置、嵌入式时钟与数据成帧机制,以及辅助通道在设备发现、动态优化信号质量(链路训练)中的关键作用,揭示了DP接口实现高效率与灵活性的设计哲学。

weixin_29267307的博客 489

基于Active-HDL的HDL设计录入与仿真

作者:毛茏玮 / Saint 掘金:https://juejin.im/user/5aa1f89b6fb9a028bb18966a 微博:https://weibo.com/5458277467/profile?topnav=1&amp;wvr=6&amp;is_all=1 GitHub:github.com/saint-000 优快云: https://me.youkuaiyun.com/qq_4053...

一个会写代码的烤鸭 7782

告别regsvr32!易语言调用大漠插件dm.dll的免注册实战(附Win7/10/11避坑指南)

本文详细介绍了易语言如何免注册调用大漠插件dm.dll的实战方法,通过`dmreg.dll`实现真正的免注册调用,规避了传统`regsvr32`注册方式带来的权限和兼容性问题。文章包含核心原理剖析、易语言实现细节、多系统兼容性方案及高级应用场景,帮助开发者实现绿色化部署,提升自动化脚本开发效率。

weixin_42553471的博客 303

OCR开发车架号识别vin码识别系统

一、vin码识别车架号识别系统简介   vin码识别车架号识别系统,结合VIN码主机厂数据库及自身多年文字识别经验,针对机动车配置参数等信息的查询及采集业务推出的一款VIN码自动识别产品。   车架号识别vin码识别,主要应用在智能手机IOS与Android两个平台中。前端扫描查询模式,无需联网,只需扫描汽车前挡风玻璃右下角的VIN玛(车架号),即可轻松识别出车辆产地、品牌、车

OCR13512721355的博客 1433

手把手教你学基带SOC芯片(4.2)--基带soc芯片的存储器设计

基带 SoC 中的存储器设计需要综合考虑功耗、成本和性能等因素。SRAM 适合高速缓存,DRAM 适合主内存,Flash 存储器适合非易失性存储。通过优化存储单元设计、阵列布局和外围电路,可以提高存储器的性能和效率。

MHD0815的博客 350

Vue3 - 完美解决html2canvas截图不全问题,截图只截取当前可视区域导出图片不全,截屏导出的图片显示不全只有一部分或缺一块,vue3移动端H5网页项目使用html2canvas插件长截图!

vue3,html2canvas,移动端H5网页,截图不全,html2canvas长截图不全,保存长截图,页面滚动导致截图不全,网页下方截屏不到怎么办,底部一部分无法截屏到,保存的图片少了一大块,H5海报截图不完整,怎么截取滚动条下方的内容,截图图时图片不全,截图图片只有一半的问题,底部内容空白,截图空白问题的解决,截图不全怎么办,html2canvas.js网页截图功能(解决截图不全问题,移动端ios系统截图不完整,html2canvas截图太长又不能删减截取不到,使用HTML2Canvas在H5页面上实

🏆 前端领域优质创作者 1万+

《UDS协议从入门到精通》系列——图解0x2E:通过ID写数据

图解数据包格式+直观的通信示例,迅速认识0x2E服务!!

车载系统攻城狮 3602

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 在HTML文件中引入其他文件的方式
下一篇: Spring框架之工厂模式
continueLR
博客等级 码龄6年 9粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值