java+servlet+mysql实现用户登录、注册、查询、修改密码、注销功能
一 整个系统的结构图
首先确认登录系统的框架如下
注册可以是和登录同级的,注册功能比较单一所有主要重心放在登录页面上
登录成功将添加Session可用于后续获取是否登录状态从而进行拦截等操作,注销则删除Session删除数据库中的数据,查询则需要用到jstl和el表达式打印在页面上,而注销需要在数据库增加用户输入的数据
二 准备工作
1.需要用到的工具
注意:这里所有包都要放入web文件的WEB-INF里面
2.需要工作
封装好JDBC
配置Tomucat服务器
创建MySql数据库、表
三 实现步骤
1.JSP页面编写
首先写出首页,即登录页面,使用form标签编写表单获取用户输入的数据,action即该表单映射的servlet文件,通俗来说例如:servlet文件写了/a,jsp文件中的表单也写了/a则这个servlet可以编写一些代码来操控jsp,method则是返回的方法,如我这里是post,那我们就可以在servlet中的dopost方法获取表单的数据或编写某些程序,如果没有声明则会默认在doget方法。
按钮中的type:"submit"意思是提交表单,则是运行所映射的servlet文件,而注册的跳转则是使用a标签,因为注册页面是可以和登录同级,并不需要做拦截之类的操作。
接下来就是登录失败的页面
至于登录成功的页面,要实现以上修改密码、查询用户、注销的分支操作
这里所映射的路径为 “/true” ,登录成功嘛顾名思义就是true,统一返回post,提交按钮要设置一个名字,因为这三个操作是同级的所有起同样的名字,但是要给他们设置不一样的值可以供servlet判断,从而进行不同的操作,就像人可以有相同的名字但是不能有同样的身份证
2.servlet的编写
首先要注册servlet即 @WebServlet(JSP所映射的路径),然后继承HttpServlet,如下:
@WebServlet("/login") public class login extends HttpServlet { } 123
然后点击快捷键 Ctrl+O重写继承下来的doGet和doPost方法
注意:要删除父类的方法,即super
@WebServlet("/login") public class login extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp);//删除此行 } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp);//删除此行 } } 123456789101112
然后在doPost方法中使用封装好的JDBC类,这里要用try–catch语句抛出异常
try { Connection connection= jdbclib.getConnection(); Statement statement=jdbclib.getStatement(connection); ResultSet resultSet=jdbclib.resultSet(statement); //方法里面有查询功能 //封装的jdbc代码 while (resultSet.next()){ String u= resultSet.getString("userid"); String p= resultSet.getString("userpa"); //这里的userid和userpa是数据库里面的字段名 } jdbclib.Close(resultSet,statement,connection); //关闭数据库,释放内存 } catch (ClassNotFoundException e) { throw new RuntimeException(e); } catch (SQLException e) { throw new RuntimeException(e); }
123456789101112131415161718获取用户输入的数据,核心代码
String us= req.getParameter("uu"); String pa= req.getParameter("pp"); //获取用户输入的数据(账号,密码) 123
注意是getParameter不是getAttribute,很多人会搞错
既然能获取用户输入的数据那接下来就可以独自创作,我这里是创建一个HashMap集合存储数据库里面的数据,用于和用户输入的数据进行比较若是账号密码都符合就设置Session值(用于进行拦截,判断用户状态等功能), 随之跳转到登录成功页面
以下是doPost方法的代码
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String us= req.getParameter("uu"); String pa= req.getParameter("pp"); //获取用户输入的数据(账号,密码) HashMap<String,String>hashMap=new HashMap<>(); //创建一个hashmap集合存储数据库里面的数据 try { Connection connection= jdbclib.getConnection(); Statement statement=jdbclib.getStatement(connection); ResultSet resultSet=jdbclib.resultSet(statement); //封装的jdbc代码 while (resultSet.next()){ String u= resultSet.getString("userid"); String p= resultSet.getString("userpa"); hashMap.put(u,p); //while循环将数据放入hashmap集合 } jdbclib.Close(resultSet,statement,connection); //关闭数据库,释放内存 } catch (ClassNotFoundException e) { throw new RuntimeException(e); } catch (SQLException e) { throw new RuntimeException(e); } //以下判断账号密码是否正确,跳转页面 if (us.length()>0&&us.length()<6&&pa.length()>0&&pa.length()<6) { if (hashMap.containsKey(us)) { if (hashMap.get(us).equals(pa)) { req.getSession().setAttribute("Suserid",us); req.getSession().setAttribute("Spassword",pa); //设置Session值 req.getSession().setAttribute("founduser",hashMap.keySet()); req.getRequestDispatcher("/JSP/win.jsp").forward(req, resp); } else { req.getRequestDispatcher("/JSP/lost.jsp").forward(req, resp); } } else { req.getRequestDispatcher("/JSP/lost.jsp").forward(req, resp); } }else { req.getRequestDispatcher("/JSP/notsystem.jsp").forward(req,resp); } }
12345678910111213141516171819202122232425262728293031323334353637383940414243444546实现跳转的核心代码
req.getRequestDispatcher("要跳转的文件路径").forward(req,resp); 1
接下来就是编写以上jsp所映射的/true的servlet类(登录成功页面)按照以上的方法注册servlet和继承重写,该类所映射的路径为上面Jsp里面的/ture,在Post里面判断用户点击的是哪个按钮,从而跳转相对应的页面
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String a= req.getParameter("x"); if (a.equals("1")){ req.getRequestDispatcher("/JSP/signOut.jsp").forward(req,resp); } if (a.equals("2")){ req.getRequestDispatcher("/JSP/founduser.jsp").forward(req,resp); } if (a.equals("3")){ req.getRequestDispatcher("/JSP/setpa.jsp").forward(req,resp); } } 12345678910111213
这里获取的是jsp里面按钮的value值,然后进行判断,接下来的功能就是JDBC的增删改查
3.用户查询功能(这里需要用到jstl和el表达式)
这个功能需要把所有用户循环输出给用户
首先在jsp文件里面顶处输入
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 1
来声明引用jstl用for循环打印数据,body里面的代码为
<body> <c:forEach var="a" items="${sessionScope.founduser}"> <h2>${a}</h2> <br> </c:forEach> </body> 123456
此处的$符号则是引用el表达式,sessionScope即是获取上级的Session
4.如何实现拦截,什么是拦截?
1.什么是拦截?拦截就是为了不让用户通过直接输入访问的方式直接访问如登录成功等类似的页面,比如用户还没有登录就直接访问登录成功的页面从而使用登录后才有的功能,因此则需要在用户访问的时候进行拦截
2.如何实现拦截直接访问没有声明返回的方法是post,则默认使用doget方法,因此需要在doget方法里面编写拦截器,说白了就是在登录成功的时候添加Session,然后在doget方法判断Session是否为空,如果为空则拦截用户,不让用户访问,代码如下:
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if (req.getSession().getAttribute("Suserid")==null||req.getSession().getAttribute("Spassword")==null){ req.getRequestDispatcher("/JSP/lost.jsp").forward(req,resp); }else { req.getRequestDispatcher("/JSP/win.jsp").forward(req,resp); } } 12345678
这里是拦截的话直接跳转登录失败页面
四 完结撒花
原理都懂了,接下来由自己自由发挥
祝各位在厨艺上添砖Java
相关知识
mysql8.0修改root用户密码
基于SSM框架的网上花店管理系统设计与实现【项目源码+数据库+毕设论文+讲解视频】
网上花店系统需求规格:注册、查询、订购与管理
用户登录界面设计代码html
網上花店电子商务网站的设计与实现.doc
MVC 网上花店销售系统的设计与实现java jsp 程序设计 课程设计 毕业设计
基于SSM的花店管理设计与实现
基于SSM技术的鲜花销售管理系统设计与实现
基于Java Web的网上花店管理系统的设计与实现——LW模板
基于php花店订购管理系统设计与实现(源码+lw+部署文档+讲解等)
网址: java+servlet+mysql实现用户登录、注册、查询、修改密码、注销功能 https://www.huajiangbk.com/newsview948775.html
上一篇: 【HTML+CSS+JS】登录注 |
下一篇: UML设计系列(3):时序图 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039