“综合”web项目编写------手把手0基础教学(二)
创始人
2024-01-31 23:06:27

上一节介绍了编写综合项目的基本流程  “综合”web项目编写------手把手0基础教学(一)

这里将继续介绍项目的编写,一个一个功能挨个实现。

目录

实现用户的登录功能

一 . 编写工具包---封装数据库链接

二 . 构建数据模型

三 . 构建功能模型

四.编写客户端jsp文件

五 . 编写控制端Servlet

第一步.先注册servlet

第二步.设置请求字符集编码格式(“utf-8”)

第三步.获取请求参数

第四步.调取功能模型中的功能(这里调用的是登录login功能)

第五步.返回响应


实现用户的登录功能

一 . 编写工具包---封装数据库链接

我们在功能编写之前可以先做一下准备工作,编写一下工具包,将一些要重复使用的代码封装起来,比如:数据库的链接(对数据库增删改查都要使用),来避免后面重复写。具体代码如下:

package com.my.until;import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;public class DBUntil { //封装数据库的链接//属性private static final String DRIVER = "com.mysql.jdbc.Driver";private static final String URL = "jdbc:mysql://localhost:3306/a01";private static final String USER = "root";private static final String PASSWORD = "1234";//方法//链接数据库public Connection getConn(){try {//注册驱动Class.forName(DRIVER);//链接数据库return DriverManager.getConnection(URL,USER,PASSWORD);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return null;}
}

二 . 构建数据模型

编写entity包,创建实体类

实体类是根据数据表进行创建的,我们在先前的数据库中构建了一个users表,那么我们可以根据表来构建用户(user)模型

用户类此时实现序列化接口,然后据数据库中的表定义属性,自动生成方法getter()和setter()

具体代码和注释如下:

package com.my.entity;import java.io.Serializable;//Serializable是序列化接口,实现序列化是为了数据库表中的每一条数据保存到对象中,不再在控制台输出,在客户端显示public class Users implements Serializable {//实现一个序列化接口//属性://根据数据库表中的属性构建private Integer id;private String userName;private String userPwd;//方法:getter和setter方法,alt+insert自动生成public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserPwd() {return userPwd;}public void setUserPwd(String userPwd) {this.userPwd = userPwd;}
}

三 . 构建功能模型

数据模型构建完,要开始搭建功能模型,我们首先编写功能接口,该接口中存放用户可以实现的功能名,具体代码如下:

package com.my.dao;//定义功能import com.my.entity.Users;public interface UsersDao {//登录功能Users login(String userName, String userPwd);
}

完成功能接口后,我们要在Impl文件中对接口进行实现,重写接口中的方法,具体代码如下:

package com.my.dao.Impl;import com.my.dao.UsersDao;
import com.my.entity.Users;
import com.my.until.DBUntil;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class UsersDaoImpl extends DBUntil implements UsersDao {private Connection conn = null;private PreparedStatement ps = null;private ResultSet rs = null;//编写登录功能@Overridepublic Users login(String userName, String userPwd) {Users user = null;//获取链接,注册驱动conn = getConn();  //工具包中关于数据库链接的方法//编写sql语句String sql = "select userName,userPwd from Users where userName = ?";try {//把sql语句发送到数据库中ps = conn.prepareStatement(sql);//给?赋值ps.setString(1,userName);//执行sql语句rs = ps.executeQuery();//判断rs是否为空if(rs.next()){user = new Users();user.setId(rs.getInt(1));user.setUserName(rs.getString(2));user.setUserPwd(rs.getString(3));}} catch (SQLException e) {e.printStackTrace();}return user;}
}

四.编写客户端jsp文件

<%--Created by IntelliJ IDEA.User: dellDate: 2022/11/17Time: 17:31To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
登录页面

欢迎登录


账号:

密码:

效果:

五 . 编写控制端Servlet

我们上面编写的jsp页面目前是无法实现功能的,下面将通过Servlet的编写让实现登录

编写Servlet实现登录功能,主要分为五大步,其余的就是在这五步中进行拓展

第一步.先注册servlet

用servlet注册完毕,才真正将我们的user类创建完毕,注册Servlet有两种方式,一种是通过注解@WebServlet,另一种则是更改配置文件web.xml

第二步.设置请求字符集编码格式(“utf-8”)

第三步.获取请求参数

第四步.调取功能模型中的功能(这里调用的是登录login功能)

注意:在调用功能时,要在最开头创建功能模型对象

第五步.返回响应

响应分为两种状态:

1.成功状态:将请求信息保存到session作用域中(目的:在浏览器关闭之前,信息都可以一直使用)

2.失败状态:采用重定向,返回页面

以下附详细代码注释:

