1、构建Struts2的开发环境?
1.1:导入相应jar包(最简化的,后期可以直接复制)。
1.2:编写struts.xml配置文件。(从实例中提供参考)。
<package name="" extends="struts-default">
<action name="url" class="...." method="..">
<result name="...">....</result> ................................
</action>
</package>
1.3:在Web.xml中配置启动Struts2的Filter的配置。
总结:加载的顺序问题?
web.xml-----执行filter----启动Struts2----解析strut2.xml.
从实际的练习中,我们发现了一个容易出问题的地方:
1>:没有保证struts.xml存在于classes目录下(位于src下)。
2>:struts.xml中的配置和Action类之间的对应关系没有弄清楚。
2、如何在Action中进行参数的获取?
说明:Action中使用了大量的拦截器,可以直接在Action中定义属性,内部通过反射机制 自动完成取值和赋值。必须要存在相应的set方法才可以。
3、如何在Action中的方法中进行数据的保存?
Action中没有提供像Web中那样的作用域对象,我们如何处理呢?
-------Struts2中如何使用(访问)Web资源---------
第一种:解耦性(比较独立)的使用Web资源。
1>:使用的是ActionContext完成的===============
Struts2中提供了一个ActionContext类来完成。可以获得request、session、application对象。
//获取ActionContext对象。 ActionContext act = ActionContext.getContext();
//注意:act其实就是一个Map,中间的request对象的获取,是通过键名进行获取的。
//其余都是通过方法直接获取的。
//获取request对象。 Map<String,Object> request = (Map<String, Object>) act.get("request"); request.put("rkey1", "刘德华"); //获取session对象。 Map<String,Object> session = act.getSession();
//获取application对象。 Map<String,Object> application = act.getApplication();
注意:最终所获得到的这些作用域对象,充分证明了就是Web中的那些内置的作用域对象。
备注:这种方式能够访问Web资源,但是不能直接拿到同web中的作用域一样的API的对象。 本质一样,表现形式不同。
2>:实现接口RequestAware,SessionAware,ApplicationAware完成=============
通过对接口们的实现 ,同样可以获得以上的那三个作用域对象,他们有什么区别呢?
获得的对象是没有任何区别的。开发中使用场合是有区别的。
和ActionContext的区别:
ActionContext是作为局部性的存在,那个方法中进行使用,就再哪里进行获取,多个方法使用就需要不断的进行获取。 实现接口作为成员变量,可以被多个方法共享并进行使用。
第二种:结耦性的使用Web资源,也称为是直接使用Servlet中的API。(获得的是原生态的各种对象)。
1>:使用的是ServletActionContext。
ServletActionContext对象可以获得比ActionContext更多的一些对象。
ServletActionContext是ActionContext的子类。
//直接通过方法获得request对象。 HttpServletRequest request = ServletActionContext.getRequest();
//获得session对象。(内部没有直接提供一个方法进行获取) HttpSession session = request.getSession();
//获取application对象。 ServletContext application = ServletActionContext.getServletContext();
注意:由于是原生态的对象,所以使用的setAttribute方法进行保存的。
2>:使用接口的模式完成----- 实现如下的一些接口,可以获得更多的对象。 ServletRequestAware,ServletContextAware,ServletResponseAware 都是原生态的Servlet的 API对象。 区别同上一样。
4、struts.xml配置文件中的简化处理?
利用通配符的方式进行action的配置。 遇到一个问题? 针对同一个实体的处理,可能存在CRUD的四种操作。这四种操作的内部做法截然不同。 目前只能用增加action的配置的方式,来指定调用不同的方法。 一个Action类 对应4个 action的配置(才能指定不同的4个方法)。struts.xml配置文件会变得越来越庞大,不利于维护。 所以Struts2提供了2种解决方案:
1>:使用通配的方式在一个action中,定义多个方法。常用的方式:
<action name="student_*" class="com.sl.www.action.StudentAction" method="{1}">
<result name="success">success.jsp</result>
</action>
訪問的時候的路徑問題:....../student_save.action method="save"
不建議使用:
<action name="*_*" class="com.sl.www.action.{1}Action" method="{2}">
<result name="success">{2}.jsp</result>
</action>
注意:路徑,方法名稱,頁面名稱的命名需要統一。
2>:可以在struts.xml文件中通过包含的方式,将其它的配置进行引入。
5、方法的動態調用?(不常用,自己去看看)
6、ActionSupport類?
通過剛才的實例我們不難得出:當我們定義action標籤的時候,沒有定義class屬性的時候,默認的就是struts2內部的一個ActionSupport的類。在ActionSupport的內部,實現了Action、....等相關的接口,不僅能夠獲得Action相關的特點,還具有額外的一些功能。
ActionSupport ---- 实现了Action接口(5个常用的常量,和一个execute方法)。
自定義的Action類 ---- 繼承ActionSupport類。----- 獲得了更多的比較方便的操作手段。 证明了: ActionSupport 类中默认的是 execute方法,方法的返回结果有一个SUCCESS常量,对应的就是name="success"的结果。 以后在开发的过程中,我们定义的Action使用继承ActionSupport的方式完长。
7、詳細講解result結果的類型?
<action>
<result name="" type="result的類型">頁面/Action</result>
</action>
分析常用的type類型,及使用的情況?
常用type类型的种类:dispatcher: 目前默认的就是它。表示的是转发功能。可以访问页面资源。但是不能访问Action资源。 redirect:可以重定向到页面。也可以重定向到Action。 redirectAction:表示重定向到指定的Action。但是不能定义页面。 redirect是redirectAction的一种简化形式。 chain:转发到指定的Action,不能定义页面的形式。
总结:转发到页面 重定向到页面 转发到Action 重定向到Action
注意:对namespace的理解(区别不同包下的同名的action)。
8、模型驱动(ModelDriven)。
Struts2中如何抓取请求的参数的呢?
1>直接定义属性,添加set和get方法进行获取参数。
要求:属性名称和控件的名保持一致。
2>定义一个对象,添加set和get方法进行参数获取。
要求:页面进行提交的时候,必须是对象名称.属性名称进行提交,而且属性的名称和页面控件名称一致。
3>定义一个对象,不用添加set和get方法,实现ModelDriven接口完成参数的获取。
要求:必须要实现ModelDriven接口,获取对象。在页面中直接使用属性名称即可。(保持一致)。
9、值棧分析和使用OGNL?
10、Struts2中的標籤庫?
11、類型轉換器的使用?
12、分析攔截器和如何自定義攔截器?
13、文件的上傳和下載?