Struts2框架-1

来源:互联网 发布:小程序第三方平台源码 编辑:程序博客网 时间:2024/06/11 23:06

struts2框架

struts2是一个用来开发MVC应用程序的框架,它提供了web应用程序开发过程中的一些常见问题的解决方法。
a:对于用户输入数据进行合法性验证
b:统一的布局
c:国际化和本地化
d:支持Ajax
e:表单的重复提交

f:文件的上传下载...

Struts1和struts2的对比

struts2中类更少,更高效,不需要使用ActionForm(struts1中特有)封装请求参数。
struts2通过拦截器完成框架的大部分工作,每一个拦截器对应着不同的功能,可以自定义拦截器实现自定义功能。(不使用浏览器可以测试struts2代码)
struts1使用ActionServlet作为控制器,struts2使用过滤器作为控制器。
struts1中每个表单都对应一个ActionForm实例,struts2中HTML表单将直接映射到一个POJO。
struts1的验证逻辑编写在ActionForm中;struts2中的验证逻辑编写在Action中。




搭建struts2框架环境
1:导入jar包(下载地址 http://struts.apache.org/download.cgi#struts2513)
2:在web.xml文件中配置struts2
    <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
    </filter>
    <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern> *.do</url-pattern>
    </filter-mapping>
3:在当前web应用的classpath下添加 struts2的配置文件(struts2.xml)
在src目录下创建struts2配置文件
<!-- package包,用来代表一个独立的模块,常用来管理一组action元素
     name:必填属性,用于其它包引用该包
     extends:当前包所继承的包,继承某个配置文件,通常继承struts-default
     namespace:可选属性,指定命名空间,若给,访问时需添加
 -->

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


    <action name="AddMostFile"class="com.action.AddMostFileAction">

           <resultname="success">/addsuccess.jsp</result>

    </action>
     <!-- 一个struts2请求就是一个action
        name:对应一个struts2的请求的名字(或者一个Servlet,除去扩展名)
class:对应执行的类,默认是框架提供的类
result:对应执行的结果(不同的结果可以对应到不同的页面)
method:对应执行的方法,默认execute(该方法返回success)
        type:表示结果类型,默认dispatcher(转发到结果中指定的页面)
     -->

    <action name="doDownloadFile" class="com.action.DownloadAction" method="doDownloadFile">
<result name="success" type="stream">
  <param name="inputName">inputStream</param>
  <param name="contentDisposition">attachment;filename="${fileName}"</param>
  <param name="contentType">application/octet-stream</param>
  <param name="bufferSize">1024</param><!--缓冲区大小  -->
  </result>

    </action>


    <!--引入其他位置的struts2的配置文件-->
    <include file="........" />


<!--struts2修改浏览器请求后缀的配置

   struts2默认后缀是action或者为空;

  访问时后缀不是默认值则报错在struts.xml文件中配置以下元素-->
<constant name="struts.action.extension" value="do" ></constant >



<!--result节点

   result是action节点的子节点
    result代表action方法执行后可能去的一个网页

    result的name是action执行的返回结果
    一个action可以有多个result
    result的type属性,定义了返回结果的类型——dispatcher(转发,是默认值)、redirect(重定向到页面)、redirectAction(重定向到一个action中继续执行,不展示数据)、chain(转发到一个action中继续执行代码,不展示数据)-->


<!--重定向/转发到action时,需要配置重定向的action的位置-->

<result name="...."  type="redirectAction或者chain" >

             <param name="actionName">////</param>
             <param name="namespace">////</param>

</result>

<!--注意::可以通过redirect间接实现重定向到action中,转发到action中不能使用dispatcher间接实现-->

<result  name="...."  type="redirect">/xxxx/xxxxx.do</result>


</package>




action与Action类的区别
action:代表一个struts2的请求

Action类:能够处理struts2请求的类,继承于ActionSupport(继承了它的功能,实现了struts2框架提供的常见问题的解决方法国际化、数据检验、验证码等等功能)

    属性的名字必须遵守JAVABean属性名相同的命名规则
    属性的类型可以是任意类型,从字符串到基本数据类型之间可以自动转换

    必须由一个无参数的构造器(在配置的action中通过反射的方式创建对象)

    至少有一个供struts2在执行action是调用的方法(method的指定的方法)

    同一个Action类中可以包含多个action方法(method的映射的方法)

    struts2会为每一个Http请求创建一个新的Action实例(线程是安全的)





在Action中访问Web资源
web资源:HttpServletRequest、HttpSession、ServletContext等原生的ServletAPI(可以用来获取realPath、读写Cookie、向域对象中读写属性)
访问的方式:
1:和Servlet API解耦飞方式
a:使用ActionContext(得到的Map对象只能使用一次)

    ActionContext是Action执行的上下文对象,在ActionContext中保存了Action执行所需要的所有对象,包括paramenters、request、session、application等。
    获取HttpSession对应的Map对象——public Map getSession()
    获取ServletContext对应的Map对象——public Map getApplication()
    获取请求参数对应的Map对象——public Map getParameters()
    获取HttpServletRequest对应的Map对象——public Object get(Object key):ActionContext类中没有提供类似gtRequest()这样的方法来获取,可以通过为get()方法传递“request”参数实现——强制类型转换

b:实现XxxAware接口(注入了一个Xxx对象)——一般使用该方法
    注入application、Parameter、request、session对象后(作为属性保存了对应的Map对象,可多次使用),和Application一样的访问方式;SessionAware、RequestAware、ParameterAware接口可以得到对应对象的Map对象,用法基本相同。
        SessionMap对象的键是String类型,值是String[]类型,其他的Map对象键是String类型,值是Object类型。在SessionMap对象中,可以调用它的invalidate()方法,使这个sessionMap对象失效(赋值为null)。




2:和Servlet API耦合的方式
a:使用ServletActionContext

    直接访问Servlet API将使Action与Servlet环境耦合在一起,测试时需要有Servlet容器,不便于对Action的单元测试。
    直接获取HttpServletRequest对象—ServletActionContext.getRequest()
    直接获取HttpSession对象—ServletActionContext.getRequest().getSession()
    直接获取ServletContext对象—ServletActionContext.getServletContext()

b:实现ServletXxxAware接口

    通过实现ServletRequestAware、ServletContextAware(常用)、ServletResponseAware接口的方式实现功能




未完待续,且听下回分解!!!



原创粉丝点击