当前位置:   article > 正文

JavaWeb个人博客项目:手把手教你实现博客后台系统之登录与注册模块4_利用java制作博客网站注册,登录

利用java制作博客网站注册,登录

后台系统的所有界面图以及之前的准备工作欢迎看我之前的博文>3<

有任何问题欢迎下方评论=W=

一、图片效果

①项目目录图1与图2

②登录模块图

③注册模块图


二、设置字符集过滤器

①Java Resources的src-->建立package,命名为filter-->创建一个DoFilter的java文件,具体代码如下

(PS.这个过滤器我也是仿照csdn一个老哥的做的,在此感谢这位老哥>3<)

DoFilter.java文件:

  1. package filter;
  2. import java.io.IOException;
  3. import javax.servlet.Filter;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. public class DoFilter implements Filter {
  10. public DoFilter(){
  11. System.out.println("过滤器构造");
  12. }
  13. public void destroy() {
  14. System.out.println("过滤器销毁");
  15. }
  16. public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
  17. request.setCharacterEncoding("utf-8"); //将编码改为utf-8
  18. response.setContentType("text/html;charset=utf-8");
  19. chain.doFilter(request, response);
  20. }
  21. public void init(FilterConfig arg0) throws ServletException {
  22. System.out.println("过滤器初始化");
  23. }
  24. }

②在WebContent-->WEB-INF-->web.xml中,设置如下内容

