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

news/2024/11/15 15:21:54/文章来源:https://www.cnblogs.com/guooming/p/18301930

搭建一个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;@Overridepublic 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>

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

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

相关文章

VulnHub-TR0LL: 1靶场实操

本文是对Vulnhub中的Tr0ll:1靶机实操TR0LL: 1靶场实操 靶场信息下载后使用vm打开即可TR0LL1靶场地址:https://www.vulnhub.com/entry/tr0ll-1,100/ 靶场创建时间:2014年8月14日 靶场描述:Tr0ll 的灵感来自于 OSCP 实验室内对机器的不断拖钓。目标很简单,获取 root 权限并从…

申请Lets Encrypt免费SSL证书

Lets Encrypt是一个免费的、开源的、自动化的证书颁发机构(CA),它的出现极大地推动了HTTPS的普及,为互联网的安全做出了巨大的贡献。 通过来此加密网站可以免费申请Lets Encrypt证书。 Lets Encrypt免费SSL证书申请步骤 1. 登录来此加密网站,输入域名,可以勾选泛域名和包…

暑假第一周周报

这周除了个人赛外,还进行了线段树、数状数组的练习。刚开始训练的时候,对线段数和数状数组是缺乏理解,感觉非常非常难,但随着做了越来越多的题。感觉现在是掌握了其中一部分。刚开始学线段树,其中的懒标记感觉不是太会,于是就网上找了一些资料,把那个懒标记的相关知识点…

电影《抓娃娃》迅雷高清版下载[AVI/3.89GB/HD]BT完整版百度云资源

引言电影《抓娃娃》于2024年7月16日在中国大陆上映,由闫非、彭大魔执导,沈腾、马丽领衔主演。这部影片不仅延续了开心麻花团队一贯的喜剧风格,更在幽默与诙谐之中深刻探讨了家庭教育与个人成长的主题。本文将从剧情简介、角色分析、导演手法、主题探讨等方面,对《抓娃娃》进…

进度报告6

(1)1.开始学习面向对象编程,知道基本规则并进行了一定练习 先定义某某类在之中定义变量和函数 之后新建类再调用对象对数据进行处理 (2)继续学习面向对象

2024/7/13 ABC362 比赛记录

7/14: 昨晚打的abc,外面下着大雨; 1650 pts rank 975T1: 简单签到题,愣是被我拖了7min 死因:开赛时老师开始收手机,一直叫我名,我一着急装了两个翻译插件,导致页面错版。时间宝贵,于是我艰难的对照样例勉强读懂题( T2: 计算几何? 给平面直角坐标系3点,判rt 三角形。…

android系统启动流程- ServiceManager进程启动流程

*注:基于Android11源码 ServiceManager进程是在init进程创建的,所以我们从init进程的main()开始分析: // 文件路径: system/core/init/main.cppint main(int argc, char** argv) {...if (!strcmp(argv[1], "second_stage")) { //TODO 根据条件会走到这个分支re…

jdk22

1、下载JDK22 2、安装JDK22选择路径后,一路默认安装。3、Windows 系统下配置环境变量点击我的电脑-属性-高级系统设置 新增配置 JAVA_HOME,为 jdk 的安装路径D:\Java22\jdk22 编辑配置 Path 变量,配置 jdk 的 bin 的目录%JAVA_HOME%\bin 验证安装结果 java -version

第一章 FFmpeg初体验:在Centos7.9下编译FFmpeg!

FFmpeg 官方网站:https://ffmpeg.org//download.html#build-linux 1.下载源码 1.1 第一种方式,官网上面下载源码包: 截至目前最新的版本是7.0.1,对应的地址是:https://ffmpeg.org//releases/ffmpeg-7.0.1.tar.gz 下载 curl -o ffmpeg-7.0.1.tar.gz https://ffmpeg.org//re…

Camstar 生成本地SSL證書

1.登录已经安装 Camstar 服务器,通过管理员启动 Windows PowerShell,需要注意的一定要使用管理员身份启动 2.生成 SSL 证书 在启动的 Windows PowerShell 窗口中输入以下命令代码。代码输入后点,击回车即可创建 SSL 证书New-SelfSignedCertificate -DnsName "localhos…

tryhackme-Gatekeeper(守门人)

信息收集 首先使用nmap进行端口扫描,结果如下 nmap -sT -p- --min-rate 10000 -oA openPort nmap -sV -O -A -p port1,port2,portN -oA version nmap --script=smb.. -p 135,139,445 -oA 445Port# Nmap 7.94SVN scan initiated Sat Jul 13 23:05:09 2024 as: nmap -sT -p- --…