javaWeb——日记本系统

日记本系统

写在前面

系统采用传统的Jsp+Servlet+Model的MVC开发模式,前端采用主流的BootStrap技术,数据库采用Mysql,实现了个人日记本系统,亮点是Bootstrap的综合运用,ckeditor的运用以及FileUpload组件上传图片,以及MD5加密的应用(该项目是非本人开发,只是学习其中的知识);

一、需求:

  1. 登陆注册
  2. 日记的增删该查
  3. 日记分类(增删改查)
  4. 个人中心(头像,名字,签名等信息)

二、数据库设计:

  1. 三张表:
    t_user(userId,userName,password,nickName,imageName,mood)//password因为采用MD5加密,所以设置长一点(50)
    t_diary (diaryId,title,content,typeId,releaseDate )//content 内容长,datatype用text,releaseDate的格式用datetime
    t_diaryType(diaryTypeId,typeName)

  2. 主外键设置(外键:其他表中的主键称为外键):
    t_diary 中的 typeId外键 关联 t_diaryTaye中的 diaryTypeId主键 (对应关系为多对1)
    navicat设置外键:
    在这里插入图片描述
    外键名(name):可以不填, 系统自动生成;
    栏位名(Field Name): 就是设置‘typeId’为外键;
    参考数据库(Reference DadaBase): 外键关联的数据库;
    引用表(Reference Table): 关联的表;
    外栏位名(Outside field name): 关联的字段(这里是“diaryTypeId”, 可以与栏位名相同);
    删除时:删除时候选择的动作
    刷新时:更新时候选择的动作
    (在设置外键的时候,删除时和更新时两列有四个值可以选择:CASCADE、NO ACTION、RESTRICT、SET NULL,自己全亲自试了一遍,它们的区别如下:
    CASCADE:父表delete、update的时候,子表会delete、update掉关联记录;
    SET NULL:父表delete、update的时候,子表会将关联记录的外键字段所在列设为null,所以注意在设计子表时外键不能设为not null;
    RESTRICT:如果想要删除父表的记录时,而在子表中有关联该父表的记录,则不允许删除父表中的记录;
    NO ACTION:同 RESTRICT,也是首先先检查外键;)

  3. 设计表注意事项:
    1.对于id这种主键:int 型,主键,不允许为空,自动递增
    2.对于日期,需要特殊格式:如datetime
    3.像比较长的文本如日记内容可设置格式为text
    4.对于其他的属性,只要是包含汉字型的,如名称,密码都将类型设置为varchar,长度根据需求设置即可。

三.后台代码

四个包:

Dao:数据访问对象层
Model:模型层
Util:工具层
Web:web访问层

  1. Util:
    连接数据库:
    注意事项:添加mysql得jar包:mysql-connector-java
 public class DbUtil2 {
	private String dbUrl="jdbc:mysql://localhost:3306/db_diary";
	private String dbUserName="root";
	private String dbPassword="l1542735938";
	private String jdbcName="com.mysql.jdbc.Driver";
//获取连接:先加载驱动,再连接
	public Connection getCon() throws Exception{
		Class.forName(jdbcName);
Connection con =DriverManager.getConnection(dbUrl,dbUserName,dbPassword);
		return con;
	}
//关闭连接
	public void closeCon(Connection con) throws Exception{
		if (con!=null){
			con.close();
		}
	} 
  1. model
    根据数据库中的表建相关的类;
  2. dao
    用于登陆账号密码的验证等
    如验证登陆信息:
	public User login(Connection con ,User user) throws Exception{
		User resultUser=null;//若不存在则返回Null
		//查找数据库中是否存在user
		String sql="select *from t_user where userName=?and password=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setString(1, user.getUserName());
		pstmt.setString(2, user.getPassword());
		ResultSet rs=pstmt.executeQuery();
		if(rs.next()){//如果存在,就初始化resultUser
			resultUser=new User();
			resultUser.setUserId(rs.getInt("userId"));
			resultUser.setUserName(rs.getString("userName"));
			resultUser.setPassword(rs.getString("password"));
		}
		return resultUser;
 	}
  1. web
    注意事项
    1. 先将tomcat的包添加(buildPath)
    2. 继承HttpServlet
    3. 覆盖父类的doPost,doGet方法

代码

package web;

import java.io.IOException;
import java.sql.Connection;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import dao.UserDao;
import model.User;
import util.DbUtil;

public class LoginServlet extends HttpServlet{
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	
		this.doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//获取session对象,用于保存当前登陆对象
		HttpSession session=req.getSession();
		//获取前台用户信息,用于验证是否合法
		String userName=req.getParameter("userName");
		String password=req.getParameter("password");
		
		Connection con= null;
		DbUtil dbUtil=new DbUtil();
		UserDao userDao=new UserDao();
		
		try {
			con=dbUtil.getCon();
			User currentUser=userDao.login(con, new User(userName,password));
			if(currentUser==null){
				
			}else{
				session.setAttribute("currentUser", currentUser);
				resp.sendRedirect("main.jsp");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			try {
				dbUtil.closeCon(con);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	
}

猜你喜欢

转载自blog.csdn.net/Y734493585/article/details/89372338