Struts2学习笔记
1.Struts2概念:
处理访问服务器的请求(代替了servlet)
2.Struts2优势:
(1)自动封装参数
(2)参数的校验
(3)结果的处理(转发,重定向)
(4)显示等待页面
(5)防止表单的重复提交
(6)国际化
3.Struts2具有更加先进的架构,思想
(1)struts2与struts1的区别(几乎是两个框架,没有太多联系)
(2)struts2基于过滤器filter构建的框架
4.搭建struts2框架
(1)导包
(2)编写Action类
(3)编写src/struts.xml(先引入约束)
(4)将struts2核心过滤器配置到web.xml
5.struts2架构
(1)输入访问的地址找到过滤器filter,访问路径为/*
(2)过滤器回去找核心配置文件struts.xml,去每个package中查找namespace
(3)在包中寻找action,并且创建出action对象,调用名为method=""的方法
(3)通过返回值判断是否是返回结果<result name="返回值">,若是则返回相应的页面
6.struts2获得参数
(1)属性驱动
(2)对象驱动
(3)模型驱动(ModelDriver)
7.拦截器(Interceptor)
(1)拦截器封装了很多功能
(2)优秀的设计,可插拔式设计
(3)aop思想(面向切面编程)【将纵向重复代码,横向抽取】
8.struts.xml配置详解
<!-- package:将action配置封装,可以在package中配置很多action
name属性:包名,起到标识左右,不能与其它包名重复
namespace属性:给action的访问路径中定义一个命名空间
extends属性:继承一个指定的包(必选)
abstract属性:包是否是抽象的;标识包不能独立运行,专门被继承
-->
<package name="hello" namespace="/hello" extends="struts-default">
<!-- action元素:配置action类
name属性:决定action访问资源名
class属性:action类的完成类名
method属性:指定调用action中的方法来处理请求
-->
<action name="HelloAction" class="com.javaweb.hello.HelloAction" method="hello">
<!-- result元素:结果配置
name属性:标识结果处理的名称;与action方法的返回值对应
type属性:指定调用哪一个result类来处理结果,默认使用转发
标签体:填写页面的相对路径
-->
<result name="success">/hello.jsp</result>
</action>
</package>
9.拦截器(Interceptor)配置详解
自定义拦截器
(1)拦截器创建(拦截器生命周期:项目启动时创建,关闭时销毁)
1)新建类并实现接口Interceptor
2)新建类并继承AbstractInterceptor类
3)新建类并继承MethodFilterInterceptor类(定制拦截器拦截的方法)
(2)拦截器配置
1)注册拦截器
<interceptors>
<interceptor name="myInter3" class="拦截器完整类名"></interceptor>
2)注册拦截器栈
<interceptor-stack name="myStack">
<!-- 自定义拦截器引入(建议放在20个拦截器之前) -->
<interceptor-ref name="myInter3">
<!-- 指定哪些方法不拦截 (不能与拦截方法同时执行)-->
<param name="excludeMethods">add,del</param>
<!-- 指定哪些方法需要拦截 -->
<param name="includeMethods">add,del</param>
</interceptor-ref>
<!-- 应用默认拦截器栈(20个) -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
3)指定默认拦截器栈
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<!-- 定义全局结果集 -->
<global-result>
<result></result>
</global-result>
</interceptors>
拦截器api
(1)放行
(2)前后处理
(3)不放行,直接跳转页面