java获得jsp的name注解_记录Java注解在JavaWeb中的一个应用实例
概述
在學(xué)習(xí)注解的時候,學(xué)了個懵懵懂懂。學(xué)了JavaWeb之后,在做Demo項目的過程中,借助注解和反射實現(xiàn)了對頁面按鈕的權(quán)限控制,對于注解才算咂摸出了點味兒來。
需求
以"角色列表"頁面為例,該頁面包含"新建","編輯","啟用/禁用","刪除"四個權(quán)限。根據(jù)用戶所屬角色的權(quán)限,來控制這些按鈕是否顯示。問題是,如何確定哪些頁面下包含哪些按鈕?
實現(xiàn)
定義注解
package com.ttpfx.bean;
import java.lang.annotation.*;
@Target(ElementType.METHOD) // 注解的作用對象:只能用于方法
@Retention(RetentionPolicy.RUNTIME) // 注解的級別:運行時有效,可以通過反射獲取注解信息
@Repeatable(Buttons.class) // 可重復(fù)注解: 一個方法可以有多個Button注解,一個方法的多個Button注解將組成一個Buttons返回
public @interface Button {
String servlet(); // ServletName
String action(); // ActionName, 每個action是Servlet中的一個方法,代表一個請求地址:servletName?action=actionName
String name(); // 按鈕名稱
}
package com.ttpfx.bean;
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Buttons {
Button[] value(); // Button注解的數(shù)組,通過Btuuons.value()獲取頁面的多個Button
}
在Servlet中使用注解
public class RoleServlet extends BaseServlet {
private RoleService roleService = new RoleServiceImpl();
// RoleServlet.index() 對應(yīng)角色列表頁面,訪問地址為:/role?action=index
// 該頁面包含"新建","編輯","啟用/禁用","刪除"四個權(quán)限
@Button(servlet = "role", action = "add", name = "add")
@Button(servlet = "role", action = "edit", name = "edit")
@Button(servlet = "role", action = "changeStatus", name = "changeStatus")
@Button(servlet = "role", action = "delete", name = "delete")
protected void index(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ....
}
}
在BaseServlet中校驗頁面按鈕的權(quán)限,并將結(jié)果保存在requestScope中
// method:Servlet中的方法, 如上面RoleServlet.index()
private Map getButtonPermissions(Method method) {
// buttonMap是一個以Button.name為key, 以是否有權(quán)限的布爾值為value的鍵值對
// 該結(jié)果會被保存在requestScope中,供jsp頁面使用
Map buttonMap = new HashMap<>();
Button[] buttonAnnotations = null;
// 頁面有一個Button注解的時候可以直接獲取
// 頁面有多個Button注解的時候,只能獲取到Buttons注解,再通過Buttons.value()方法得到多個Button注解
Buttons buttonsAnnotation = method.getAnnotation(Buttons.class);
Button buttonAnnotation = method.getAnnotation(Button.class);
if (buttonsAnnotation != null) {
buttonAnnotations = buttonsAnnotation.value();
} else if (buttonAnnotation != null){
buttonAnnotations = new Button[] {buttonAnnotation};
}
if (buttonAnnotations != null) {
for (Button button : buttonAnnotations) {
// 在這里實現(xiàn)對每個按鈕的權(quán)限驗證,將結(jié)果put至buttonMap
// 真正的驗證過程已省略
buttonMap.put(button.name, true);
}
}
return buttonMap;
}
在頁面的jsp文件中,控制按鈕是否顯示
新建角色
總結(jié)
以上是生活随笔為你收集整理的java获得jsp的name注解_记录Java注解在JavaWeb中的一个应用实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt实现浮动窗口
- 下一篇: java美元兑换,(Java实现) 美元