web.xml文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  3. <display-name>MyBlog</display-name>
  4. <filter>
  5. <filter-name>Dofilter</filter-name>
  6. <filter-class>filter.DoFilter</filter-class>
  7. </filter>
  8. <filter-mapping>
  9. <filter-name>Dofilter</filter-name>
  10. <url-pattern>/*</url-pattern>
  11. </filter-mapping>
  12. <!-- 欢迎页,即进入项目的第一个界面 -->
  13. <welcome-file-list>
  14. <welcome-file>login.jsp</welcome-file>
  15. </welcome-file-list>
  16. </web-app>

三、EL与JSTL表达式

①先载入JSTL的Jar包,在项目右键BuildPath-->Configure Build Path的Libraries里-->Add Jars-->选择目标Jar包

②为确保载入Jar包成功,应该在WebContent-->WEB-INF-->lib的文件夹中查看是否有如下内容,这次用的便是有jstl前缀的jar包

③在WebContent-->新建一个jsp文件,取名为base.jsp-->写入如下内容

(关于layui、bootstrap等框架资源百度即可,按照目录结构放入其中)

base.jsp文件:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  4. <c:set var="ctx" value="${pageContext.request.contextPath}"></c:set>
  5. <link rel="stylesheet" href="${ctx }/js/layui/css/layui.css">
  6. <script src="${ctx }/js/jquery-3.2.1.min.js"></script>
  7. <script src="${ctx }/js/layui/layui.js"></script>
  8. <script src="${ctx}/js/bootstrap/js/bootstrap.min.js"></script>

四、登录模块

①逻辑分析(以下为我画的管理员登录业务流程图)

 

②详细的数据库之前的博文已经写了,为了更好阅读这里再写一次

建数据库,命名为blog-->建表,命名为dai_adm,设计表的字段如下

属性名

类型

长度

允许空

是否主键

说明

adm_id

tinyint

4

NOT NULL

主键

管理员id、自增

adm_name

varchar

20

NOT NULL

 

管理员名称

adm_password

varchar

20

NOT NULL

 

管理员密码

 

③既然是登录,自然要与数据库进行对接,这里我使用的是mysql数据库,要求要加载好mysql的jar包,步骤同之前JSTL的Jar包设置步骤

  3.1 在Java Resources的src下-->新建package,命名为util-->新建一个config.properties文件,内容如下

(由于我mysql是接入3306端口,数据库连接时使用的用户名是root,没有设置密码,所以这么设置,如果你有密码,pwd=你的密码)

config.properties文件:

  1. driverClass=com.mysql.jdbc.Driver
  2. url=jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=utf-8&useSSL=false
  3. #mysql username
  4. user=root
  5. #mysql password
  6. pwd=

  3.2 在Java Resources的src下-->util包中-->新建一个class文件,命名为DBUtil,代码如下

DBUtil.java文件:

  1. package util;
  2. import java.io.InputStream;
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.SQLException;
  6. import java.util.Properties;
  7. public class DBUtil {
  8. private static String driverClass;
  9. private static String url;
  10. private static String user;
  11. private static String pwd;
  12. //static block静态块
  13. static{
  14. //产生properties类的实例
  15. Properties prop = new Properties();
  16. //转换成文件流
  17. InputStream is = DBUtil.class.getClassLoader().getResourceAsStream("util/config.properties");
  18. try {
  19. prop.load(is);
  20. driverClass = prop.getProperty("driverClass").trim();
  21. url = prop.getProperty("url").trim();
  22. user = prop.getProperty("user").trim();
  23. pwd = prop.getProperty("pwd").trim();
  24. Class.forName(driverClass);
  25. //当前类的位置
  26. System.out.println(DBUtil.class.getResource(""));
  27. //当前类的根目录的位置
  28. System.out.println(DBUtil.class.getClassLoader().getResource(""));
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. }
  32. }
  33. public static Connection getConnection(){
  34. // 数据库的连接
  35. Connection conn = null;
  36. try {
  37. conn = DriverManager.getConnection(url, user,pwd);
  38. } catch (SQLException e) {
  39. e.printStackTrace();
  40. }
  41. return conn;
  42. }
  43. public static void closeConnection(Connection conn) throws SQLException {
  44. conn.close();
  45. }
  46. }

④这个项目使用了MVC结构,登录模块也就是对管理员进行操作,这里先写pojo层,再写dao层

  4.1 在src中-->新建一个package,命名为pojo-->新建一个class文件,命名为Adm,内容如下

Adm.java文件:

  1. package pojo;
  2. public class Adm{
  3. private Integer adm_id;
  4. private String adm_name;
  5. private String adm_password;
  6. public Integer getAdm_id() {
  7. return adm_id;
  8. }
  9. public void setAdm_id(Integer adm_id) {
  10. this.adm_id = adm_id;
  11. }
  12. public String getAdm_name() {
  13. return adm_name;
  14. }
  15. public void setAdm_name(String adm_name) {
  16. this.adm_name = adm_name;
  17. }
  18. public String getAdm_passward() {
  19. return adm_password;
  20. }
  21. public void setAdm_passward(String adm_password) {
  22. this.adm_password = adm_password;
  23. }
  24. }

   4.2 由于后来要做分页功能,所以还要封装一个类-->pojo包中-->新建一个class,命名为ChangePage,内容如下

ChangePage.java文件:

  1. package pojo;
  2. public class ChangePage {
  3. private int page; //默认第一页
  4. private int limit; //默认一页10条数据
  5. private int startRow = (page-1)*limit;//mysql里语句随之发生改变
  6. private String sort;//排序字段
  7. private String order;//排序关键字
  8. public int getPage() {
  9. return page;
  10. }
  11. public void setPage(int page) {
  12. this.page = page;
  13. }
  14. public int getLimit() {
  15. return limit;
  16. }
  17. public void setLimit(int limit) {
  18. this.limit = limit;
  19. }
  20. public int getStartRow() {
  21. return (page-1)*limit;
  22. }
  23. public void setStartRow(int startRow) {
  24. this.startRow = startRow;
  25. }
  26. public String getSort() {
  27. return sort;
  28. }
  29. public void setSort(String sort) {
  30. this.sort = sort;
  31. }
  32. public String getOrder() {
  33. return order;
  34. }
  35. public void setOrder(String order) {
  36. this.order = order;
  37. }
  38. }

 4.3 在src中-->新建一个package,命名为dao-->新建一个interface文件,命名为AdmDao,内容如下

AdmDao.java文件:

  1. package dao;
  2. import java.util.ArrayList;
  3. import pojo.Adm;
  4. public interface AdmDao {
  5. //1.查询管理员,返回一个管理员类型 这是login里头的方法
  6. public Adm getAdm(String username,String password);
  7. //2查询所有的管理员
  8. public ArrayList<Adm> getAllAdm();
  9. //3.添加管理员
  10. public boolean insertAdm(String username,String pwd);
  11. //4.根据id删除管理员
  12. public boolean deleteAdm(int id);
  13. //5.修改管理员信息
  14. public boolean updateAdm(Adm a);
  15. //6.根据adm_name查询是否存在该用户,即id唯一,用户名唯一
  16. public boolean queryIsExist(String username);
  17. //7.根据id,查询一个管理员
  18. public Adm getOneAdm(int adm_id);
  19. //8 分页查询所有的管理员
  20. public ArrayList<Adm> getPageAdm(int page,int limit);
  21. }

4.4 写AdmDao的实现类,本应该放在不同的包里,我当时为了简便,依然放在了dao包

dao包-->新建class文件,命名为AdmDaoImpl-->实现AdmDao接口,代码如下

AdmDaoImpl.java文件:

  1. package dao;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.util.ArrayList;
  7. import pojo.Adm;
  8. import pojo.ChangePage;
  9. import util.DBUtil;
  10. public class AdmDaoImpl implements AdmDao {
  11. // 分页方法
  12. @Override
  13. public ArrayList<Adm> getPageAdm(int page, int limit) {
  14. ArrayList<Adm> adm = new ArrayList<Adm>();
  15. Connection conn = DBUtil.getConnection();
  16. ChangePage cp = new ChangePage();
  17. cp.setLimit(limit);
  18. cp.setPage(page);
  19. int startRow = cp.getStartRow();
  20. String sql = "select * from dai_adm limit " + startRow + "," + limit + "";
  21. // 预编译
  22. try {
  23. PreparedStatement prep = conn.prepareStatement(sql);
  24. ResultSet rst = prep.executeQuery();
  25. while (rst.next()) {
  26. Adm ad = new Adm();
  27. ad.setAdm_id(rst.getInt(1));
  28. ad.setAdm_name(rst.getString("adm_name"));
  29. ad.setAdm_passward(rst.getString("adm_password"));
  30. adm.add(ad);
  31. }
  32. } catch (SQLException e) {
  33. e.printStackTrace();
  34. } finally {
  35. try {
  36. DBUtil.closeConnection(conn);
  37. } catch (SQLException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. return adm;
  42. }
  43. // 查询所有的管理员
  44. @Override
  45. public ArrayList<Adm> getAllAdm() {
  46. ArrayList<Adm> adm = new ArrayList<Adm>();
  47. Connection conn = DBUtil.getConnection();
  48. // 在数据库中添加记录
  49. String sql = "select * from dai_adm";
  50. // 预编译
  51. try {
  52. PreparedStatement prep = conn.prepareStatement(sql);
  53. ResultSet rst = prep.executeQuery();
  54. while (rst.next()) {
  55. Adm ad = new Adm();
  56. ad.setAdm_id(rst.getInt(1));
  57. ad.setAdm_name(rst.getString("adm_name"));
  58. ad.setAdm_passward(rst.getString("adm_password"));
  59. adm.add(ad);
  60. }
  61. } catch (SQLException e) {
  62. e.printStackTrace();
  63. } finally {
  64. try {
  65. DBUtil.closeConnection(conn);
  66. } catch (SQLException e) {
  67. e.printStackTrace();
  68. }
  69. }
  70. return adm;
  71. }
  72. @Override
  73. public Adm getAdm(String username, String password) {
  74. Adm a = null;
  75. Connection conn = DBUtil.getConnection();
  76. String sql = "select * from dai_adm where adm_name = ? and adm_password = ?";
  77. // 预编译
  78. PreparedStatement prep;
  79. try {
  80. prep = conn.prepareStatement(sql);
  81. prep.setString(1, username);
  82. prep.setString(2, password);
  83. ResultSet rst = prep.executeQuery();
  84. if (rst.next()) {
  85. System.out.println("啊啊啊,我是servlet,我已经查到信息了!!!");
  86. a = new Adm();
  87. a.setAdm_id(rst.getInt("adm_id"));
  88. a.setAdm_name(rst.getString("adm_name"));
  89. a.setAdm_passward(rst.getString("adm_password"));
  90. return a;
  91. } else {
  92. // System.out.println(username+","+password);
  93. }
  94. } catch (Exception e) {
  95. e.printStackTrace();
  96. } finally {
  97. try {
  98. DBUtil.closeConnection(conn);
  99. } catch (SQLException e) {
  100. e.printStackTrace();
  101. }
  102. }
  103. return a;
  104. }
  105. // 3.添加管理员
  106. @Override
  107. public boolean insertAdm(String username, String pwd) {
  108. Connection conn = DBUtil.getConnection();
  109. // 在数据库中添加记录
  110. String sql = "insert into dai_adm(adm_name,adm_password) values(?,?)";
  111. // 预编译
  112. PreparedStatement prep;
  113. try {
  114. prep = conn.prepareStatement(sql);
  115. prep.setString(1, username);
  116. prep.setString(2, pwd);
  117. prep.executeUpdate();
  118. return true;
  119. } catch (SQLException e) {
  120. e.printStackTrace();
  121. return false;
  122. } finally {
  123. try {
  124. DBUtil.closeConnection(conn);
  125. } catch (SQLException e) {
  126. e.printStackTrace();
  127. }
  128. }
  129. }
  130. @Override
  131. public boolean deleteAdm(int adm_id) {
  132. Connection conn = DBUtil.getConnection();
  133. // 在数据库中删除记录
  134. String sql = "delete from dai_adm where adm_id = ?";
  135. // 预编译
  136. PreparedStatement prep;
  137. try {
  138. prep = conn.prepareStatement(sql);
  139. prep.setInt(1, adm_id);
  140. prep.executeUpdate();
  141. return true;
  142. } catch (SQLException e) {
  143. e.printStackTrace();
  144. return false;
  145. } finally {
  146. try {
  147. DBUtil.closeConnection(conn);
  148. } catch (SQLException e) {
  149. e.printStackTrace();
  150. }
  151. }
  152. }
  153. @Override
  154. public boolean updateAdm(Adm a) {
  155. Connection conn = DBUtil.getConnection();
  156. // 在数据库中修改记录
  157. String sql = "update dai_adm set adm_name = ?,adm_password = ? where adm_id=?";
  158. // 预编译
  159. PreparedStatement prep;
  160. try {
  161. prep = conn.prepareStatement(sql);
  162. prep.setString(1, a.getAdm_name());
  163. prep.setString(2, a.getAdm_passward());
  164. prep.setInt(3, a.getAdm_id());
  165. prep.executeUpdate();
  166. return true;
  167. } catch (SQLException e) {
  168. e.printStackTrace();
  169. return false;
  170. } finally {
  171. try {
  172. DBUtil.closeConnection(conn);
  173. } catch (SQLException e) {
  174. e.printStackTrace();
  175. }
  176. }
  177. }
  178. @Override
  179. public boolean queryIsExist(String username) {
  180. Connection conn = DBUtil.getConnection();
  181. // 在数据库中查询记录
  182. String sql = "select * from dai_adm where adm_name = ?";
  183. // 预编译
  184. PreparedStatement prep;
  185. try {
  186. prep = conn.prepareStatement(sql);
  187. prep.setString(1, username);
  188. ResultSet rst = prep.executeQuery();
  189. if (rst.next()) {
  190. return true;
  191. } else {
  192. return false;
  193. }
  194. } catch (SQLException e) {
  195. e.printStackTrace();
  196. } finally {
  197. try {
  198. DBUtil.closeConnection(conn);
  199. } catch (SQLException e) {
  200. e.printStackTrace();
  201. }
  202. }
  203. return false;
  204. }
  205. @Override
  206. public Adm getOneAdm(int adm_id) {
  207. Adm a = null;
  208. Connection conn = DBUtil.getConnection();
  209. // 在数据库中修改记录
  210. String sql = "select * from dai_adm where adm_id = ?";
  211. // 预编译
  212. PreparedStatement prep;
  213. try {
  214. prep = conn.prepareStatement(sql);
  215. prep.setInt(1, adm_id);
  216. ResultSet rst = prep.executeQuery();
  217. a = new Adm();
  218. if (rst.next()) {
  219. a.setAdm_id(rst.getInt(1));
  220. a.setAdm_name(rst.getString("adm_name"));
  221. a.setAdm_passward(rst.getString("adm_password"));
  222. return a;
  223. }
  224. } catch (Exception e) {
  225. e.printStackTrace();
  226. } finally {
  227. try {
  228. DBUtil.closeConnection(conn);
  229. } catch (SQLException e) {
  230. e.printStackTrace();
  231. }
  232. }
  233. return a;
  234. }
  235. }

      PS:这里有一个方法叫做getAllAdm(),还有一个方法叫做getPageAdm()。

      前者我是用来获得总共有多少条管理员信息,后者我是用来获得分页信息与分页数据的,前者本来不需要在数据库上走那么多步骤。

      因为ResultSet创建的对象可以使用last()方法跳到最后一条数据,然后再使用getRow()方法获得总数,这里建议大家按照这种方法。

 

⑤Service层:src-->新建package包,命名为servlet-->新建一个Servlet文件,命名为LoginServlet-->在URL mappings中改名为/login-->键入代码,如下

LoginServlet.java文件:

  1. package servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import dao.AdmDao;
  10. import dao.AdmDaoImpl;
  11. import pojo.Adm;
  12. /**
  13. * Servlet implementation class LoginServlet
  14. WebServlet里的/login就是刚刚改的URL Mappings的内容
  15. */
  16. @WebServlet("/login")
  17. public class LoginServlet extends HttpServlet {
  18. private static final long serialVersionUID = 1L;
  19. /**
  20. * @see HttpServlet#HttpServlet()
  21. */
  22. public LoginServlet() {
  23. super();
  24. // TODO Auto-generated constructor stub
  25. }
  26. /**
  27. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  28. * void getSession()方法相当于得到一个session对象,而void setAttribute()和String Attribute分别是对属性赋值和得到属性值的方法。
  29. */
  30. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  31. //response.getWriter().append("Served at: ").append(request.getContextPath());
  32. request.setCharacterEncoding("utf-8");
  33. response.setContentType("text/html;charset=utf-8");
  34. PrintWriter out = response.getWriter();
  35. String name = request.getParameter("username");
  36. String pwd = request.getParameter("pwd");
  37. AdmDao a = new AdmDaoImpl();
  38. Adm adm = a.getAdm(name , pwd);
  39. System.out.println(a.toString());
  40. if(adm!=null) {
  41. request.getSession().setAttribute("admin",adm);
  42. //重定向到成功页面
  43. response.sendRedirect("index.jsp");
  44. }else {
  45. //out.println("啊啊啊,我应该转发到失败的界面了");
  46. request.setAttribute("errMsg", "账号或密码错误,请重新输入信息!");
  47. //转发到login界面
  48. request.getRequestDispatcher("login.jsp").forward(request, response);
  49. return;
  50. }
  51. }
  52. /**
  53. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  54. */
  55. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  56. // TODO Auto-generated method stub
  57. doGet(request, response);
  58. }
  59. }

