## 技术选型
JSP
Servlet
Jquery及插件
Ueditor
log4j
Junit
## 技术细节
增删改查
免登录:Session 和 Cookie
非法访问:过滤器 Filter
文件上传
分页
Ajax:Dom操作
富文本编辑器
## 开发环境
IDEA + Maven + MySQL + Jdk1.8 + Tomcat
## 修改配置
在 pomx.xml 配置文件中,修改配置、添加依赖与插件
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- junit 测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- web servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- 日志打印相关的jar -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.2</version>
</dependency>
<!-- mysql 驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<!-- json 依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
<!-- hutool工具集 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.7</version>
</dependency>
<!-- commons-io 依赖 -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version> </dependency>
<!-- 添加百度编辑器ueditor支持 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- jstl依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- lombok插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>lezijie-note</finalName>
<plugins>
<!-- 编译环境插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration> </plugin>
<!-- Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>8080</port>
<!-- 启动端口 默认:8080 -->
<path>/note</path>
<!-- 项目的站点名,即对外访问路径 -->
<server>tomcat7</server>
<!-- 服务器名称 -->
</configuration>
</plugin>
</plugins>
</build>
分层思想
web:就好比服务员
service:业务逻辑,复杂;调用增删改查
dao:只有增删改查
po:实体类
1. PO
persistant object
持久对象,可以看成是与
数据库
中的表相映射的
Java
对象。
最简单的
PO
就是对应数据库中某个表中的一条记录,多个记录可以用
PO
的集合。
PO
中应该不包含任何对数据库的操作。
2. VO :
value object
值对象。通常用于业务层之间的数据传递,和
PO
一样也是仅仅包含数据而已。
但应是抽象出的业务对象,可以和表对应
,
也可以不
,
这根据业务的需要。
3. DAO
data access object
数据访问对象,此对象用于访问数据库。
通常和
PO
结合使用,
DAO
中包含了各种数据库的操作方法。
通过它的方法,结合
PO
对数据库进行相关的操作。
4. BO
business object
业务对象,封装业务逻辑的
java
对象。
通过调用
DAO
方法,结合
PO
,
VO
进行业务操作。
5. POJO
plain ordinary Java object
简单无规则
java
对象。
配置文件
在
src/main/resources
目录下,新建
db.properties
文件
#
连接
MYSQL
数据库的配置文件 注:等号的前后不要写空格
#
驱动名
jdbcName
=
com.mysql.cj.jdbc.Driver
#
数据库连接 (
db_lezijie_note
是数据库的名称)
dbUrl
=
jdbc
:
mysql
:
//localhost
:
3306/db_lezijie_note?
useUnicode
=
true&characterEncoding
=
utf8&serverTimezone
=
GMT%2B8&useSSL
=
false
#
数据库的连接账号 (账号基本上都是
root
)
dbName
=
root
#
数据库的连接密码 (每个人的数据库密码可能不一致,需要修改)
dbPwd
=
123456
创建工具类
DBUtil
创建配置文件db.properties
jdbcName=com.mysql.cj.jdbc.Driver dbUrl=jdbc:mysql://localhost:3306/lezijie-note?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false dbName=root dbPwd=123456
DBUtil代码
1 得到配置文件
private static Properties properties=new Properties();
2 加载文件
static { //输入流 InputStream in=DBUtil.class.getClassLoader().getResourceAsStream("db.properties"); //通过load()方法将输入流加载到配置文件 try { properties.load(in); //通过配置文件对象的getProperty()方法获取驱动名并加载驱动 Class.forName(properties.getProperty("jdbcName")); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } }
3 获取连接信息
String dbUrl=properties.getProperty("dbUrl"); String dbName=properties.getProperty("dbName"); String dbPwd=properties.getProperty("dbPwd");
4 得到数据库连接
connection = DriverManager.getConnection(dbUrl,dbName,dbPwd);
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class DBUtil {
//得到配置对象
private static Properties properties=new Properties();
//加载配置文件
static {
//输入流
InputStream in=DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
//通过load()方法将输入流加载到配置文件
try {
properties.load(in);
//通过配置文件对象的getProperty()方法获取驱动名并加载驱动
Class.forName(properties.getProperty("jdbcName"));
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
Connection connection =null;
//得到数据库连接的相关信息
String dbUrl=properties.getProperty("dbUrl");
String dbName=properties.getProperty("dbName");
String dbPwd=properties.getProperty("dbPwd");
//得到数据库连接
try {
connection = DriverManager.getConnection(dbUrl,dbName,dbPwd);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
}
关闭数据库连接
判断资源对象如果不为空,则关闭
public static void close(ResultSet resultSet, PreparedStatement preparedStatement,Connection connection){
//判断资源对象如果不为空,则关闭
try {
if (resultSet !=null){
resultSet.close();
}
if (preparedStatement !=null){
preparedStatement.close();
}
if (connection !=null){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
测试数据库连接
import com.lezijie.note.util.DBUtil;
import org.junit.Test;
public class TestDB {
/*单元测试方法
* 1.方法返回值,建议用void,一般没有返回值
* 2.参数了表,建议空参,一般没有参数
* 3.每一个方法上面都需要设置@Test注解
* 4.每个方法都能单独运行
* */
@Test
public void testDB(){
System.out.println(DBUtil.getConnection());
}
}
导入日志(工厂)依赖
<!--日志工厂-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
建立 log4j.properties,手动放到指定文件夹
配置代码如下:
hadoop.root.logger=DEBUG, console
log4j.rootLogger = DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
使用日志文件:
@Test
public void testDB(){
System.out.println(DBUtil.getConnection());
//使用日志
logger.info("获取数据库连接:"+DBUtil.getConnection());
logger.info("获取数据库连接:{}",DBUtil.getConnection());
}
}