struts2课堂笔记

一:struts2介绍

         Struts2是在WebWork2基础发展而来的。和struts1一样, Struts2也属于MVC框架。不过有一点大家需要注意的是:尽管Struts2和struts1在名字上的差别不是很大,但Struts2和struts1在代码编写风格上几乎是不一样的。

          主要是因为struts2有以下优点:

1 > 在软件设计上Struts2没有像struts1那样跟Servlet API和struts API有着紧密的耦合,Struts2的应用可以不依赖于ServletAPI和struts API。 Struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计。

public classOrderListAction extends Action {

       public ActionForwardexecute(ActionMapping mapping, ActionForm form,

                     HttpServletRequest request,HttpServletResponse response)

                     throws Exception {

       }

}

2> Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。

3> Strut2提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型。在Struts1中,如果我们要实现同样的功能,就必须向Struts1的底层实现BeanUtil注册类型转换器才行。

4> Struts2提供支持多种表现层技术,如:JSP、freeMarker、Velocity等

5> Struts2的输入校验可以对指定方法进行校验,解决了Struts1长久之痛。

6> 提供了全局范围、包范围和Action范围的国际化资源文件管理实现

 

 

二:搭建struts2开发环境

       搭建Struts2环境时,我们一般需要做以下几个步骤的工作:

1》找到开发Struts2应用需要使用到的jar文件.

2》编写Struts2的配置文件struts.xml ,该文件需要存放在WEB-INF/classes下

3》在web.xml中加入Struts2 MVC框架启动配置

 

 

三:Action名称的搜索顺序

    获得请求路径的URI,例如url是:http://server/struts2/path1/path2/path3/test.action

 

1.首先寻找namespace为/path1/path2/path3的package,如果存在这个package,则在这个package中寻找名字为test的action,如果不存在这个package则转步骤3;

 

2.寻找namespace为/path1/path2的package,如果存在这个package,则在这个package中寻找名字为test的action,如果不存在这个package,则转步骤4;

 

3.寻找namespace为/path1的package,如果存在这个package,则在这个package中寻找名字为test的action,如果仍然不存在这个package,就去默认的namaspace的package下面去找名字为test的action(默认的命名空间为空字符串“” ),如果还是找不到,页面提示找不到action。

 

 

四:url访问方式

   

访问struts2中action的URL路径由两部份组成:包的命名空间+action的名称,例如访问本例子HelloWorldAction的URL路径为:/test/helloworld (注意:完整路径为:http://localhost:端口/内容路径/test/helloworld)。另外我们也可以加上.action后缀访问此Action。

 

 <package name="itcast"namespace="/test" extends="struts-default">

       <action name="helloworld"class="cn.itcast.action.HelloWorldAction" method="execute">

       <resultname="success">/WEB-INF/page/hello.jsp</result>

       </action>

 </package>

 

 

五:Action配置中的各项默认值

 

<package name="itcast" namespace="/test"extends="struts-default">

        <actionname="helloworld" class="cn.itcast.action.HelloWorldAction"method="execute" >

             <resultname="success">/WEB-INF/page/hello.jsp</result>

       </action>

 </package>

1>如果没有为action指定class,默认是ActionSupport。

2>如果没有为action指定method,默认执行action中的execute()方法。

3>如果没有指定result的name属性,默认值为success。

 

 

六:Action中result的各种转发类型

<action

name="helloworld"  class="cn.itcast.action.HelloWorldAction">

<resultname="success">/WEB-INF/page/hello.jsp</result>

</action>

result配置类似于struts1中的forward,但struts2中提供了多种结果类型,常用的类型有: dispatcher(默认值)、 redirect 、 redirectAction 、 plainText。

redirect

实现传递参数 中文类型

中文传递先编码处理

this.username=URLEncoder.encode("传智博客","UTF-8");

获得数据处理:

URLDecoder.decode(newString(request.getParameter("username").getBytes("ISO8859-1"),"UTF-8"),"UTF-8")

 

redirectAction

 结果类型的例子,如果重定向的action中同一个包下:

<resulttype="redirectAction">helloworld</result>

如果重定向的action在别的命名空间下:

<result type="redirectAction">

<paramname="actionName">helloworld</param>

<paramname="namespace">/test</param>

</result>

plaintext:

显示原始文件内容,例如:当我们需要原样显示jsp文件源代码 的时候,我们可以使用此类型。

<result name="source"type="plainText ">

<paramname="location">/xxx.jsp</param>

<paramname="charSet">UTF-8</param><!-- 指定读取文件的编码 -->

</result>

全局result配置:

<global-results>

        <resultname="message">/message.jsp</result>

</global-results>

 

 

七:为Action的属性注入值

Struts2为Action中的属性提供了依赖注入功能,在struts2的配置文件中,我们可以很方便地为Action中的属性注入值。注意:属性必须提供setter方法。

public classHelloWorldAction{

    private String savePath;

 

    public String getSavePath() {

       return savePath;

    }

    public void setSavePath(String savePath) {

       this.savePath = savePath;

    }

       ......

}

 

 

<packagename="itcast" namespace="/test"extends="struts-default">

   

<actionname="helloworld" class="cn.itcast.action.HelloWorldAction">

       <param name="savePath">/images</param>

       <resultname="success">/WEB-INF/page/hello.jsp</result>

</action>

</package>

上面通过<param>节点为action的savePath属性注入“/images”

 

 

八:常量:

   1.细说常量定义:

      常量可以在struts.xml或struts.properties中配置,建议在struts.xml中配置在struts.xml文件中配置常量

<struts>

          <constantname="struts.action.extension" value="do"/>

</struts>

  

2.常用的常量介绍:

<!-- 指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法和freemarker 、velocity的输出 -->

              <constantname="struts.i18n.encoding" value="UTF-8"/>

   

<!-- 该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。

         如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 -->

              <constantname="struts.action.extension" value="do"/>

  

 <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->

              <constantname="struts.serve.static.browserCache" value="false"/>

 

   <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开-->

             <constantname="struts.configuration.xml.reload" value="true"/>

 

   <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->

                <constant name="struts.devMode"value="true" />

 

    <!-- 默认的视图主题 -->

               <constant name="struts.ui.theme"value="simple" />

  

 <!– 与spring集成时,指定由spring负责action对象的创建-->

              <constantname="struts.objectFactory" value="spring" />

 

 <!–该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false。 -->

<constantname="struts.enable.DynamicMethodInvocation" value="false"/>

 

<!--上传文件的大小限制-->

<constant name="struts.multipart.maxSize"value=“10701096"/>

 

九:Struts2的处理流程

 

  注:StrutsPrepareAndExecuteFilter是Struts 2框架的核心控制器,它负责拦截由<url-pattern>/*</url-pattern>指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。默认情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时请求将被转入Struts2框架处理,否则Struts 2框架将略过该请求的处理。当请求转入Struts 2框架处理时会先经过一系列的拦截器,然后再到Action。与Struts1不同,Struts2对用户的每一次请求都会创建一个Action,所以Struts2中的Action是线程安全的。

 

十:为应用指定多个struts配置文件

 

  在大部分应用里,随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿。为了避免struts.xml文件过于庞大、臃肿,提高struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。下面的struts.xml通过<include>元素指定多个配置文件:

 

<?xml version="1.0"encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC

   "-//Apache Software Foundation//DTD Struts Configuration2.0//EN"

   "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

       <includefile="struts-user.xml"/>

       <includefile="struts-order.xml"/>

</struts>

 

通过这种方式,我们就可以将Struts 2的Action按模块添加在多个配置文件中。

 

 

 

 

你可能感兴趣的:(struts2课堂笔记)