搜尋
首頁Javajava教程JAVAEE-自訂攔截器、struts2標籤、登陸功能和校驗登陸攔截器的實現

一、自訂攔截器

  1.架構

  

 

  2.攔截器建立

  2.攔截器建立

#
//拦截器:第一种创建方式//拦截器生命周期:随项目的启动而创建,随项目关闭而销毁public class MyInterceptor implements Interceptor{}

 

//创建方式2: 继承AbstractInterceptor -> struts2的体贴//帮我们空实现了init 和 destory方法. 我们如果不需要实现这两个方法,就可以只实现intercept方法public class MyInterceptor2 extends AbstractInterceptor{}

 

//创建方式3:继承MethodFilterInterceptor 方法过滤拦截器//功能: 定制拦截器拦截的方法.//    定制哪些方法需要拦截.//    定制哪些方法不需要拦截public class MyInterceptor3 extends MethodFilterInterceptor{}

 

  3.攔截器api

#
        //放行String result = invocation.invoke();

 

        //前处理System.out.println("MyInterceptor3 的前处理!");//放行String result = invocation.invoke();//后处理System.out.println("MyInterceptor3 的后处理!");

 

        //不放行,直接跳转到一个结果页面//不执行后续的拦截器以及Action,直接交给Result处理结果.进行页面跳转return "success";

 

  4.攔截器設定

#
    <package><interceptors><!-- 1.注册拦截器 --><interceptor></interceptor><!-- 2.注册拦截器栈 --><interceptor-stack><!-- 自定义拦截器引入(建议放在20个拦截器之前) --><interceptor-ref><!-- 指定哪些方法不拦截
                 <param name="excludeMethods">add,delete</param> --> <!-- 指定哪些方法需要拦截 --> <param>add,delete</interceptor-ref><!-- 引用默认的拦截器栈(20个) --><interceptor-ref></interceptor-ref></interceptor-stack>    </interceptors><!-- 3.指定包中的默认拦截器栈 --><default-interceptor-ref></default-interceptor-ref><action><!-- 为Action单独指定走哪个拦截器(栈) 
            <interceptor-ref name="myStack"></interceptor-ref>--><result>/index.jsp</result></action></package>

 

        <!-- 补充知识:定义全局结果集 --><global-results><result>/login.jsp</result></global-results>

 

二、struts2標籤

  1.標籤系統

 

 

 

  2.struts2標籤結構

 

  3.控制標籤

  準備Action然後到jsp練習struts2標籤

public class Demo2Action extends ActionSupport {public String execute() throws Exception {
        
        List<string> list = new ArrayList();
        list.add("tom");
        list.add("jerry");
        list.add("jack");
        list.add("rose");
        list.add("hqy");
        
        ActionContext.getContext().put("list", list);return SUCCESS;
    }

}</string>

  開始練習控制標籤:

## 

  4.資料標籤

 <!-- 遍历标签 iterator --><!-- ------------------------------------- --><iterator><property></property><br></iterator><!-- ------------------------------------- --><hr><iterator><property></property><br></iterator><!-- ------------------------------------- --><hr><iterator><property></property>|</iterator><!-- ------------------if else elseif------------------- --><hr><if>list长度为4!</if><elseif>list长度为3!</elseif><else>list不3不4!</else>

 

  5.表單標籤

#

<!-- ------------------property 配合ognl表达式页面取值 ------------------- --><hr><property></property><property></property>

 

  6.非表單標籤

   在action中新增錯誤訊息

    <!-- struts2表单标签 --><!-- 好处1: 内置了一套样式.  --><!-- 好处2: 自动回显,根据栈中的属性  --><!-- theme:指定表单的主题
            xhtml:默认
            simple:没有主题     --><form>
<textfield></textfield><password></password><radio></radio><radio></radio><checkboxlist></checkboxlist><select></select><file></file><textarea></textarea><submit></submit>
</form>
  取出錯誤訊息

#

this.addActionError("我是错误信息 哈哈哈");

##  取出錯誤訊息

    <actionerror></actionerror>

##三、練習:登陸功能

  核心程式碼:

  Action程式碼:

public class UserAction extends ActionSupport implements ModelDriven<user> {private User user = new User();private UserService us  = new UserServiceImpl();    public String login() throws Exception {//1 调用Service 执行登陆操作User u = us.login(user);//2 将返回的User对象放入session域作为登陆标识ActionContext.getContext().getSession().put("user", u);//3 重定向到项目的首页return "toHome";
    }

    @Overridepublic User getModel() {return user;
    }
}</user>

  Service層代碼:

public class UserServiceImpl implements UserService {private UserDao ud = new UserDaoImpl();
    @Overridepublic User login(User user) {//打开事务        HibernateUtils.getCurrentSession().beginTransaction();//1.调用Dao根据登陆名称查询User对象User existU = ud .getByUserCode(user.getUser_code());//提交事务        HibernateUtils.getCurrentSession().getTransaction().commit();        if(existU==null){//获得不到=>抛出异常提示用户名不存在throw new RuntimeException("用户名不存在!");
        }//2 比对密码是否一致if(!existU.getUser_password().equals(user.getUser_password())){//不一致=>抛出异常提示密码错误throw new RuntimeException("密码错误!");
        }//3 将数据库查询的User返回return existU;
    }
}

  Dao層代碼:

  Dao層代碼:

public class UserDaoImpl implements UserDao {
    @Overridepublic User getByUserCode(String user_code) {//HQL查询//1.获得SessionSession session = HibernateUtils.getCurrentSession();//2 书写HQLString hql = "from User where user_code = ? ";//3 创建查询对象Query query = session.createQuery(hql);//4 设置参数query.setParameter(0, user_code);//5 执行查询User u = (User) query.uniqueResult();return u;
    }
}

 

四、練習:校驗登陸攔截器

  核心程式碼:

###  struts.xml設定檔代碼:######
<?xml  version="1.0" encoding="UTF-8"?>nbsp;struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd"><struts><!-- 指定struts2是否以开发模式运行
            1.热加载主配置.(不需要重启即可生效)
            2.提供更多错误信息输出,方便开发时的调试     --><constant></constant><package><interceptors><!-- 注册拦截器 --><interceptor></interceptor><!-- 注册拦截器栈 --><interceptor-stack><interceptor-ref><param>login</interceptor-ref><interceptor-ref></interceptor-ref></interceptor-stack></interceptors><!-- 指定包中的默认拦截器栈 --><default-interceptor-ref></default-interceptor-ref><!-- 定义全局结果集 --><global-results><result>/login.jsp</result></global-results><global-exception-mappings><!-- 如果出现java.lang.RuntimeException异常,就将跳转到名为error的结果 --><exception-mapping></exception-mapping></global-exception-mappings>
    <action><result>/jsp/customer/list.jsp</result><result> <param>CustomerAction_list <param>/ </result></action><action><result>/index.htm</result><result>/login.jsp</result></action></package></struts>
######  補充知識:檢查目前頁面的父頁是否是自己,不是的話進行跳轉,解決頁面嵌套問題。 ######
<script>window.onload=function(){        if(window.parent != window){// 如果是在框架中//就让框架页面跳转到登陆页面window.parent.location.href = "${pageContext.request.contextPath}/login.jsp";
        }
        
    };</script>
###### ###

以上是JAVAEE-自訂攔截器、struts2標籤、登陸功能和校驗登陸攔截器的實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器