云日记javaWeb数据库系统设计

## 技术选型
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());

    }

}

前端实现

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个简单的 JavaWeb 用户登陆的示例代码,该示例使用 JDBC 连接 MySQL 数据库,实现用户登陆的功能。 1. 创建数据库表 首先需要创建一个名为 user 的表,该表用于存储用户的账号和密码信息。 ```sql CREATE TABLE user ( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL, password VARCHAR(50) NOT NULL, PRIMARY KEY (id) ); ``` 2. 创建 JavaWeb 项目 接下来创建一个 JavaWeb 项目,我们可以使用 Eclipse 或者 IDEA 等 Java IDE 工具创建一个动态 Web 项目。 3. 编写用户登陆的代码 在项目中创建一个名为 LoginServlet 的 Servlet,用于处理用户登陆的请求,代码如下: ```java import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/login") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { // 加载 MySQL JDBC 驱动 Class.forName("com.mysql.jdbc.Driver"); // 打开连接 String url = "jdbc:mysql://localhost:3306/test"; String user = "root"; String passwd = "root"; conn = DriverManager.getConnection(url, user, passwd); // 构造查询 SQL 语句 String sql = "SELECT * FROM user WHERE username = ? AND password = ?"; stmt = conn.prepareStatement(sql); stmt.setString(1, username); stmt.setString(2, password); rs = stmt.executeQuery(); // 判断查询结果是否存在 if (rs.next()) { // 用户名和密码正确,登陆成功 response.sendRedirect("success.jsp"); } else { // 用户名或密码错误,登陆失败 response.sendRedirect("fail.jsp"); } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } finally { // 关闭资源 try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } ``` 在代码中,我们首先从 request 对象中获取用户输入的用户名和密码,然后使用 JDBC 连接 MySQL 数据库,查询用户信息。如果查询结果存在,则表示用户名和密码正确,登陆成功,重定向到 success.jsp 页面;否则,表示用户名或密码错误,登陆失败,重定向到 fail.jsp 页面。 4. 编写登陆页面 在 WebContent 目录下创建一个名为 login.jsp 的 JSP 页面,用于显示登陆页面和提交用户登陆的请求。代码如下: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户登陆</title> </head> <body> <h2>用户登陆</h2> <form action="login" method="post"> <p> 用户名:<input type="text" name="username" /> </p> <p> 密码:<input type="password" name="password" /> </p> <p> <input type="submit" value="登陆" /> </p> </form> </body> </html> ``` 在代码中,我们使用了一个表单,通过 post 请求将用户输入的用户名和密码提交到 LoginServlet 进行处理。 5. 创建登陆成功和失败的页面 在 WebContent 目录下创建 success.jsp 和 fail.jsp 两个 JSP 页面,用于显示用户登陆成功和失败的页面。 success.jsp 页面代码如下: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登陆成功</title> </head> <body> <h2>登陆成功</h2> </body> </html> ``` fail.jsp 页面代码如下: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登陆失败</title> </head> <body> <h2>登陆失败</h2> </body> </html> ``` 6. 配置 web.xml 文件 最后,在项目的 WEB-INF 目录下创建一个名为 web.xml 的部署描述符,用于配置 Servlet 的映射关系。代码如下: ```xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>JavaWebLoginDemo</display-name> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> </web-app> ``` 在代码中,我们将 LoginServlet 映射到了 /login 的 URL 路径,这样当用户访问 /login 路径时,就会触发 LoginServlet 中的 doPost() 方法进行处理。 至此,我们就完成了 JavaWeb 用户登陆的示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hly8521

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值