⑥WebContent-->新建jsp文件,命名为login.jsp-->键入代码,如下(使用了bootstrap和layui框架)

login.jsp文件:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <link rel="stylesheet" href="./js/bootstrap/css/bootstrap.min.css">
  8. <link rel="stylesheet" href="./css/b_register.css">
  9. <%@include file="base.jsp"%>
  10. <title>登录</title>
  11. </head>
  12. <body>
  13. <%
  14. String errorMsg = (String) request.getAttribute("errMsg");
  15. if (errorMsg == null) {
  16. errorMsg = "";
  17. }
  18. %>
  19. <div id="box">
  20. <!-- action="${ctx}/login" -->
  21. <form id="myform" method="post" action="${ctx}/login">
  22. <div class="form-group">
  23. <label for="username">用户名</label> <input type="text"
  24. class="form-control" id="username" name="username"
  25. placeholder="请输入用户名:"> <span id="tip"
  26. style="color: red; margin-top: 20px;"><%=errorMsg%></span>
  27. </div>
  28. <div class="form-group">
  29. <label for="pwd">密码</label> <input type="password"
  30. class="form-control" id="pwd" name="pwd" placeholder="请输入密码:">
  31. </div>
  32. <button type="submit" class="btn btn-default btn_" id="btn">确定</button>
  33. <span style="margin-left: 250px;"></span> <a href="register.jsp"><button
  34. type="button" class="btn btn-default btn_">注册</button></a>
  35. </form>
  36. </div>
  37. <script type="text/javascript">
  38. layui.use([ 'layer' ], function() {
  39. layui.use([ 'form' ], function() {
  40. var form = layui.form;
  41. });
  42. // 点击提交执行的内容
  43. $('#username').blur(function() {
  44. //或者取长度
  45. if ($("#username").val() == "") {
  46. layer.msg("用户名不能输入为空哦!", {
  47. icon : 2
  48. });
  49. return;
  50. }
  51. });
  52. //点击提交,表单验证
  53. $('#btn').click(function() {
  54. if ($("#pwd").val() === "") {
  55. layer.msg("密码不能输入为空哦!", {
  56. icon : 2
  57. });
  58. return;
  59. }
  60. });
  61. });
  62. </script>
  63. </body>
  64. </html>

