搭建一个javaweb项目的准备流程
以所学系统项目为例:
1src\main\java\com\utils
1.1tools:
DruidTools.java
需要在lib
中加入druid
-xx-xx.jar包
代码展示
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 // 生成一个包含所有变量的有参构造函数
以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功能(增删改查)
以EmpsDao包为例,两个方法分别展示了查询和删除功能:
- 增删改查方法里中的所有语句大致相同
- 不同的地方是在 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
以项目案例为例:
3.src\main\webapp
3.1WEB-INF\lib
**本项目中所用的资源*:
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
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>
以项目为例:
<%@ 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
标签:String,did,流程,private,new,import,搭建,public,javaweb From: https://www.cnblogs.com/guooming/p/18301930这份说明没用到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>