国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

JSP+Servlet培訓班作業管理系統[5]-加載角色對應菜單

2019-11-06 07:46:40
字體:
來源:轉載
供稿:網友

接上一篇,現在需要讓不同角色的用戶登錄之后,index.jsp頁面左側菜單欄看到不同的菜單,此時貓哥想到兩種方式:

方式1,將菜單和角色-菜單的對應信息保存到數據庫中。方式2,將菜單和角色-菜單的對應信息直接保存到內存中。

因為培訓班作業管理系統較為簡單,所以直接采用方式2:

task3-8,添加一個Constant類用于保存常量的信息如下:

package util;import java.util.HashMap;public class Constant {//保存常量信息 //roleMenu用于保存角色及對應的菜單信息 public static HashMap<String,String[][]> roleMenu=new HashMap<String,String[][]>(); //使用static代碼塊對roleMenu進行初始化 static{ //注意,二位數組中的每一組表示一個菜單的信息,又通過map建立了角色名和菜單直接的對應關系 roleMenu.put("校長", new String[][]{ {"人員管理","userManage","userManage.jsp"},//每組三個元素分別對應菜單名,菜單對應的Servlet參數,菜單對應的jsp {"信息查詢","viewInfo","viewInfo.jsp"} }); roleMenu.put("教師", new String[][]{}); roleMenu.put("學生", new String[][]{}); }}

task3-9,所以,用戶登錄時,應同時將該用戶對應的菜單信息保存到session中。故修改LoginServlet如下:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//處理post請求 //設置輸入輸出格式、編碼 response.setContentType("text/html"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); //獲取用戶在網頁輸入的用戶名和密碼 String userName=request.getParameter("userName"); String userPassWord=request.getParameter("userPassword"); //數據庫操作 LoginCommand lc=new LoginCommand(); User user=null; try { user=lc.checkLogin(userName, userPassword); if(user==null) throw new MyException(new Date(),"用戶名或者密碼錯誤","用戶名或者密碼錯誤"); //根據user.getUserRole();用戶角色顯示不同內容 request.getSession().setAttribute("loginUser", user);//記錄登錄用戶信息 String[][] loginRoleMenu=Constant.roleMenu.get(user.getUserRole().getRoleName());//根據用戶角色名找到對應菜單信息 request.getSession().setAttribute("loginRoleMenu", loginRoleMenu);//記錄登錄用戶的菜單信息 request.getRequestDispatcher("/index.jsp").forward(request,response);//跳轉到index.jsp } catch (MyException e) { //跳轉到錯誤提示頁面,并提示用戶錯誤信息 request.setAttribute("errorInfo", e.getInfo());//設置錯誤信息 request.getRequestDispatcher("/error.jsp").forward(request,response);//跳轉到error.jsp } }

task3-10,然后就是修改index.jsp頁面左側菜單欄的菜單列表了,將如下代碼:

<div id="left"> <ul> <li><a href="/HomeworkSystem/RouteServlet?type=userManage">人員管理</a></li> <li><a href="/HomeworkSystem/RouteServlet?type=viewInfo">信息查詢</a></li> </ul></div><!-- left部分是菜單欄 -->

修改為:

<div id="left"> <ul> <c:forEach items="${loginRoleMenu}" var="menu"> <li> <a href="/HomeworkSystem/RouteServlet?type=${menu[1]}">${menu[0]}</a> </li> </c:forEach> </ul> </div><!-- left部分是菜單欄 -->

PS:貓哥以前還真沒用c:forEach處理過二維數組,突然有點懵圈,百度了一下更加懵圈,幸虧自己又想起來了,真是年齡大了。

OK,重新部署后運行,果然是index.jsp顯示沒有問題,接下來繼續處理菜單欄點擊之后的處理。

task3-11,修改RouteServlet類的doPost方法如下:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//處理post請求 //設置輸入輸出格式、編碼 response.setContentType("text/html"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); //獲取用戶在網頁輸入的用戶名和密碼 String type=request.getParameter("type"); //將type設置為根據Session中的loginRoleMenu匹配 String[][] loginRoleMenu=(String[][])request.getSession().getAttribute("loginRoleMenu"); //尋找對應Servlet路徑的jsp文件名 for(String[] menu:loginRoleMenu){ if(menu[1].equals(type)){ type=menu[2]; } } request.setAttribute("type",type); request.getRequestDispatcher("/index.jsp").forward(request,response);//跳轉到index.jsp }

重新部署、運行,達到了想要的效果,同時將菜單的相關信息都放置在了Constants類中,之后無論是想把菜單信息放到數據庫還是配置文件,都好解決,通過Constants轉換下就行唄。

PS:貓哥好像無意中還實現了一個功能,因為RouteServlet中要去loginRoleMenu查找對應的jsp名,而loginRoleMenu又跟登錄用戶角色相關。那么是不是可以說,一個角色想訪問另一個角色的菜單對應的jsp頁面,是會報錯的。這個錯誤信息可以直接跳轉到error.jsp頁面,并顯示無訪問權限就可以了。

純屬PS,下篇驗證下。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 潜江市| 忻城县| 白山市| 启东市| 德令哈市| 阿拉善盟| 思茅市| 富锦市| 家居| 朔州市| 涪陵区| 屏南县| 霍山县| 栾城县| 星座| 义马市| 清丰县| 邢台市| 滨海县| 灵宝市| 耿马| 淮安市| 罗田县| 黑龙江省| 巴楚县| 泸西县| 颍上县| 泉州市| 探索| 项城市| 兴文县| 汉沽区| 武定县| 福贡县| 报价| 乡宁县| 巨鹿县| 克什克腾旗| 绥棱县| 安顺市| 绍兴市|