5.1 这里CSS目录如下(CSS并不重要,可以自己调整)

5.2 b_register的css样式如下

b_register.css文件:

  1. @CHARSET "UTF-8";
  2. *{
  3. margin:0;
  4. padding:0;
  5. }
  6. body{
  7. background:url("./image/19.jpg") no-repeat;
  8. }
  9. #box{
  10. width:520px;
  11. height:400px;
  12. margin:200px auto;
  13. border-radius:20px;
  14. background-color: rgba(0, 0, 0, 0.3);
  15. box-shadow:1px 2px 5px black;
  16. padding: 1px;
  17. position:relative;
  18. background-image: url(./image/18.gif);
  19. opacity: 0.8;
  20. }
  21. #myform{
  22. margin:30px;
  23. }
  24. span{
  25. margin-left:100px;
  26. }
  27. .btn_{
  28. color:tomato;
  29. margin-top:30px;
  30. }

5.3 base的css样式如下

base.css文件:

  1. @charset "UTF-8";
  2. body {
  3. width: 100%;
  4. height: 100%;
  5. background: url('../css/image/18.gif');
  6. overflow: hidden;
  7. }
  8. #box {
  9. height:550px;
  10. display:flex;
  11. align-items:center;
  12. justify-content:center;
  13. align-content:center;
  14. }

