首页 > 编程语言 >搭建一个javaweb项目的准备流程

搭建一个javaweb项目的准备流程

时间:2024-07-14 20:08:45浏览次数:13  
标签:String did 流程 private new import 搭建 public javaweb

搭建一个javaweb项目的准备流程

以所学系统项目为例:

image-20240714142441952

1src\main\java\com\utils

1.1tools:

DruidTools.java

​ 需要在lib中加入druid-xx-xx.jar包

image-20240714143320461

代码展示

package com.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.util.Properties;



//连接池作用方便对数据库中的表进行增删改查
public class DruidUtil {
 //1.声明连接池对象
 private static DataSource ds;
 //2.Java的静态代码块,做初始化用
 static {
     try{
         //读取外部配置文件的内容,生成字节流输入流对象,需要创建properties文件保存文件基本信息
         InputStream is = DruidUtil.class.getClassLoader() .getResourceAsStream("mysql5.properties");
         //创建属性集合对象
         Properties prop = new Properties();
         //加载输入流对象
         prop.load(is);
         //生成连接池对象
         ds = DruidDataSourceFactory.createDataSource(prop);
         System.out.println(ds);
     } catch (Exception e) {
         e.printStackTrace();
     }

 }
 //3.获取连接池对象。

 public static DataSource getDs() {
     return ds;
 }
}

1.2entity包:Entity层,实体层,放入实体类(该项目包名为pojo)

@Builder // 一步步创建一个对象,它对用户屏蔽了里面构建的细节,但却可以精细地控制对象的构造过程,不写@Builder,@AllArgsConstructor会报红
@Data // 提供了get、set、equals、toString方法
@NoArgsConstructor // 生成一个无产构造函数
@AllArgsConstructor // 生成一个包含所有变量的有参构造函数

image-20240714144039898

以Dept类为例代码展示:(对属性进行定义,同时用get、set、toString方法进行初始化)alt+insert键可以快速生成

package com.pojo;

import java.security.PrivateKey;

public class Dept {
    private int did;
    private String dname;
    private String  dlocation;
    private String leader;
    @Override
    public String toString() {
        return "Dept{" +
                "did=" + did +
                ", dname='" + dname + '\'' +
                ", dlocation='" + dlocation + '\'' +
                ", leader='" + leader + '\'' +
                '}';
    }

    public int getDid() {
        return did;
    }

    public void setDid(int did) {
        this.did = did;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public String getDlocation() {
        return dlocation;
    }

    public void setDlocation(String dlocation) {
        this.dlocation = dlocation;
    }

    public String getLeader() {
        return leader;
    }

    public void setLeader(String leader) {
        this.leader = leader;
    }


}

1.3Dao包

DAO数据访问层,把访问数据库的代码封装起来,可以进行crud功能(增删改查)

image-20240714175513930

以EmpsDao包为例,两个方法分别展示了查询和删除功能:

