用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

jun    -  云代码空间

—— 相信 ,梦

struts2

2014-08-12|2142阅||

摘要:struts2 介绍人门

1.struts2介绍
框架是什么?
它是实现了部分功能的代码,使用框架可以简化开发。

struts2框架完成什么功能?
它是一个mvc框架,可以简化以前在web层操作.

struts2历史
struts1
webwork--xwork
struts2=strust1+xwork
springmvc

ssh框架---struts2+hibernate+spring
ssi=springmvc+spring+ibatis(mybatis)

Xwork提供了很多核心功能:前端拦截机(interceptor),
运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Navigation Language),
IoC(Inversion of Control反转控制)容器等

struts2重点:
Action
拦截器
valueStack(ognl)
---------------------------------------------------------------------------
快速入门
1.下载jar包

2.怎样创建一个struts2工程.

1.导入jar包-----在blank示例中将lib下的jar包复制到我们自己工程中.

2.在web.xml文件中配置一个前端拦截器
<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>/*</url-pattern>
</filter-mapping>

3.需要一个struts.xml文件,它是struts2框架的核心配置文件.
这个文件必须放置在classpatch指定的目录下.
对于web工程,默认的classpath就是classes目录.

我们只要将struts.xml文件放置在web工程下的src目录下就可以。

4.创建一个strutsdemo.jsp页面 
<a href="${pageContext.request.contextPath}/hello">访问struts2</a>
 
5.创建HelloAction类,在这个类中提供一个public String show()方法.


6.在struts.xml文件中配置
<package name="default" namespace="/" extends="struts-default">
<action name="hello" class="cn.itcast.action.HelloAction" method="show">


</action>
</package>

7.当访问到HelloAction后,在跳转到strutssuccess.jsp页面.
在show方法上添加返回值为"ok"

8.在struts.xml文件中配置
<package name="default" namespace="/" extends="struts-default">
<action name="hello" class="cn.itcast.action.HelloAction" method="show">
<result name="ok">/strutssuccess.jsp</result>
</action>
</package>

-----------------------------------------------------------------------
struts2的流程分析与工具配置
1.流程分析
1.当请求发送(strutsdemo.jsp)
2.会被在web.xml文件中配置的StrutsPrepareAndExecuteFilter拦截.
在这个过滤器中完成了操作:
1.预加载操作  加载配置文件,加载bean,intercepter等
2.处理请求完成操作

3.通过请求资源路径与配置文件,完成了对指定的Action的访问。

2.关于在strust.xml文件中提示问题

1.如果可以上网,直接就会有提示
2.在eclipse下配置
1.查找到dtd文件所在位置
struts-2.3.15.1-all\struts-2.3.15.1\src\core\src\main\resources
2.复制一个
http://struts.apache.org/dtds/struts-2.3.dtd

3.关于configbrowser插件使用
1.导入相关插件包
struts2/lib查找 struts2-config-browser-plugin-2.3.15.1.jar包

可以以一种图形界面方式展示struts2的配置.
2.访问时
http://localhost:8080/struts_day01/config_browser/index.action

=====================================================================================================
struts2配置详解
学习流程
1.页面--action(action配置)
2.在action中获取请求参数(action,intercepter)
3.响应页面(valueStack)

---------------------------------------------------------
1.struts配置文件加载顺序
在struts2框架中,有一个核心前端拦截器 StrutsPrepareAndExceuteFilter。
在这里面定义了配置文件的加载顺序.

StrutsPrepareAndExceuteFilter。这个类的init方法中会初始化一个Dispatcher类,
在这个类的init方法中定义了以下内容

init_FileManager();
init_DefaultProperties(); // [1]   default.properties 
init_TraditionalXmlConfigurations(); // [2]  struts-default.xml,struts-plugin.xml,struts.xml
init_LegacyStrutsProperties(); // [3] struts.properties 
init_CustomConfigurationProviders(); // [5]
init_FilterInitParameters() ; // [6]  web.xml文件
init_AliasStandardObjects() ; // [7]  - Bean加载 


default.properties 在这个文件中定义了struts2框架所使用的常量.

struts-default.xml文件中定义bean,result,intercepter等信息
struts-pulgin.xml 它是strust框架的插件.
struts.xml文件,它用于自定义配置
struts.properties 自定义配置  (很少用)
web.xml文件,它加载的是filter的init-param信息.

总结:加载顺序
1.default.properties文件
2.加载  struts-default.xml文件
3.struts.xml文件
4.web.xml

-----------------------------------------------------------------------------------
struts.xml文件配置(Action的配置)

关于三个标签作用:
1.<package>
它用于声明一个包.
属性 :extends 它用于描述当前package继承自哪一个package  一般情况下它取的值为  struts-default,这个包是在struts-default.xml文件中声明
属性: name 这是包名,可以用于被其它包继承使用.

属性:namespace  它与<action>标签的name属性组合以确定访问哪一个Action。  namespace可以不写,默认值为"/" 如果写了,就必须以"/"开头

2.<action>标签

属性:name  与<package>的namespace组合确定访问哪一个Action
属性:class  它对应的是一个Action类.它的值是类的全名.  class可以不写,默认值为com.opensymphony.xwork2.ActionSupport
属性:method  它代表访问的是Action中的哪一个方法 method也可以不写,默认值为 execute ,这个方法默认返回"success"

3.<result>标签
它代表的是返回的结果集
属性:name 与Acton的方法返回值对应,以确定跳转到哪个位置.  name也可以不写,默认值为"success"
属性:type 它用于设置跳转方式  type的默认值是dispatcher 代表请求转发.


默认Action 和 Action的默认处理类 
1) 默认Action , 解决客户端访问Action不存在的问题 ,客户端访问Action, Action找不到,默认Action 就会执行 
<default-action-ref name="action元素的name" />


2) 默认处理类 ,客户端访问Action,已经找到匹配<action>元素,但是<action>元素没有class属性,执行默认处理类 
<default-class-ref class="完全类名" />
* 在struts-default.xml 配置默认处理类 ActionSupport


默认的Action:解决了当我们访问一个Action时,不存在问题.
Action的默认处理类:解决了在<action>的配置中没有class的问题。
默认访问的是ActionSupport,我们可以通过<default-class-ref class="完全类名" />来设置默认访问的Action。
-----------------------------------------------------------------------------------------------------------
Action名称搜索
1.获得请求路径的URI,例如url是:
      http://server/struts2/path1/path2/path3/test.action
2.首先寻找namespace为/path1/path2/path3的package,
 如果存在这个package,则在这个package中寻找名字为test的action,
 如果不存在这个package则转步骤3;
3.寻找namespace为/path1/path2的package,
 如果存在这个package,则在这个package中寻找名字为test的action,
 如果不存在这个package,则转步骤4;
4.寻找namespace为/path1的package,
 如果存在这个package,则在这个package中寻找名字为test的action,
 如果仍然不存在这个package,就去默认的namaspace的package下面去找名
 字为test的action(默认的命名空间为空字符串“/” ),
如果还是找不到,页面提示找不到action。

================================================================================================================
struts2的常量配置
在struts2框架中首先加载的是一个default.properties文件,在这个文件中定义了当前框架所使用的常量 。

1.怎样设置?
1.在struts.xml文件中配置(最常用)
<constant name="struts.i18n.encoding" value="utf-8"></constant>

2.自定义一个struts.prperties文件(不常用)
在src下创建一个properties文件,文件的内容
struts.i18n.encoding=utf-8
3.在web.xml文件中配置
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>utf-8</param-value>
</init-param>

2.常用常量有哪些?
  指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker 、velocity的输出
<constant name="struts.i18n.encoding" value="UTF-8"/>

  该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
  如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开
<constant name="struts.action.extension" value="action"/>

  设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 
<constant name="struts.serve.static.browserCache" value="false"/>


  当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 
<constant name="struts.configuration.xml.reload" value="true"/>


  开发模式下使用,这样可以打印出更详细的错误信息 
<constant name="struts.devMode" value="true" />

  默认的视图主题 
<constant name="struts.ui.theme" value="simple" />


 与spring集成时,指定由spring负责action对象的创建 
<constant name="struts.objectFactory" value="spring" />
  该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性
  为 false
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
  上传文件的大小限制
<constant name="struts.multipart.maxSize" value=“10701096"/>
 
---------------------------------------------------------------------------
struts.xml文件的分离
通过 <include file="struts-part1.xml"/> 将struts2 配置文件 拆分
在开发中,可以针对一个模块做一个xml配置文件,在struts.xml文件中使用include导入其它的xml文件。

==========================================================================================================================
Action类

当从浏览器发送请求,StrutsPrepareAndExecuteFilter拦截请求,将这些请求分发到每一个Action类。

Action创建有三种方式:
1.创建一个Pojo类
2.创建一个类实现Action接口(com.opensymphony.xwork2.Action;)
3.创建一个类继承自ActionSupport类.(com.opensymphony.xwork2.ActionSupport)

分析优缺点:
1.第一种方式 pojo类
优点:耦合度低
缺点:没有任何附加功能,所有功能都需要自己实现.

2.第二种方式  实现Action接口
优点:在Action接口中定义了五种视图.
public static final String SUCCESS = "success";  // 数据处理成功 (成功页面)
public static final String NONE = "none";  // 页面不跳转  return null; 效果一样
public static final String ERROR = "error";  // 数据处理发送错误 (错误页面)
public static final String INPUT = "input"; // 用户输入数据有误,通常用于表单数据校验 (输入页面)
public static final String LOGIN = "login"; // 主要权限认证 (登陆页面)


缺点:有一定的耦合性,功能提供过少.

3.第三种方式  继承ActionSupport类.
ActionSupport实现了Action接口,它也具有了五种视图
在Action中使用 表单校验、错误信息设置、读取国际化信息 三个功能


优点:提供了丰富的功能
缺点:相对来说,耦合度高。

---------------------------------------------------------------------------------
访问Action
想要访问一个Action,只需要请求路径与struts.xml配置文件中的
namespace+name匹配就可以访问一个Action,通过method指定访问哪一个方法。

注意:对于Action中的方法,要求返回值必须进String类型,无参数。

1.通配符访问
<action name="book_*" class="cn.itcast.action.BookAction"
method="{1}">
<result>/success.jsp</result>
</action>

访问时路径是  book_add 也就是说,*代表的是add,在method上使用了{1}来描述方法名,这时它代表的是add

------------------------------------------------------------------
<action name="*_*" class="cn.itcast.action.{1}Action"
method="{2}">
<result>/success.jsp</result>
</action>

访问的路径是  Book_add 这时class值中使用了{1},这个值就是Book  method使用了{2}它的值就是add


2.动态方法调用
http://localhost:8080/struts2_day011/book!update
http://localhost:8080/struts2_day011/product!update

在action的名称后面加上 !方法名就可以访问到Action中的指定方法.

在default.properties中配置了动态方法调用是否允许
struts.enable.DynamicMethodInvocation = true 默认是允许动态方法调用的.

------------------------------------------------------------------------
在Action中获取Servlet API

1.ActionContext获取
获取到的不是真正的ServletAPI,而是Map集合.

要想使用ActionContext,首先要获取到   ActionContxt.getContext();

1.getParameters(); 获取请求参数  相当于request.getParameterMap()方法.
2.getApplication()
3.getSession();
4.actionContext.put("company", "传智播客"); / actionContext.get("company") 对request范围存取数据 

2.通过接口注入方式(真正的servlet Api)
ServletContextAware : 注入ServletContext对象
ServletRequestAware :注入 request对象
ServletResponseAware : 注入response对象


3.通过ServletActionContext获取.(真正的servlet Api)

ServletActionContext中提供了静态方法可以获取Servlet API

ServletActionContext是ActionContext的子类.

-----------------------------------------------------------------------------------------
Result结果类型
在struts.xml文件中的<action>标签下有下个子标签叫<result>

<result> 标签的type属性可取的值:
在struts-default.xml文件中有关于result的配置.

<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
</result-types>

常用:
chain        相当于转发,它是在Action与Action之间跳转 
dispatcher   请求转发  --一般是转发到页面
redirect     重定向  ---一般重定向到页面
redirectAction    相当于重定向,它是在Action之间跳转.
stream   完成下载操作
工作中用到:
freemarker
velocity
xslt
plainText
   httpheader


顶 0踩 0收藏
文章评论
    发表评论

    个人资料

    • 昵称: jun
    • 等级: 资深程序员
    • 积分: 1523
    • 代码: 94 个
    • 文章: 24 篇
    • 随想: 0 条
    • 访问: 7 次
    • 关注

    最新提问

      站长推荐