1、构建Struts2的开发环境?

1.1:导入相应jar包(最简化的,后期可以直接复制)。

1.2:编写struts.xml配置文件。(从实例中提供参考)。

 <package name=""  extends="struts-default">            

   <action name="url" class="...."  method="..">                 

     
   </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、文件的上傳和下載?

Struts2总结的更多相关文章

  1. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  2. 菜鸟学Struts2——Interceptors

    昨天学习Struts2的Convention plugin,今天利用Convention plugin进行Interceptor学习,虽然是使用Convention plugin进行零配置开发,这只是 ...

  3. 菜鸟学Struts2——零配置(Convention )

    又是周末,继续Struts2的学习,之前学习了,Struts的原理,Actions以及Results,今天对对Struts的Convention Plugin进行学习,如下图: Struts Conv ...

  4. 菜鸟学Struts2——Results

    在对Struts2的Action学习之后,对Struts2的Result进行学习.主要对Struts2文档Guides中的Results分支进行学习,如下图: 1.Result Types(Resul ...

  5. 菜鸟学Struts2——Actions

    在对Struts2的工作原理学习之后,对Struts2的Action进行学习.主要对Struts2文档Guides中的Action分支进行学习,如下图: 1.Model Driven(模型驱动) St ...

  6. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  7. 13、零配置Struts2开发

    Convention 插件 从 Struts 2.1 开始, Struts 可以使用 Convention 插件来支持零配置: Convention 插件完全抛弃配置信息, 不仅不需要使用 strut ...

  8. 12、Struts2表单重复提交

    什么是表单重复提交 表单的重复提交: 若刷新表单页面, 再提交表单不算重复提交. 在不刷新表单页面的前提下: 多次点击提交按钮 已经提交成功, 按 "回退" 之后, 再点击 &qu ...

  9. 11、Struts2 的文件上传和下载

    文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...

  10. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

随机推荐

  1. HTML5 WebSocket 技术介绍

    WebSocket是html5规范新引入的功能,用于解决浏览器与后台服务器双向通讯的问题,使用WebSocket技术,后台可以随时向前端推送消息,以保证前后台状态统一,在传统的无状态HTTP协议中,这 ...

  2. linux(TINY6410)下移植boa服务器

    今天在tiny6410上移植了boa服务器,中间遇到了一些小问题.当时也及时解决了. 第一步:boa的编译 在www.boa.org下载Boa的压缩包  我这里用的是 boa-0.94.13.tar. ...

  3. java 24 - 8 GUI之创建四则运算计算器(未校验版)

    这个是用NetBeans软件制作的,因为这个软件制作GUI任务比较方便 通过拖拽控件生成的窗体:(红色的名称是更改后的控件名称) 拉拽好布局后,要进行的步骤: A:更改想要进行操作的控件的名称(右键控 ...

  4. 转:设置Eclipse中的tab键为4个空格的完整方法

    from: https://my.oschina.net/xunxun10/blog/110074   设置Eclipse中的tab键为4个空格的完整方法 收藏 XunXun10 发表于 4年前 阅读 ...

  5. noip2013 火柴排队

    题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...

  6. Linq语法详细(转)

    原文地址:http://www.cnblogs.com/knowledgesea/p/3897665.html 开门见山 读这篇文章之前,我先说下,每一种搜索结果集,我都以三种方式变现出来,为啦更好的 ...

  7. jboss eap 6.2+ 版本中 加密datasource密码等敏感信息

    默认情况下,在jboss eap 6.2+ 管理控制台创建datasource后,会在standalone.xml(独立模式)或host.xml(域模式)中以明文保存相关敏感信息. 这会给服务器留下安 ...

  8. JAVA CDI 学习(4) - @Alternative/@Default/@Any & Extension

    前面几节学习到的CDI内容,基本上都是hard-code,以硬编码的方式在代码里指定注入类型,这并非依赖注入的本意,依赖注入的优势之一在于“解耦”,这一节我们将学习如何利用配置来动态注入的类型及属性初 ...

  9. 如何对于几百行SQL语句进行优化?

    1.最近在开发中遇到的一些关于几百行SQL语句做查询的问题,需要如何的解决优化SQL这确实是个问题,对于当下的ORM 框架 EF 以及其他的一些的开源的框架例如Drapper ,以及Sqlite-Su ...

  10. MySQL for mac使用记录

    一.登录 打开终端,输入/usr/local/mysql/bin/mysql -u root -p 初次进入mysql,密码为空.当出现mysql>提示符时,表示你已经进入mysql中.键入ex ...