  1. 增删改查方法里中的所有语句大致相同
  2. 不同的地方是在 sql 语句对应不同功能要发生改变

package com.dao;

import com.pojo.Emp;
import com.utils.DruidUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.SQLException;
import java.util.List;

public class EmpsDao {
    //根据部门编号查询对应的员工
    public List<Emp> list(String did){
        //1.结合ds创建qr对象
        QueryRunner qr = new QueryRunner(DruidUtil.getDs());
        //2.利用qr进行crud(真删改查)
        try {
            return qr.query("select * from t_emps where deptId=?",new BeanListHandler<Emp>(Emp.class),did);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return null;
    }
    
	//删除部门员工
    public int deleteByeid(String eid) {
        QueryRunner qr = new QueryRunner(DruidUtil.getDs());
        //2.利用qr进行crud(真删改查)
        try {
            return qr.update("delete from t_emps where id= ?",eid);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return 0;
    }

    }
    

1.4service包

Service业务逻辑层,处理逻辑上的业务,而不去考虑具体的实现。

通过调用数据访问层,实现逻辑上的业务,一个接口的实现可能需要多个dao层的接口

private UserDao userDao = new UserDaoImpl 该语句可以可以放在servlet包中重写doGet方法时写
// 接口:定义好方法,之后servlet直接调用,与servlet方法数量相同
// 名字最好不要跟dao层一样
// dao:select
// service:query
// 实现类
// 1.全局调一下dao层,方便下面调用
private UserDao userDao = new UserDaoImpl;
例:private EmpsDao empsDao = new EmpsDao();
 	private EmpsDao empsDao = new EmpsDao();
// 2.自由发挥

1.5servlet包

【Servlet】Servlet 详解(使用+原理)-CSDN博客

Servlet(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。

// 1.注解,
@WebServlet("/user")

// 2.继承HttpServlet
public class UserServlet extends HttpServlet{}

// 3.创建服务类对象,即上面的service包中的类
//例:private EmpsDao empsDao = new EmpsDao();
private UserService userService = new UserServiceImpl();

// 4.重写doGet()方法,如果调用它就会调用doPost()方法,创建doGet方法:继承Httpservlet后,直接doget+两下回车即可创建

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

// 5.重写doPost()方法
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // 首局一定要写这句,把用户传来的数据如果有汉字转为汉字,不然乱码
    req.setCharacterEncoding("utf8");
    // 这里我前端页面隐藏了一个表单,区分页面传入的是哪个方法
    // <input type="hidden" name="method" value="pn-prid">
    String method = req.getParameter("method");
    // 根据method判断需要调用什么方法

2.src\main\resources

druid.properties MySQL使用不同版本驱动时,JDBC属性配置文件有不同写法,具体变化可以跳转链接更多了解

# 如果mysql是5版本的去掉cj
driverClassName=com.mysql.cj.jdbc.Driver
# 端口号默认3306如果修改了记得把此处进行修改
# 记得修改数据库的名字
url=jdbc:mysql://localhost:3306/数据库名字?rewriteBatchedStatements=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
# 数据库账号,根据实际填写
username=root
# 数据库密码,根据实际填写
password=quanyu9988.gmail.com
# 一般不需要更改,初始化数据库连接池
initialSize=10
# 一般不需要更改,连接池的最大数据库连接数
maxActive=20
# 一般不需要更改,超时等待时间一毫秒为单位
maxWait=1000
# 一般不需要更改,连接池的最小空闲连接数,如果空闲的连接数大于该值,则关闭多余连接,反之创建更多连接满足最小连接数的要求
minIdle=5

以项目案例为例:

image-20240714191614091

image-20240714191644139

3.src\main\webapp

3.1WEB-INF\lib

image image

**本项目中所用的资源*:

​ 1.不导入,连接池用不了
​ druid-1.0.9.jar

​ 2.导入可以使用QueryRunner类+ResultSetHandler类,更方便的完成curd
​ commons-dbutils-1.6.jar

​ 3.数据库驱动,我这里用的5
​ mysql-connector-java-5.1.7.jar

​ 4.使用JSTL核心标签库,需要导入下面两个依赖
​ standard.jar
​ jstl-1.2.jar

image-20240714192912487

3.2WEB-INF\jsp

存放无法直接在地址栏访问的界面

3.3WEB-INF\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">
    <!--欢迎页,也就是一启动就能看见的页面-->
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
</web-app>

3.4暴露在外面的内容(我的理解为前端内容)

例如:
css
js
images

以及能直接在地址栏访问的界面
login.jsp
register.jsp

下面jsp页面第八行必须写上,才能证明他是jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--如果用到了核心标签记得加上核心标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
    <head>
        <title>Title</title>
        <%--所有外面的静态资源一定要用<%=request.getContextPath()%>代替..不然找不到数据--%>
        <link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/style.css"/>
    </head>
    <body>

    </body>
</html>

以项目为例:

image-20240714194222759

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri ="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>部门信息</title>
</head>

<body>

<table border="1" cellpadding="20">
    <tr>
        <th>部门编号</th>
        <th>部门名称</th>
        <th>部门位置</th>
        <th>部门领导</th>
        <th>详情查看</th>
    </tr>
    <c:forEach items="${deptList}" var="dept">
        <tr>
            <td>${dept.did}</td>
            <td>${dept.dname}</td>
            <td>${dept.dlocation}</td>
            <td>${dept.leader}</td>
            <td><a href="/aa/empList?did=${dept.did}">查看部门员工</a></td>
        </tr>

    </c:forEach>

</table>

</body>
</html>

4.pom.xml

这份说明没用到maven,采取自己导入jar包,这么的代码没有修改只是作为说明

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <!--    maven的基本信息-->
 <modelVersion>4.0.0</modelVersion>
 <!--    声明遵循哪一个pom模型版本-->
 <!--    组织表示,一般是公司网站倒过来-->
 <groupId>com.einmeer</groupId>
 <!--    本项目的唯一标识ID,项目名称-->
 <artifactId>qianyu</artifactId>
 <!--    项目当前版本号-->
 <version>1.0-SNAPSHOT</version>
 <!--    右边maven名字-->
 <name>qianyu</name>
 <!--    打包方式-->
 <packaging>war</packaging>
 <!--    POM之间的关系-->
 <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <maven.compiler.target>1.8</maven.compiler.target>
     <maven.compiler.source>1.8</maven.compiler.source>
     <junit.version>5.9.2</junit.version>
 </properties>
 <!--    依赖关系列表-->
 <dependencies>

     <!--        自己添加的lombok可以让我们在写实体类的时候大大减少代码量-->
     <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <version>1.18.24</version>
         <scope>provided</scope>
     </dependency>


     <dependency>
         <!--            依赖项的组织名-->
         <groupId>javax.servlet</groupId>
         <!--            依赖项的子项目名-->
         <artifactId>javax.servlet-api</artifactId>
         <!--            依赖项的版本-->
         <version>4.0.1</version>
         <!--            依赖项的适用范围-->
         <scope>provided</scope>
     </dependency>
     <dependency>
         <groupId>org.junit.jupiter</groupId>
         <artifactId>junit-jupiter-api</artifactId>
         <version>${junit.version}</version>
         <scope>test</scope>
     </dependency>
     <dependency>
         <groupId>org.junit.jupiter</groupId>
         <artifactId>junit-jupiter-engine</artifactId>
         <version>${junit.version}</version>
         <scope>test</scope>
     </dependency>
 </dependencies>

 <!--    构建设置-->
 <build>
     <plugins>
         <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-war-plugin</artifactId>
             <version>3.3.2</version>
         </plugin>
     </plugins>
 </build>
</project>

标签:String,did,流程,private,new,import,搭建,public,javaweb
From: https://www.cnblogs.com/guooming/p/18301930

相关文章

  • android系统启动流程- ServiceManager进程启动流程
    *注:基于Android11源码ServiceManager进程是在init进程创建的,所以我们从init进程的main()开始分析://文件路径:system/core/init/main.cppintmain(intargc,char**argv){...if(!strcmp(argv[1],"second_stage")){//TODO根据条件会走到这个分支......
  • 公司产品上云流程规范
    关于公司产品上云流程规范,可以考虑如下几个方面:1.产品架构设计:详细说明产品在云环境中的组件,以及各组件之间的关系,并给出需要考虑的技术难题。2.资源申请:详细说明云资源的申请、配置和管理流程,并给出云资源的使用标准。3.软件部署:详细说明软件的部署流程,并给出软件的部署要求。......
  • springboot+vue前后端分离项目-项目搭建10-验证码功能
    本次演示的验证码功能只涉及前端,而且功能简单1.新建vue/src/components/ValidCode.vue<template><divclass="ValidCodedisabled-select":style="`width:${width};height:${height}`"@click="refreshCode"><spanv-f......
  • 银河麒麟V10SP1搭建oracle19c(单库)
    遇到的坑:1.PRVG-0282问题解决:在先决条件检查步骤,PRVG-0282:无法检索操作系统分发ID的报错,该问题是由于字符集和环境变量问题,只需在执行安装前:使用oracle用户登录,不要root跳到oracle用户下exportCV_ASSUME_DISTID=RHEL7.6exportLANG=en_US然后刷新环境变量在执行./runInstal......
  • Linux可执行程序启动流程
    进程是如何启动的?进程启动过程示例代码#include<stdio.h>intmain(){printf("hello,world\r\n");return0;}启动两个终端,使用strace命令跟踪进程启动过程strace-f-s655000-i-T-ooutput.txt-p19510各个选项参考strace的man手册-f跟......
  • 在任何系统下使用公网ARL灯塔(免搭建)
    你是否还因没vps上的ARL灯塔而烦恼?那就试试这个脚本fofa:title='资产灯塔系统''''抓ARL灯塔'''importrequestsfromrequests.packages.urllib3.exceptionsimportInsecureRequestWarningimportthreadingresult=[]requests.packages.urllib3.disable_......
  • WordPress:快速搭建站点,wp安装及模版介绍
    最近搭建个人站点比较多,都是想把业务做到国外,通过google来引流,那我们今年就来介绍一个比较受欢迎的站点平台wordPress。WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把WordPress当作一个内容管理系统(CMS)来使用......
  • 已解决——ROS2开发环境搭建,亚博智能小车
    在实现多机通讯时,官方教程讲的很模糊,具体细节实现主机(ROS2小车),从机(自己的电脑上的Ubuntu系统)首先打开两个terminal,左边的负责连接小车,右边的负责实现从机的接受话题主机terminal输入[email protected]进入后再输入./run_docker.sh然后就进入小车的docker了然后输入sud......
  • 阳澄湖礼券怎样兑换实物:了解阳澄湖礼券兑换实物的流程与注意事项,享受购物优惠
    ①:了解礼券信息:有效期:确认礼券的有效期,避免过期失效。使用范围:了解可以使用礼券的商家或兑换地点。面值和数量:确认礼券的面值和数量,以便兑换时使用。②:选择商品或服务:查看产品目录:在指定商家或网站上查看可以使用礼券兑换的商品或服务目录。③:兑换流程:到店......
  • Spring的启动流程refresh方法、配置类解析流程@Component、@Configuration、@Import、
    Spring的启动流程概述:核心方法:refresh方法,作用就是实例化spring容器中的所有单例。 3步:生成BeanFactory容器(有beanDefinition类信息和bean对象实例)生成BeanDefinition类信息生成bean对象实例 需要知道的知识:1、先有beanDefinition类信息,再有bean对象。2、在beanDefi......