JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5

上一篇博文介绍了注册和登录模块,未看过的人欢迎翻我之前博文~

接下来就进入登录成功后的主界面,这里主要实现主界面的基础布局管理员管理模块=w=

GitHub地址:https://github.com/DaiPanda/Blog-of-Dai

照例有任何问题欢迎下方评论>3<

一、 后台主界面

1.1  图片演示

(默认进入博文管理的博文列表界面,这里暂时不介绍博文管理模块,以后会更)

JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第1张图片

1.2 详细分析

①登录成功后,登录的用户名将会显示在右上角,譬如刚刚那张图片的“胖达”

(使用session,之前登录成功后先是将登陆的adm对象保存在session中,再进行转发的,具体代码参考上一篇博文。

    如果在index.jsp中获得对象为null,则代表未通过登录页面而是直接在地址栏中输入主页面的地址,这样会重定向到登录页面。)

图示如下:

JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第2张图片


②总的后台布局使用的是layui框架,主要是使用iframe实现页面的嵌套

(使用iframe标签,相关a标签中的target值对应iframe的name值

   图示如下:

JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第3张图片


③相关步骤如下:

第一步:通过layui的后台框架将index.jsp的大体结构搭好

第二步:对官方的后台框架进行修改,主要修改左侧导航栏的代码内容

第三步:使用iframe布局达到页面嵌套的效果,即点击不同的导航栏按钮右侧链接不同的页面

第四步:通过session判断是否经过了登录页面


1.3 目录结构

要想实现如图主界面,除了之前几篇博文写的准备工作以外,你还需要这样的目录结构

当然,之前的准备工作没有看的,建议从个人博客的第三篇博文看起

地址:https://blog.csdn.net/DaiYuMeng/article/details/104677362

JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第4张图片


1.4 详细代码

index.jsp文件:

<%@page import="pojo.Adm"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@include file="base.jsp"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>





熊猫后台
<%
	String name;
	Adm a = (Adm) request.getSession().getAttribute("admin");
	if (a == null) {
		response.sendRedirect("login.jsp");
		return;
	} else {
		name = a.getAdm_name();
	}
%>




	
	


二、管理员模块

1.1  图片演示

①管理员列表(含分页)

JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第5张图片

②编辑管理员

JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第6张图片

③删除管理员

JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第7张图片


1.2  详细分析

①管理员管理在左侧导航栏第六个管理的位置,相关具体代码在index.jsp中位置如下:

(总体代码在上方)

JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第8张图片


②listAdm.jsp是使用layui里的经典的数据表格布局,这就对他从后台传回来的数据有一定的要求,官网要求如下:

(详细介绍及扩展部分见官网:https://www.layui.com/doc/modules/table.html)

JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第9张图片


③layui的table布局中有三种渲染方法:方法渲染、自动渲染、静态表格渲染,这里使用的是方法渲染,要求如下:

cols里面各个field对应于每一列的表头,其field的值应该与后台传过来的属性变量名是一样的,这里我的命名和数据库中字段名也是一样的

(这里渲染的数据还可以使用自定义列模板templet,以后再更该用法)

JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第10张图片


④listAdm.jsp渲染数据表格时还使用了分页效果,相关步骤如下:

第一步:设置开启table的分页效果(page:true) 

第二步:servlet层获取limit(默认10)和page(默认1)参数值

第三步:通过AdmDaoImpl.java里的getPageAdm(page,limit)方法返回相关管理员每页数据,是一个ArrayList对象

第四步:通过AdmDaoImpl.java里的getAllAdm()方法返回相关管理员总数,是一个int变量

代码图示如下:

JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第11张图片


⑤前台回调数据实现管理员列表时,具体来说接收的是符合一定规则的json数据,这里我掌握了两个方法

第一个方法:(1)先使用map集合,保存相关数据格式

                      (2)再利用google的json解析包将map格式转为string格式,google的json包目录如下,没有的可以私信我

                            JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第12张图片

                      (3)然后返回给前台,ajax回调时选择json格式就会自动把其转换为json格式

                           (我使用这个方法,但我觉得这个相对下面比较复杂)


第二个方法:也是先使用map存储数据,再利用json的jar包,首先你需要如下jar包,没有的可以私信我

                     JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第13张图片

代码图示如下:

JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第14张图片


⑥listAdm.jsp使用了layui经典的弹出层效果制作编辑管理员信息,图例如下:

操作步骤:根据满足条件的事件触发执行弹出层动画,弹出层由另外的页面(editAdm.jsp)组成

JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第15张图片


⑦综上,listAdm.jsp详细步骤如下

第一步:运用方法渲染的格式,其table的id值与渲染表格的elem值要对应

图示如下:

               JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第16张图片


第二步:使用layui的数据表格table结构,在url里写入对应的数据接口(管理员列表的数据接口)

图示如下:

                  JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第17张图片


第二步:写入对应的工具条模板,就相当于操作模板,注意script的type值

图示如下:

                JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第18张图片


第三步:监听工具条,layEvent对应

举例如下:

            JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第19张图片


第四步:(1)点击某一项的编辑按钮时,它就触发监听工具条的事件,通过layEvent确定触发的是“编辑”事件

              (2)利用弹出层的content属性,走到servlet层,同时将adm_id传回去

              (3)它获取adm_id是通过data.adm_id的方法,因为之前渲染数据时数据接口返回的值都存在data里头

                   图示如下:

                                    JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第20张图片

              (4)它先走selectAdm这个控制层的接口,然后从Dao层的getOneAdm()通过adm_id读取对应的一条管理员的数据,返回的是Adm对象,将其对应信息保存在request属性中,最后再将数据转发到editAdm.jsp页面

                  图示如下:

                JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第21张图片

              (5)编辑弹出层主要是利用layui的form组件,利用getAttribute()方法获得上一步存储的属性值

                    图示如下:

                     


第五步:(1)点击某一项的删除按钮时,它就触发监听工具条的事件,通过layEvent确定触发的是“删除”事件

              (2)利用layui提供的confirm弹出对话框,提示用户执行下一步操作

              (3)当用户点击“确定”时,先删除对应行的DOM结构(假删除),再通过ajax向服务端发送删除指令,调用delAdm接口,传过去adm_id(真删除)

                  图示如下:

                               JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第22张图片

          (4)在delAdm接口中,先获得传过来的id,再利用Dao层的deleteAdm(int id)方法,这个方法返回一个boolean值

            (5)将这个boolean值返回给前端,然后前端通过这个值判断是否删除成功,删除成功就会弹出“删除成功”提示

                 图示如下:

                               JavaWeb个人博客项目:手把手教你实现博客后台系统之管理员管理模块5_第23张图片


1.3  具体代码

首先,Adm.java、AdmDao.java以及AdmDaoImpl.java等已经在上一篇博文里详细写了,这里就不赘述了

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

ListAdm.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

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 org.json.JSONArray;
import org.json.JSONObject;

import com.google.gson.JsonObject;

import dao.AdmDao;
import dao.AdmDaoImpl;
import pojo.Adm;
import util.JsonUtil;

/**
 * Servlet implementation class ListAdm
 */
@WebServlet("/listAdm")
public class ListAdm extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ListAdm() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		int limit = 0;
		int page = 0;		
		PrintWriter writer = null;
		try {
			limit = Integer.parseInt(request.getParameter("limit"));
			page = Integer.parseInt(request.getParameter("page"));
			AdmDao a = new AdmDaoImpl();
			ArrayList aList = a.getPageAdm(page, limit);
			ArrayList aListTotal = a.getAllAdm();
			Map map = new HashMap();
			map.put("code", 0);
			map.put("msg", "");
			map.put("count", aListTotal.size());
			map.put("data", aList);	
			//String jsonStr = JsonUtil.beanToString(map);
			//writer.write(jsonStr);	
			writer= response.getWriter();
			net.sf.json.JSONObject jsonStr = net.sf.json.JSONObject.fromObject(map);
			writer.print(jsonStr);
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			writer.flush();
			writer.close();
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

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

SelectAdm.java

package servlet;

import java.io.IOException;
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 dao.AdmDao;
import dao.AdmDaoImpl;
import dao.CategoryDao;
import dao.CategoryDaoImpl;
import pojo.Adm;
import pojo.Category;

/**
 * Servlet implementation class SelectAdm
 */
@WebServlet("/selectAdm")
public class SelectAdm extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SelectAdm() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
			int adm_id = Integer.parseInt(request.getParameter("adm_id"));
			AdmDao a = new AdmDaoImpl();
			Adm adm = a.getOneAdm(adm_id);
			if(adm!=null) {
				request.setAttribute("adm_id", adm.getAdm_id());
				request.setAttribute("adm_name",adm.getAdm_name());
				request.setAttribute("adm_password", adm.getAdm_passward());
				request.getRequestDispatcher("adm/editAdm.jsp").forward(request, response);//转发到成功页面
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

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

EditAdm.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

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 dao.AdmDao;
import dao.AdmDaoImpl;
import pojo.Adm;


/**
 * Servlet implementation class EditAdm
 */
@WebServlet("/editAdm")
public class EditAdm extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public EditAdm() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String result = "false";
		PrintWriter writer = null;
		try {
			int adm_id = Integer.parseInt(request.getParameter("adm_id"));
			String adm_name = request.getParameter("adm_name");
			String adm_password = request.getParameter("adm_password");
			Adm adm = new Adm();
			adm.setAdm_id(adm_id);
			adm.setAdm_name(adm_name);
			adm.setAdm_passward(adm_password);
			AdmDao a = new AdmDaoImpl();
			boolean flag = a.updateAdm(adm);
			System.out.println(flag);
			if(flag) {
				result ="true";	
			}
		    writer =  response.getWriter();
		    writer.write(result);
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			writer.flush();
			writer.close();
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

④在WebContent的adm目录下-->新建jsp文件,命名为listAdm.jsp-->键入代码,如下

listAdm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@include file="../base.jsp"%>





管理员列表



⑥在WebContent的adm目录下-->新建jsp文件,命名为editAdm.jsp-->键入代码,如下

editAdm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@include file ="../base.jsp" %>




编辑管理员



<%
	int adm_id = (int)request.getAttribute("adm_id");
	String adm_name = (String)request.getAttribute("adm_name");
	String adm_password = (String)request.getAttribute("adm_password");
%>
立即提交

1.4 易错点分析之转发与重定向的区别

    (1)转发地址栏不会发生变化,显示的依然是上一个地址栏的地址

    (2)转发一般带ServletRequest和Servletresponse对象过去,所以数据不会丢失

    (3)重定向地址栏会发生变化

    (4)重定向没有带数据过去,即数据会丢失


如果有任何问题,欢迎在下方留言~

我如果看到了就一定会回复的=w=

注:GitHub下载地址在文章顶部,也传到了csdn下载上面,希望能对你有所帮助;

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

你可能感兴趣的:(javaWeb,前端,个人博客,java)