版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.简介Struts2是Struts的下一代产品,是在struts1和WebWork的技术基础上进行了合并的全新的Struts2框架。其全新的Struts2的体系结构与Struts1的体系结构差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,2.Struts2处理流程用户请求用户请求根据请求的url找到actionAction业务处理,处理请求,返回处理结果根据请求的url找到actionAction业务处理,处理请求,返回处理结果前端控制器StrutsPreparedAndExecuteFilter拦截用户请求响应用户处理后的html结果数据传递给jspJsp页面渲染结果返回处理结果响应用户处理后的html结果数据传递给jspJsp页面渲染结果返回处理结果3.Struts2基础<include>可以把struts配置分为相应的struts.xml文件<package>中的属性namespace可以把action分包,用来解决不同项目的同名action<action>中的method属性决定action调用action业务类的那个方法,根据方法的返回值跳到名字队对应的result结果集中除了Metnod调用指定的方法为还有一种动态调用1.在请求的页面就指定调用的action名称及方法,语法:actionName!methodName.action,action可以省略,2.在<action>使用通配符,<actionname=”house_*”>....<result>其名字可以自行定义,根据业务类返回的值,对应相应的result官方定义的有success,login,error,input等其中的type属性可以决定转向类型,默认的是dispatcher(转发)其他的是redirect,请求重定向的指定的URL,redirectAction重定向到指定的Action,chain:将请求转发到指定的Action,json返回JSON对象如果result的内容不是一个具体的jsp页面而是${}形式的这就是动态结果的配置,就是结果页面在配置是不能确定,需要在运行时才能确定,比如管理员和普通用户登录,详细的动态结果配置详见资料Action类实现的方法有三种继承ActionSupport(常用)2.实现Action接口3.自己编写方法Action接收参数1属性方式接收参数,2Javabean方式接收参数(常用)3.moderlDriven方式接收参数Struts2访问servletAPI的方法在jsp课程中,服务器保存数据的作用域通常有request,session,application,他们对应的servletAPI分别是HttpServletRequest,HttpSession,servletContext,同样在struts2控制器(action)中也需要访问这些作用域,有三种方法1.使用ActionContext类提供的方法以依然注入(IoC)方式访问,实现响应的接口即可使用以耦合方式使用ServletActionContext类访问OGNL与struts标签引入的标签指令<%@tagliburi="/struts-tags"prefix="s"%>理解值栈(存储action属性的地方)和stackcontext(存储request,session的地方)概念,并且使用<s:debug>查看值栈访问的值OGNL访问集合知识点,不常用字符串转换OGNL表达式用户%{}相反的加’’单引号Struts2标签可分为通用标签,控制标签,Ajax标签通用标签又分为数据标签和控制标签数据标签:<s:property><s:debug><s:date><s:set><s:url>和<s:a><s:param><s:include>控制标签<s:if>,<s:elseif><s:else><s:iterator>UI标签理解模板与主题,模板用于生成HTML代码,共同风格和观感的模板组织到一起就成了一个主题,内建的主题有simple,xhtml,css_xhtml(默认),css_xhtml,ajax主题的更改用标签属性theme=”simple”标签:<s:form><s:textfield><s:textarea><s:submit><s:select><s:doubleselect>下拉列框和联动列框属性及实现参观相关代码Ajax标签Datetimepicker是一个日历控件导入相应的包引入<%@tagliburi="/struts-dojo-tags"prefix="sx"%>指令在<head>中添加<sx:headparseContent="true"/>添加标签<sx:datetimepickername="timer"label="发布时间"/>4.数据校验数据校验分为客户端验证和服务器端验证,sruts2对服务器端的验证有两种,1.使用actionsupport编码实现验证2.使用验证框架实现验证,使用actionsupport编码进行验证的方法有三种,1.直接在action类业务方法中验证,2.重写validate()方法实现验证,3.使用validateXXX()方法实现验证验证的关键点在于当用户名或密码没填写时添加addFieldError()方法,此方法处理与字段相关的错误,比如输入的年龄不合理,响应的jsp输出错误的标签是<s:fielderrorfieldname=”/>,addActionError()方法是用来添加与action所处理的业务相关的错误信息,在JSP输出错误的标签是<s:actionerror>如果两种情况有任何一种错误(hasErrors())就return到INPUT结果集中(事先已经配置好)使用验证框架使用特定的配置框架即可,命名的前半部分是action的名字,可对全局和局部进行验证!具体查看相关资料5.拦截器拦截器,在AOP(Aspect-OrientedProgramming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略谈到拦截器,还有一个词大家应该知道——拦截器链(InterceptorChain,在Struts2中称为拦截器栈InterceptorStack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。struts2拦截器是action调用之前或之后调用的代码拦截器实现原理:大部分时候,拦截器方法都是通过代理的方式来调用的。Struts2的拦截器实现相对简单。当请求到达Struts2的ServletDispatcher时,Struts2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器返回类型区别struts2中关于result的返回类型一般我们是转发到一个jsp页面或者是html页面等,但是struts2中的result的返回类型还有redirect,redirectAction,chain。对于这三种返回类型之间肯定是有区别的,下面我们来看看关于redirectredirectActionchain这三种struts2的返回类型之间的区别。当使用type=“redirectAction”或type=“redirect”提交到一个action并且需要传递一个参数时。这里是有区别的:使用type=“redirectAction”时,结果就只能写Action的配置名,不能带有后缀:“.action”拦截器的配置定义拦截器的标签<interceptor>定义拦截器栈的标签<interceptor-stack>引用拦截器<interceptor-ref>默认的拦截器<default-interceptor-ref>自定义拦截器实现自定义拦截器类的方式有3种实现Interceptor接口继承AbstractInterceptor抽象类(常用)继承MethodFilterIntercePtor类具体用法参见帮助文档6.MVC的优缺点优点1各司其职,互不干涉并行开发,提高效率有利于组件的重用缺点系统结构和实现比较复杂视图与控制器过于紧密不适用于小型甚至中等规模的应用程序7.Struts2注解必要的jar包
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
commons-logging-1.1.1.jar
commons-logging-api.jar
freemarker-2.3.15.jar
ognl-2.7.3.jar
struts2-core-.jar
xwork-core-2.1.6.jar
struts2-convention-plugin-.jar
其中struts2-convention-plugin-2.x.x.jar是用于支持注解的2.web.xml的配置:[html]
\o"viewplain"viewplain
\o"copy"\t"/bits00/article/details/_blank"copy
\o"print"\t"/bits00/article/details/_blank"print\o"?"?<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.test.action</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.struts.xml的配置:[html]
\o"viewplain"viewplain
\o"copy"\t"/bits00/article/details/_blank"copy
\o"print"\t"/bits00/article/details/_blank"print\o"?"?<?xml
version="1.0"
encoding="UTF-8"
?>
<!DOCTYPE
struts
PUBLIC
"-//Apache
Software
Foundation//DTD
Struts
Configuration
2.1.7//EN"
"/dtds/struts-2.1.7.dtd">
<struts>
<!--
请求参数的编码方式
-->
<constant
name="struts.i18n.encoding"
value="UTF-8"
/>
<!--
指定被struts2处理的请求后缀类型。多个用逗号隔开
-->
<constant
name="struts.action.extension"
value="action,do,htm"
/>
<!--
当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开
-->
<constant
name="struts.configuration.xml.reload"
value="true"
/>
<!--
是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开
-->
<constant
name="struts.devMode"
value="false"
/>
<!--
设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭
-->
<constant
name="struts.serve.static.browserCache"
value="false"
/>
<!--
指定由spring负责action对象的创建
<constant
name="struts.objectFactory"
value="spring"
/>
-->
<!--
是否开启动态方法调用
-->
<constant
name="struts.enable.DynamicMethodInvocation"
value="false"
/>
</struts>
4.常用的注解如下:Namespace:指定命名空间。
ParentPackage:指定父包。
Result:提供了Action结果的映射。(一个结果的映射)
Results:“Result”注解列表
ResultPath:指定结果页面的基路径。
Action:指定Action的访问URL。
Actions:“Action”注解列表。
ExceptionMapping:指定异常映射。(映射一个声明异常)
ExceptionMappings:一级声明异常的数组。
InterceptorRef:拦截器引用。
InterceptorRefs:拦截器引用组。5.示例代码如下:那些类会被作为Action,
对于Convention插件而言,它会自动搜索位于action,actions,struts,struts2包下的所有java类,
Convention插件会把如下两种java类当成Action处理
①类名以XXXAction命令。
②继承ActionSuppot。6.查看struts2配置
为了看到struts2应用里的Action等各种资源的影射情况,struts2提供了ConfigBrowser插件。
使用方法:将struts2-config-browser-plugin-2.1.6.jar文件复制到struts2应用的WEB-INF/lib目录中。
打开首页地址:http://localhost:8080/应用名字/config-browser/actionNames.action这里可以看到ConfigBrowser插件的首页。7.详解1、Action级的注解
@ParentPackage--父包
该注解相当于<packagename="login"extends="struts-default"></package>中的extends属性,例如:@ParentPackage(value="struts-default")
@Namespace----命名空间
该注解相当于<packagename="login"extends="struts-default"namespace="logintest"></package>中的namespace属性,例如:@@Namespace(value="/longspace")
@Result---转向该注解相当于<actionname="login"class="com.lwsoft.action.LoginAction">
<resultname="success">/loginsuc.jsp</result>
</action>中的<resultname="success">/loginsuc.jsp</result>
例如:@Result(name="success",location="/loginsuc.jsp",type="redirect")!!!注意,在struts2.1.6中是location来转向页面,而在struts2.0.4是value属性
@Results来配置多个转向
@Results({
@Result(name="success",location="/usersuc.jsp"),
@Result(name="error",location="/usererror.jsp")
})以上是对struts2注解简单的介绍,要想在Action上使用注解,还得修web.xml文件中的一些配置<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<!--
//固定格式-->
<param-name>actionPackages</param-name>
<init-param>
<!--
action所在的包,如果在多个包中,用逗号隔开
com.struts2.action1,com.struts.action2--><param-value>com.struts2.action</param-value>
</init-param>
</filter>
@Results({
@Result(name="input"value="/input.jsp"type=NullResult.class),
@Reuslt(name="success"value="/success.jsp"type=NullResult.class),
@Result(name="error"value="/error.jsp"type=NullResult.class)
})
上面是一个典型的多Result配置,name属性指定返回的字符串,value指定要跳转的页面,type指定Result的类型,type是一个很重要的属性,他有一下几种情况:
1)NullResult
:默认的可以省略
2)ActionChainResult:用于从一个Action跳转到另外一个Action。例如:@Result
(name="search",value="search",type=ActionChainResult.class,params={"method","search"})
这个配置是如果返回值为"search"就跳转掉SearchAction的search方法,如果不指定params就跳转到SearchAction的execute方法
3)StreamResult:用于文件下载。例如:
@Result
(name="success",value="inputStream",type=StreamResult.class,params={"bufferSize",FileConstant.DOWNLOAD_BUFFER_SIZE})
案例package
com.tjcyjd.web.action;
import
org.apache.struts2.convention.annotation.Action;
import
org.apache.struts2.convention.annotation.ExceptionMapping;
import
org.apache.struts2.convention.annotation.ExceptionMappings;
import
org.apache.struts2.convention.annotation.Namespace;
import
org.apache.struts2.convention.annotation.ParentPackage;
import
org.apache.struts2.convention.annotation.Result;
import
org.apache.struts2.convention.annotation.Results;
import
com.opensymphony.xwork2.ActionSupport;
/**
*
Struts2基于注解的Action配置
*
*/
@ParentPackage("struts-default")
@Namespace("/annotation_test")
@Results({
@Result(name
=
"success",
location
=
"/main.jsp"),
@Result(name
=
"error",
location
=
"/error.jsp")
})
@ExceptionMapping
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电工电子技术(第3版) 课件 1.1 认识电路
- 银行员工培训制度
- 银行金融业务创新管理制度
- 门诊消毒隔离制度
- 幼儿园致家长公开信(35篇)
- 艺术与设计学院服装设计专业服装美学心理学
- 河北省大名一中2025届高考数学五模试卷含解析
- 云南省保山市云县一中2025届高三下学期一模考试英语试题含解析
- 2025届安徽省“江南十校”高三第六次模拟考试语文试卷含解析
- 辽阳市重点中学2025届高三第六次模拟考试数学试卷含解析
- 2021-2022学年度西城区五年级上册英语期末考试试题
- 《组织行为学》(本)形考任务1-4
- 广东省广州市白云区2022-2023学年九年级上学期期末语文试题
- 剧本-进入黑夜的漫长旅程
- DB43-T 958.3-2023 实验用小型猪 第3部分:配合饲料
- 化肥购销合同范本正规范本(通用版)
- 健康管理专业职业生涯规划书
- 外墙岩棉板施工方案
- 吊装葫芦施工方案
- 自动化设备调试规范
- 石瘕的护理查房
评论
0/150
提交评论