开发工具: IntelliJ IDEA 2021.1.1
开发环境:JDK 1.8
技术选型:servlet+jsp+mysql
帮助开发过程的技术:jstl JSP标签库 maven jar包管理 lombok简化代码
数据库创建
CREATE DATABASE shop CHARACTER SET utf8mb4;
CREATE TABLE client_TB(
clientId INT,clientName VARCHAR(20),birthday DATE,sex VARCHAR(2),
PRIMARY KEY (clientId) ,
CHECK (sex IN('男','女')));
CREATE TABLE product(
productId INT ,productName VARCHAR(20),price FLOAT,stock INT ,
PRIMARY KEY(productId)
);
CREATE TABLE order_TB(
orderId INT ,clientId INT,orderDate DATE,papyment FLOAT, stats VARCHAR(5),
PRIMARY KEY (orderId)
);
CREATE TABLE orderProduct(
orderId INT , productId INT,quantity INT,
PRIMARY KEY (orderId,productId)
);
物理外键:
是指在数据上使用FOREIGN KE 来约束数据
逻辑外键:
在Service层使用逻辑来到到外键的约束效果
本次项目使用的逻辑外键:因为物理外键在实际工作中分布式数据库或者分库分表时候十分不方便,会很麻烦,所以使用逻辑外键,易于维护数据库中的数据
1:创建Maven项目 File→ New Project → 选择Maven项目 →勾选javawebapp骨架
2:导入向pom.xml文件导入这次项目需要的技术的坐标
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
3: 使用IDEA自带的Tomcat进行测试刚刚创建的项目
TIPS:在每一次的开发过程,时刻记得进行回头测试一下
IDEA右上角Add Configuration→弹窗左上角+→选择Tomcat Service→Local
打包好的项目是需要进行在服务器上运行的,所以之后的工程运行都会被自动打包到本地下载的Tomcat服务器上运行
进行关键的配置与说明:
Server
Configure…:选择本地下载的Tomcat路径
-
最好是下载/选择8版本的
-
由于技术的更新 Tomcat在9版本以后不是javax.servlet-api而是jakarta.servlet-api之后的使用会带来路径的很大麻烦,有些需要用到servlet技术但是没有更新到最新jakarta.servlet,然后你的工程就会很多爆红!
-
8.0.x版本多人用而且稳定:不求最新只求最稳
-
URL:启动工程时候在浏览器上输入的对应URL就会看到你的工程
http://localhost:80/此处可以修改成你喜欢的名字/
JRE: 使用对应的环境变量下的JRE因为Tomcat的本地文件会调用你电脑上的JRE环境变量
HTTP port:服务器运行时占用的端口
-
关于端口有时候被占用的情况
-
1:通过windows命令行
netstat -ano|findstr 端口号
-
2: 返回第一行找到PID
-
3:通过命令或者任务管理器结束PID进程
配置完成→运行→在浏览器输入URL→默认弹出的是webapp目录下的index.jsp
4:逻辑架构的包的创建
Deployment
+号:添加新打包的工程
+号→Artifact… :打包工程名字选择
-号:移除已经添加的打包工程
1: cn.edu.bnuz.oreder_system这是一个域名反过来写,放置启动时与真正的url进行冲突
2: controller层:页面跳转的控制层本次项目存放servlet文件的包
3: dao层:DAO(Date Access Object) JDBC与数据库交互
4: service层:数据的逻辑处理
5: utils包: 一些工具类的实现:例如JdbcUtil.class : 简化jdbc的连接与释放
6: entity包: 存放本次项目的Client、Product、Order对象
7: resources包:配置文件的存放:例如本次数据库连接的配置文件
8: webapp:前端页面的存放
9: WEB-INF:web.xml存放(不可改)
10: target : 项目打包后的存放
数据data在java-web项目的过程:
data→view→controller→service→dao→ DataBase→file
jsp1→servlet: 此处有jsp1.jsp 而且在web.xml上设置某个xxxServlet映射路径为/servlet
demo_web/jsp1.jsp → demo_web/servlet
jsp页面跳转:
不传值:
<%--使用了el表达式--%>
${pageContext.request.contextPath}/servlet
传值(?之后的所有值之间不能有空格):
<%--使用了el表达式--%>
${pageContext.request.contextPath}/servlet?key1=value1[&key2=value2.....]
jsp1→servlet从jsp1获取值→jsp2:
servlet获取值
request.getParameter("参数名"); 根据参数名获取参数值(注意,只能获取一个值的参数)
request.getxxxx还有很多需要进一步学习!!!
servlet传递值
type value=xxx;
type2 value2=xxx;
request.setAttribure("key",value)
request.setAttribure("key2",value2)
servlet 页面跳转
//转发
request.getRequestDispatcher("xx.jsp").forward(request,response)
//重定向
respond.sendRedirect(req.getContextPath()+"/servlet");
request.getRequestDispatcher()和response.sendRedirect()区别
google!!!
github源码
https://github.com/zslkdjaw/study_notes/tree/servlet-jsp-mysql-orderSystem
代码实现