2014-08-12|2142阅|作者:jun|举报 摘要: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