首页 > 其他分享 >web尝试---信箱

web尝试---信箱

时间:2024-08-30 10:57:30浏览次数:11  
标签:web note java String id --- import 信箱 public

功能

写信(增加)+读信(显示所有信件)

目录结构

数据库设计

刚开始设计了主键为id,但是后来不想用id这个属性了,但是代码写完了很麻烦不想改了。

感觉我这个id属性设置的简直多余!!!!

id重复了没法添加,但是用户怎么知道写的id是否重复呢,他也不应该看数据库挑一个没用过的id啊。

后端代码

dao层

里面有两个方法:增加+查询所有

package com.xx.note.dao;import com.xx.note.pojo.Note;
import com.xx.note.utils.JdbcBase;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class NoteDao {
    public void addNote(Note note) {
        try {
            Connection c = JdbcBase.getConnection();
            String sql = "INSERT INTO note (id, name, content, date) VALUES (?, ?, ?, ?)";
            PreparedStatement ps = c.prepareStatement(sql);
            ps.setInt(1, note.getId());
            ps.setString(2, note.getName());
            ps.setString(3, note.getContent());
            ps.setDate(4, note.getDate());

            ps.executeUpdate();

            ps.close();
            c.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public List<Note> getAllNotes() {
        List<Note> noteList = new ArrayList<>();
        try {
            Connection c = JdbcBase.getConnection();
            String sql = "SELECT * FROM note";
            PreparedStatement ps = c.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();

            while (rs.next()) {
                Note note = new Note();
                note.setId(rs.getInt("id"));
                note.setName(rs.getString("name"));
                note.setContent(rs.getString("content"));
                note.setDate(rs.getDate("date"));

                noteList.add(note);
            }

            rs.close();
            ps.close();
            c.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return noteList;
    }
}

pojo实体

4个属性,对应get,set等等方法,全参构造,空参构造...

package com.xx.note.pojo;

import java.sql.Date;

public class Note {
    private int id;
    private String name;
    private String content;
    private Date date;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public Note(int id, String name, String content, Date date) {
        this.id = id;
        this.name = name;
        this.content = content;
        this.date = date;
    }

    public Note() {
    }

    @Override
    public String toString() {
        return "Note{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", content='" + content + '\'' +
                ", date=" + date +
                '}';
    }
}

service层

调用dao层的方法

package com.xx.note.service;

import com.xx.note.dao.NoteDao;
import com.xx.note.pojo.Note;

import java.util.List;

public class NoteService {
    private NoteDao noteDao = new NoteDao();

    public void addNote(Note note) {
        noteDao.addNote(note);
    }

    public List<Note> getAllNotes() {
        return noteDao.getAllNotes();
    }
}

servlet

有读信和写信两个功能,写了两个servlet。

NoteReadServlet

package com.xx.note.servlet;
import com.alibaba.fastjson.JSON;
import com.xx.note.pojo.Note;
import com.xx.note.service.NoteService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/read")

public class NoteReadServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取笔记列表
        List<Note> notes = new NoteService().getAllNotes(); // 获取笔记的逻辑

        request.setAttribute("notes",notes);
        request.getRequestDispatcher("/read.jsp").forward(request,response);

        //json好使嘿嘿嘿
//        //将对象转换为json字符串
//        String json = JSON.toJSONString(notes);
//        //设置编码格式
//        response.setCharacterEncoding("utf-8");
//        response.getWriter().print(json);
    }
}

 NoteWriteServlet

提交后,提示成功,以html格式打印到网页

package com.xx.note.servlet;
import com.xx.note.pojo.Note;
import com.xx.note.service.NoteService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

@WebServlet("/write")
public class NoteWriteServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        // 获取表单数据
        int id = Integer.parseInt(request.getParameter("id"));
        String name = request.getParameter("name");
        String content = request.getParameter("content");
        String dateStr = request.getParameter("date");

        System.out.println("测试一下嘿嘿嘿");

        // 将字符串日期转换为 Date 对象
        Date date = null;
        try {
            date = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 这里可以将 Note 对象存入数据库或进行其他处理
        Note note = new Note();
        note.setId(id);
        note.setName(name);
        note.setContent(content);
//        note.setDate((java.sql.Date) date);
        note.setDate(new java.sql.Date(date.getTime()));

        NoteService noteService = new NoteService();
        //调用Service层增加方法(add),增加记录
        noteService.addNote(note);

        // 响应提交结果
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>提交成功啦!!!</h1>");
        out.println("<p>ID: " + note.getId() + "</p>");
        out.println("<p>Name: " + note.getName() + "</p>");
        out.println("<p>Content: " + note.getContent() + "</p>");
        out.println("<p>Date: " + new SimpleDateFormat("yyyy-MM-dd").format(note.getDate()) + "</p>");
        out.println("</body></html>");
    }
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);//Get请求和Post请求的处理是一样的,所以把request、response转交给Post方法就好
    }
}

utils工具类

放数据库驱动的几行代码