⑤当输入用户名或密码错误时,应该有的提示

⑥当输入密码正确时,应进入后台主界面,这里大家在WebContent里新建一个jsp文件,取名为index即可,这里放一张后台图,具体的下篇博文再更


五、注册模块 

①逻辑分析(以下为我画的管理员注册业务流程图,注册成功即自动跳转登录页面)

②Service层:这里主要就是首先判断你是否输入用户名,用户名输入过后判断是否这个用户名已经存在(用户名和id都是唯一的),然后再验证你两次密码是否相同,最后再进入注册。

所以说前台可以判断1是是否输入2是密码两次是否一致

后台连接数据库后应该是进行了两个操作1是判断用户名是否存在2是进行往数据库里增加数据

 

2.1 src-->在servlet包里-->新建一个Servlet文件,命名为RegisterServlet-->在URL mappings中改名为/register-->键入代码,如下

RegisterServlet.java文件:

  1. package servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import dao.AdmDao;
  10. import dao.AdmDaoImpl;
  11. /**
  12. * Servlet implementation class RegisterServlet
  13. WebServlet里的/register就是刚刚改的URL Mappings的内容
  14. */
  15. @WebServlet("/register")
  16. public class RegisterServlet extends HttpServlet {
  17. private static final long serialVersionUID = 1L;
  18. /**
  19. * @see HttpServlet#HttpServlet()
  20. */
  21. public RegisterServlet() {
  22. super();
  23. // TODO Auto-generated constructor stub
  24. }
  25. /**
  26. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  27. */
  28. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  29. String result = "false";
  30. PrintWriter writer = null;
  31. try {
  32. PrintWriter out = response.getWriter();
  33. //1.接收参数
  34. String username = request.getParameter("username");
  35. String pwd = request.getParameter("pwd");
  36. AdmDao a = new AdmDaoImpl();
  37. boolean flag= a.insertAdm(username,pwd);
  38. if(flag){
  39. result = "true";
  40. }
  41. writer = response.getWriter();
  42. writer.write(result);
  43. }catch(Exception e) {
  44. e.printStackTrace();
  45. }finally {
  46. writer.flush();
  47. writer.close();
  48. }
  49. }
  50. /**
  51. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  52. */
  53. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  54. // TODO Auto-generated method stub
  55. doGet(request, response);
  56. }
  57. }

