Struts2总结

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

时间: 2024-11-18 13:01:30

Struts2总结的相关文章

解决myeclipse中struts2 bug问题包的替换问题

因为struts2的bug问题,手工替换还是比较麻烦,但即便是最新的myeclipse2014也没有替换最新的struts2包,研究了一天,终于找到了解决办法.以下就解决方法与大家分享一下. 1.在perferences中找到 Myeclipse->Project Libraries,右边找到 struts2.1 Libraries,点击 Enable advanced configiguration,去掉以下文件前面的对勾,然后点击 Add custom Jars 2.在弹出的对话框中选择 A

【Struts2】SSH如何返回JSON数据

  在开发中我们经常遇到客户端和后台数据的交互,使用比较多的就是json格式了.在这里以简单的Demo总结两种ssh返回Json格式的数据 项目目录如下 主要是看 上图选择的部分 WebRoot里面就是平常的配置 第一种方法是使用com.google.gson.Gson 将对象转化为Json字符串  (gson-1.6.jar) 主要的代码如下 1 package com.javen.tool; 2 3 import java.io.IOException; 4 import java.io.P

struts2 版本所导致的 Filter 不同

过了好久又重新接触Struts2,使用maven直接获取的struts2-core-2.5.1的包,从网上直接copy了一段web.xml中的Filter,结果报错,struts2.3.x  以后用以下配置: 1 <filter> 2 <filter-name>struts2</filter-name> 3 <filter-class> 4 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExe

Struts2学习第三课 访问Web资源

1.什么是WEB资源? HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么访问WEB资源? B/S的应用的Controller中必然需要访问WEB资源,例如,向域对象中读写属性,读写Cookie,获取realPath等等. 3.如何访问? 在Action中,可以通过一下方式访问web的HttpSession,HttpServletRequest,HttpServletResponse等资源 与Servlet AP

struts2+hibernate+spring简单整合且java.sql.SQLException: No suitable driver 问题解决

最近上j2ee的课,老师要求整合struts2+hibernate+spring,我自己其实早早地有准备弄的,现在都第9个项目了,无奈自己的思路和头绪把自己带坑了,当然也是经验问题,其实只是用myeclipse进行整合的,本来也没那么多问题,看视频吧居然好多要手打,我不喜欢看不下去放弃了,教程把就是一堆坑,最最让人不解的是明明有一个冲突是需要解决的,但我看到的教程居然都没有提到,还有一个错误居然好多人都好像自动忽略一样,能解决我问题的都是要漫长的找,所以我一定一定要把这个过程记录下来,给第一次搞

SSH Struts2+hiberante+Spring整合

使用SSH框架编写学生信息: 一.新建Java工程: (1)建立好Java各层级之间的结构:业务处理层dao,数据模型层domain,页面请求处理层(Struts2 MVC层)action,service层. (2)建立好各层的实现类及接口; (3)建立一个source folder文件夹,用来存放一些配置问价. (4)改变字节码生成的位置,改为WEB-INF下面的classes文件夹下. Java工程层级结构如下图: 二.hibernate整合到Spring容器中 步骤: 1.编写domain

Struts2 中的值栈的理解

通过对struts2的一段时间的接触,将自己对OGNL的核心值栈说说,值栈:简单的说,就是存放action的堆栈,当我们提交一个请求道服务器端 action时,就有个堆栈,如果action在服务器端进行跳转,所有action共用一个堆栈,当需要保存在action中的数据时,首先从栈顶开始 搜索,若找到相同的属性名(与要获得的数据的属性名相同)时,即将值取出,但这种情况可能出现找到的值不是我们想要的值,那么解决此问题需要用TOP语法 和N语法来进行解决. 当在客服端进行跳转时,当有请求提交到服务器

struts2和hibernate整合的小Demo

jar包下载地址 创建一个web项目. 导入jar包 配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="

配置struts2+spring,springmvc

Struts2+Spring整合 一.spring负责注入,struts2负责它自己的工作.这样不是很符合spring作为ioc容器的全部功能,不推荐. 二.spring负责全部bean和struts2的action的生成.作为ioc容易的最大共用. 所需要jar包 配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/

Struts2基本使用(二)--配置文件简述

配置文件简述 引入Struts2框架之后项目中多了一个struts.xml,以及web.xml也多了一些代码 web.xml只要的功能就是拦截用户的请求其多出的代码如下: <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class&