package com.xx.note.utils;

import com.xx.note.pojo.Note;
import com.xx.note.service.NoteService;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.List;

public class JdbcBase {
    public static String DBDRIVER = "com.mysql.jdbc.Driver";
    public static String DBURL = "jdbc:mysql://localhost:3306/note?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&autoReconnect=true&failOverReadOnly=false&allowPublicKeyRetrieval=true";
    public static String DBUSER = "root";
    public static String PASSWORD = "123456";
    public static Connection getConnection() throws Exception {
        Class.forName(DBDRIVER);
        return DriverManager.getConnection(DBURL, DBUSER, PASSWORD);
    }
    public static void main(String[] args) {
        try {
            Connection conn = JdbcBase.getConnection();
            System.out.println("数据库连接成功!!!");
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("数据库连接失败!!!");
        }
//        测试方法1好用
//        System.out.println(new NoteService().getAllNotes());
//        测试方法2是否好用
//        new NoteService().addNote(new Note());

    }
}

前端代码

用的jsp

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: 86158
  Date: 2024/7/10
  Time: 10:09
  To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>来自星星的信箱

标签:web,note,java,String,id,---,import,信箱,public
From: https://blog.csdn.net/yesyesyes_yes/article/details/141678235

相关文章

  • 第101期 低光可见光-红外配对数据集
    引言亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。重要性及意义一个用于低光视觉的可见光-红外配对数据集的重要性及意义主要体现在以......
  • 【案例65】WebSphere启动比tomcat启动慢的测试
    以下为多次测试的一些结论,谨慎使用,请一定做好测试后在使用。1.在原先慢的WAS环境下,添加-Dsun.reflect.inflationThreshold=15,可以有效提升was下的响应速度,和Tomcat下速度相当,但该参数=15的情况我们Tomcat以前还没有使用过。2.原先was环境下慢的原因是:没有设置nodeagent的in......
  • sqli-labs通关(41- )
    第四十一关1、判断闭合和列数整数闭合,共有3列2、查看数据库名?id=-1unionselect1,database() --+3、查看数据表名?id=-1unionselect1,2,group_concat(table_name)frominformation_schema.tableswheretable_schema='security'--+4、查看users字段名......
  • 【3.4】贪心算法-解按要求补齐数组
    一、问题        给定一个已排序的正整数数组nums,和一个正整数n。从[1,n]区间内选取任意个数字补充到nums中,使得[1,n]区间内的任何数字都可以用nums中某几个数字的和来表示。请输出满足上述要求的最少需要补充的数字个数。......
  • redis-shake4迁移数据(蛮好用)
    redis-shake下载地址:https://github.com/tair-opensource/RedisShake/releases测试环境redis需要从公有云迁移到私有云,就用redis-share测试一下。下载后解压(就两个文件,执行文件和配置文件): [root@gcv-x-test-sharedb-oracleredis]#catshake.toml##我只需要复制db0得数据......
  • 世微 AP9195 7-24V 大功率升压恒流驱动芯片 LED照明与控制器方案
    概述AP9195是一款高效率、高精度的升压型大功率LED灯恒流驱动控制芯片。AP9195内置高精度误差放大器,固定关断时间控制电路,恒流驱动电路等,特别适合大功率、多个高亮度LED灯串的恒流驱动。AP9195通过调节外置的电流采样电阻,能控制高亮度LED灯的驱动电流,使LED灯亮......
  • 01-数组
    1.理论基础数组是存放在连续内存空间上的相同类型数据的集合。数组可以方便的通过下标索引的方式获取到下标下对应的数据。数组的简单示例:数组内存空间的地址是连续的正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。......
  • .NET 开源报表神器 Seal-Report
    前言Seal-Report是一款.NET开源报表工具,拥有1.4KStar。它提供了一个完整的框架,使用C#编写,最新的版本采用的是.NET8.0。它能够高效地从各种数据库或NoSQL数据源生成日常报表,并支持执行复杂的报表任务。其简单易用的安装过程和直观的设计界面,我们能够在几分钟内创建并......
  • MDST150-16-ASEMI机床专用整流模块MDST150-16
    编辑:llMDST150-16-ASEMI机床专用整流模块MDST150-16型号:MDST150-16品牌:ASEMI封装:MDST批号:2024+分类:整流模块特性:整流模块、整流桥平均正向整流电流(Id):150A最大反向击穿电压(VRM):1600V恢复时间:>2000ns结温:-40℃~150℃正向峰值电压:1.05V~1.30V引脚数量:8芯片个数:7芯片尺寸:MILMDST150-16特......
  • Go,你也可以的!-【7.2 panic】
    7.2panicpanic就是Go语言中的崩溃,崩溃也就是程序不可用,这在实际的业务中基本是最严重的BUG。在大部分语言中,产生崩溃的原因基本是差不多的,大多都是访问了空指针、数组越界、内存溢出等。基本可以总结为,发生崩溃都是与系统进行了非法的内存或资源操作。本节代码存放目录......