2.2 src-->在servlet包里-->新建一个Servlet文件,命名为QueryAdmIsExist-->在URL mappings中改名为/isExist-->键入代码,如下

QueryAdmIsExist.java文件:

  1. package servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import dao.AdmDao;
  10. import dao.AdmDaoImpl;
  11. /**
  12. * Servlet implementation class QueryAdmIsExist
  13. */
  14. @WebServlet("/isExist")
  15. public class QueryAdmIsExist extends HttpServlet {
  16. private static final long serialVersionUID = 1L;
  17. /**
  18. * @see HttpServlet#HttpServlet()
  19. */
  20. public QueryAdmIsExist() {
  21. super();
  22. // TODO Auto-generated constructor stub
  23. }
  24. /**
  25. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  26. */
  27. protected void doGet(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
  28. request.setCharacterEncoding("utf-8");
  29. resp.setCharacterEncoding("utf-8");
  30. resp.setContentType("text/html;charset=utf-8");
  31. //根据姓名查询用户是否存在 改的更完善了一点
  32. String result = "false";
  33. PrintWriter writer = null;
  34. try {
  35. String username = request.getParameter("username");
  36. AdmDao a = new AdmDaoImpl();
  37. boolean flag = a.queryIsExist(username);
  38. if(flag==true) {
  39. result = "true";
  40. }
  41. writer = resp.getWriter();
  42. writer.write(result);
  43. } catch (Exception e) {
  44. e.printStackTrace();
  45. }finally {
  46. writer.flush();
  47. writer.close();
  48. }
  49. }
  50. /**
  51. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  52. */
  53. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  54. // TODO Auto-generated method stub
  55. doGet(request, response);
  56. }
  57. }