package com.my.servlet;import com.my.dao.Impl.UsersDaoImpl;
import com.my.dao.UsersDao;
import com.my.entity.Users;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;//注册Servlet,注册完Servlet才是真正创建了User类
@WebServlet("/UsersServlet")public class UsersServlet extends HttpServlet {//创建功能模型对象UsersDao m = new UsersDaoImpl();//重写方法@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置字符集编码格式req.setCharacterEncoding("utf-8");//获取请求参数String action = req.getParameter("action");//判断action值if("login".equals(action)){ //登录//获取参数String user = req.getParameter("user");String password = req.getParameter("password");//调用登录功能Users auser = m.login(user, password);//返回响应:有两种状态,成功/失败if(auser!=null){//登录成功//将信息保存到session作用域中(目的:在浏览器关闭之前,信息都可以一直被保存)req.getSession().setAttribute("auser",auser);req.getRequestDispatcher("/success.jsp").forward(req,resp);System.out.println("登录成功!");}else{//重定向返回登录页面resp.sendRedirect("/index.jsp");System.out.println("登录失败,请检查账号密码!");}}}
}

到这里,我们最简单的登录功能已经实现,但是我们可以对此进行拓展,比如登录成功可以记住密码,实现自动登录等.......下面,我们实现记住密码和自动登录两个功能

由于我们之前已经将数据模型和功能模型搭建好了,后面我们在添加功能时就不用再重复搭建,直接编写功能,修改jsp页面即可

注:这里我们的记住密码和自动登录属于登录功能,无需在功能模型中添加,只修改jsp,servlet代码

我们对servlet代码进行补充,详细注释见代码:

package com.my.servlet;import com.my.dao.Impl.UsersDaoImpl;
import com.my.dao.UsersDao;
import com.my.entity.Users;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;//注册Servlet,注册完Servlet才是真正创建了User类
@WebServlet("/UsersServlet")public class UsersServlet extends HttpServlet {//创建功能模型对象UsersDao m = new UsersDaoImpl();//重写方法@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置字符集编码格式req.setCharacterEncoding("utf-8");//获取请求参数String action = req.getParameter("action");//判断action值if("login".equals(action)){//登录//获取请求参数:String user =req.getParameter("user");String password = req.getParameter("password");String jiZhu = req.getParameter("jiZhu");String auto = req.getParameter("auto");//先执行登录Users auser = m.login(user,password);//判断登录是否成功!if (auser != null){//登录成功//把信息保存会话级作用域:req.getSession().setAttribute("auser",auser);//判断是否记住密码://记住账号密码和记住密码Cookie user_cookie = new Cookie("user",user);Cookie password_cookie = new Cookie("password",password);Cookie jiZhu_cookie = new Cookie("jiZhu",jiZhu);Cookie auto_cookie = new Cookie("auto",auto);if("1".equals(jiZhu)){//记住密码//判断是否自动登录:if("1".equals(auto)){auto_cookie.setMaxAge(60*60);}//设置记住密码的时间user_cookie.setMaxAge(60*60);password_cookie.setMaxAge(60*60);jiZhu_cookie.setMaxAge(60*60);}else{//忘记密码//设置记住密码的时间user_cookie.setMaxAge(0);password_cookie.setMaxAge(0);jiZhu_cookie.setMaxAge(0);auto_cookie.setMaxAge(0);}//把记住密码添加到响应当中resp.addCookie(user_cookie);resp.addCookie(password_cookie);resp.addCookie(jiZhu_cookie);resp.addCookie(auto_cookie);//请求转发到成功页面!!!req.getRequestDispatcher("/success.jsp").forward(req,resp);System.out.println("登录成功!");}else{//重定向返回登录页面resp.sendRedirect("/index.jsp");System.out.println("登录失败,请检查账号密码!");}}}
}

我们编写客户端jsp页面,引入c标签库,对存放在请求域中的数据进行操作

具体代码和注释如下:

<%--Created by IntelliJ IDEA.User: dellDate: 2022/11/17Time: 17:31To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

登录页面


欢迎登录


账号:

密码:

checked >记住密码自动登录<%-- 自动登录 --%>

到此为止,我们的登录功能就编写完毕

下一节我们将介绍分页功能,通过分页来展示用户列表

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
米色大衣搭配 米色大衣搭配欣赏 这个冬季,我听到最多的话,就是大衣烂大街。对此,我不苟同。大衣作为一件冬季必不可少的经典单品,它的时...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
李世民有几个儿子 李世民最疼爱... 大家都知道,唐太宗李世民,是我国历史上一位伟大的帝王,文治武功、无人能及,既是将中原神州治理的路不拾...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...