③在WebContent下-->新建jsp文件,命名为register.jsp-->键入代码,如下(这里使用的是ajax,和上面登录模块不一样,注意区别)

register.jsp文件:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <link rel="stylesheet" href="./js/bootstrap/css/bootstrap.min.css">
  8. <link rel="stylesheet" href="./css/b_register.css">
  9. <%@include file="base.jsp"%>
  10. <title>注册</title>
  11. </head>
  12. <body>
  13. <div id="box">
  14. <form id="myform" method="post">
  15. <div class="form-group">
  16. <label for="username">用户名</label>
  17. <input type="text" class="form-control" id="username" name="username" placeholder="请输入用户名:">
  18. <span id="tip" style="color:red;margin-top:20px;"></span>
  19. </div>
  20. <div class="form-group">
  21. <label for="pwd">密码</label>
  22. <input type="password" class="form-control" id="pwd" name="pwd" placeholder="请输入密码:">
  23. </div>
  24. <div class="form-group">
  25. <label for="conFirmPwd">确认密码</label>
  26. <input type="password" class="form-control" id="conFirmPwd" name="conFirmPwd" placeholder="请再次输入密码:">
  27. </div>
  28. <button type="button" class="btn btn-default btn_" id = "btn">提交</button>
  29. <span style="margin-left:250px;"></span>
  30. <a href="login.jsp"><button type="button" class="btn btn-default btn_">返回</button></a>
  31. </form>
  32. </div>
  33. </body>
  34. <script>
  35. layui.use([ 'layer' ], function() {
  36. /* alert(0); */
  37. layui.use([ 'form' ], function() {
  38. var form = layui.form;
  39. });
  40. var isOk = false;
  41. // 点击提交执行的内容
  42. $('#username').blur(function() {
  43. //或者取长度
  44. if ($("#username").val() == "") {
  45. layer.msg("不能输入为空哦!", {
  46. icon : 2
  47. });
  48. return;
  49. }else {
  50. $.post('isExist',
  51. {
  52. username : $('#username').val()
  53. },
  54. function(result) {
  55. //alert(typeof result);
  56. if(result=="true"){
  57. //alert(1);
  58. isOk = false;
  59. //利用jquery对元素设置样式
  60. $('#username').css("border", "1px solid red");
  61. //html() 设置标签之间的 内容
  62. $('#tip').html('该用户已存在');
  63. $('#tip').css("color", "red");
  64. return;
  65. }else{
  66. //alert(2);
  67. isOk = true;
  68. //利用jquery对元素设置样式
  69. $('#username').css("border", "1px solid gray");
  70. //html() 设置标签之间的 内容
  71. $('#tip').html('该用户名可用');
  72. $('#tip').css("color", "green");
  73. }
  74. }, "text");
  75. }
  76. });
  77. //点击提交,表单验证
  78. $('#btn').click(function() {
  79. if (!isOk) {
  80. return;
  81. }
  82. if($("#pwd").val() !== $("#conFirmPwd").val()){
  83. layer.msg("两次密码输入不同!",{
  84. icon : 2
  85. });
  86. return;
  87. }
  88. //提交表单
  89. $.post("register",//后台地址
  90. {
  91. username: $("#username").val(),
  92. pwd:$("#pwd").val(),
  93. },//需要提交到后台的数据
  94. function(result){
  95. //alert(typeof result);
  96. //alert(result);
  97. if (result) {
  98. //添加成功
  99. layer.msg("注册成功", {
  100. icon : 1
  101. });
  102. window.location.href = "login.jsp";
  103. }else{
  104. layer.msg("注册失败",{
  105. icon : 2
  106. });
  107. // 这里使用JQuery实现会有问题
  108. document.getElementById("myform").reset();
  109. $('#tip').html("");
  110. }
  111. },
  112. "json");
  113. //清空表单
  114. });
  115. });
  116. </script>
  117. </html>

④注册时用户名存在或可用的区别图片如下


欢迎关注我的个人微信公众号【大胖猫的马太效应】,回复关键字JavaWeb博客后台管理系统获得本后台项目所有源码噢~ 

最后有任何问题欢迎给我留言,我看到就一定会回复的>w< 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/636116
推荐阅读
相关标签
  

闽ICP备14008679号