Struts2.1.6和2.0.14的区别
struts2.0升级到struts2.1.6遇到的问题汇总

struts2.0升级到struts2.1.6遇到的问题汇总最近项目从struts2.0升级struts2.1,改动还真不少,这里把升级过程中遇到的问题都记录下来:问题一web.xml的变化struts2.1中的写法为:<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsP repareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></fil ter-mapping>问题二零配置的变化在struts2.0中,一直使用的是codebehind插件,在struts2.1中已废弃codebehind,改用convention插件,这个插件使用比较简单,根据官方的文档很全,很容易就能上手,这里把我convention的参数写下来:struts.convention.result.path=/WEB-INF/jsp/.lowercase=false.separator=struts.convention.default.parent.package=defaultstruts.convention.package.locators.basePackage=com.mysite.web.action问题三tabbedPanel标签一直在使用struts2.0中的s:tabbedPanel标签,这个标签使用的是dojo脚本框架,在struts2.0中是自带的,struts2开发小组在struts2.1中把dojo做为插件的形式存在,对应的写法也发生了变化,下面是struts2.1中的写法:<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>……<sx:head/><sx:tabbedpanel id="tabbedpanel1" cssStyle="width: 100%; height: 100% " doLayout="true" ><sx:div id="column1" label="栏目一" loadingText="加载中……"href="url1.action" cssStyle="display:none"></sx:div><sx:div id="column2" label="栏目二" loadingText="加载中……"href="url2.action" cssStyle="display:none"></sx:div></sx:tabbedpanel>问题四乱码问题原来在struts2.0里面正常的内容,在struts2.1.6中会乱码,struts2.1.6居然还敢声称GA 版,这种bug都有,汗一个,从官方找到的解决办法,修改strut2.1.6源文件org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,把doFilter 方法中由:prepare.createActionContext(request, response);prepare.assignDispatcherToThread();prepare.setEncodingAndLocale(request, response);改为:prepare.setEncodingAndLocale(request, response);prepare.createActionContext(request, response);prepare.assignDispatcherToThread();不想修改源文件的话,把StrutsPrepareAndExecuteFilter类的代码copy一份,然后web.xml配置成你copy的这份也可以问题五could not be resolved as acollection/array/map/enumeration/iterator type在s:select,s:s:checkboxlist标签中使用集合,如果集合为空时,会报这个错误,在struts2.0中不会报这个错误问题六float类型变量值为0.0时,设置set方法时出错目前没有发现好的解决方法,替待解决方法是去掉set方法,提交页面需要设置值时,通过request.getAttribute方式获取还有一些其他问题,还在整理中……。
struts2

—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境
搭建Struts2环境时,我们一般需要做以下几个步骤的工作: 1》找到开发Struts2应用需要使用到的jar文件. 2》编写Struts2的配置文件 3》在web.xml中加入Struts2 MVC框架启动配置
北京传智播客教育
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
搭建Struts2开发环境--Struts2在web中的启动配置
在struts1.x中, struts框架是通过Servlet启动的.在struts2中, struts框架是通过Filter启动的.他在web.xml中的配置如下:
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
讲师: 讲师:黎活明
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
Struts2
Struts2是在WebWork2基础发展而来的.和struts1一样, Struts2也属于MVC框架. 不过有一点大家需要注意的是:尽管Struts2和struts1在名字上的差别不是很大,但 Struts2和struts1在代码编写风格上几乎是不一样的.那么既然有了struts1,为何还要 推出struts2.主要是因为struts2有以下优点:
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
第一个Struts2应用--HelloWorld
在默认的配置文件struts.xml 中加入如下配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd"> <struts> <package name="itcast" namespace="/test" extends="struts-default"> <action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="execute" > <result name="success">/WEB-INF/page/hello.jsp</result> </action> </package> </struts>
struts2

1.strust2框架来历简介:WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的J2EE Web框架。
(同时也是一个成熟的基于Web的MVC框架)MVC:Model View Controller,model是模型,view是视图,controller是控制器,是一种框架模式。
随着WebWork框架的发展,衍生出了strust2框架,因此strust2框架是WebWork的升级,而不是一个全新的框架,因此稳点性、性能等方面都有很好的保证,而且也同时吸收了struts1框架和WebWork俩者的优点.所以strust2框架也是一个基于Web的MVC框架注意:strust2框架并不是struts1框架的延续或者升级,俩者有着很大的不同2.web项目中的三层架构(和MVC是俩个完全不同的架构)1.表示层(Struts2框架就是工作在这个地方)2.业务逻辑层(service层,处理业务逻辑,比如判断用户名是否存在、密码是否正确、权限是否拥有、账号是否被冻结、账号是否异常、用户积分是否到达操作要求等等,多为一些执行某一个操作条件的判断)3.数据访问层(dao层,专门处理和数据库进行交换的事情,jdbc/hibernate就在这里使用)在项目中,这些不同的分层的表现形式,其实就是在我们自己建的不同的package 中写上各自分层中所使用的java类.比如在项目中我们建了三个package,三个package中java类的作用分别为表示层的代码、业务逻辑层代码、数据访问层代码。
注意:可以理解为,MVC架构是这里说描述的三层架构的一部分,即:三层架构中的表示层可以使用mvc架构的框架来实现,例如使用struts2框架.3.使用struts2框架的好处(为什么要使用struts2框架)减少编程人员代码的编写,使代码更加简洁明了,缩短开发时间,增加开发效率.4.struts2框架引入到web项目中首先使用Eclipse/MyEclipse中建一个web项目.1.把struts2相关jar包引入到项目中。
STRUTS2.0框架技术详解

15.3.1 Struts2.0 标记列表(Tag List).................................................................... 21 15.3.2 常用 Struts2.0 标记的应用................................................................................ 24
15.2 Struts 2 框架技术概述............................................ห้องสมุดไป่ตู้..................................................................... 6
15.2.1 Struts 1 和 Struts 2 的对比............................................................................... 7 15.2.2 Struts1 的 MVC 实现............................................................................................... 8 15.2.3 Struts 2 的简单实现........................................................................................... 17
struts2框架学习

struts2框架学习一个使用struts2框架的小应用本应用是一个简单的Struts 2应用:用户进入一个登录页面,允许用户输入用户名和密码,在页面加入了用JavaScript写的简单校验,如果用户名和密码符合要求,则进入一个登录成功页面,同时跟踪名为Session的用户状态信息,登录失败进入一个登录失败页面。
如果登录成功可以根据Session的用户状态信息,点击按钮列出一个包含演员名字的表单,如果在登录失败的情况下点击按钮时则转到登录页面。
一、下载和安装Struts 2框架本文用的Struts 2框架是GA版struts-2.0.14。
如果Struts 2有最新的GA版,也可以下载最新的。
登录/download.cgi站点,下载Struts 2的最新GA版。
建议下载Struts 2的完整版。
将下载到的ZIP文件解压,得到的文件夹包含如下的文件结构:Apps:该文件夹下包含了基于struts2的示例应用。
Docs:该文件夹下包含了Struts2的相关文档,包括Struts2的快速入门,API文档等内容。
Lib:该文件夹下包含了Struts2框架的核心类库,以及Struts2的第三方插件类库。
Src:该文件夹下包含了Struts2框架的全部源代码。
安装TOMCA T,本文用的TOMCA T版本是tomcat-5.5.27。
安装JDK,本文用的JDK版本为1.5。
二、创建WEB应用为了更加清楚Struts2应用的核心,所以不使用IDE工具来建立这个应用,将徒手建立这个应用。
1、在tomcat的webapps目录下新建一个工程目录Struts2qs,再在这个目录下建立一个WEB-INF目录。
(本文tomcat的安装目录为D:\Program Files\apache-tomcat-5.5.27\)2、在tomcat里或者任何的WEB容器内,找到任何一个web应用,将web应用的WEB-INF目录下的web.xml文件(例如:D:\ProgramFiles\apache-tomcat-5.5.27\webapps\ROOT\WEB-INF目录下的web.xml文件)复制到第一步建立的WEB-INF目录下。
Struts2知识点总结

1.简介Struts 2是Struts 的下一代产品,是在 struts 1和WebWork 的技术基础上进行了合并的全新的Struts 2框架。
其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。
Struts 2以WebWork 为核心,采用拦截器的机制来处理用户的请求,2.Struts2处理流程3.Struts2基础<include >可以把struts 配置分为相应的struts.xml 文件<package >中的属性namespace 可以把action 分包,用来解决不同项目的同名action <action>中的method 属性决定action 调用action 业务类的那个方法,根据方法的返回值跳到名字队对应的result 结果集中除了Metnod 调用指定的方法为还有一种动态调用1.在请求的页面就指定调用的action 名称及方法,语法:actionName!methodName.action,action 可以省略,2.在<action>使用通配符, <action name=”house_*”>....<result >其名字可以自行定义,根据业务类返回的值,对应相应的result 官方定义的有success,login,error,input 等其中的type 属性可以决定转向类型,默认的是dispatcher(转发)其他前端控制器 StrutsPreparedAndExec uteFilter 拦截用户请求 用户请求 Action 业务处理,处理请求,返回处理结果 根据请求的url 找到action 返回处理结果 Jsp 页面 渲染结果结果数据传递给jsp 处理后的html 响应用户的是redirect,请求重定向的指定的URL,redirectAction重定向到指定的Action,chain:将请求转发到指定的Action,json返回JSON对象如果result的内容不是一个具体的jsp页面而是${}形式的这就是动态结果的配置,就是结果页面在配置是不能确定,需要在运行时才能确定,比如管理员和普通用户登录,详细的动态结果配置详见资料Action类实现的方法有三种1.继承ActionSupport (常用)2.实现Action接口3.自己编写方法Action接收参数1属性方式接收参数,2Javabean方式接收参数(常用)3.moderlDriven方式接收参数Struts2访问servletAPI的方法在jsp课程中,服务器保存数据的作用域通常有request,session,application,他们对应的servletAPI 分别是HttpServletRequest,HttpSession,servletContext,同样在struts2控制器(action)中也需要访问这些作用域,有三种方法1.使用ActionContext类提供的方法2.以依然注入(IoC)方式访问,实现响应的接口即可3.使用以耦合方式使用ServletActionContext类访问OGNL与struts标签引入的标签指令<%@taglib uri="/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是一个日历控件导入相应的包引入<%@taglib uri="/struts-dojo-tags" prefix="sx"%>指令在<head>中添加<sx:head parseContent="true"/>添加标签<sx:datetimepicker name="timer" label="发布时间"/>4.数据校验数据校验分为客户端验证和服务器端验证,sruts2对服务器端的验证有两种,1.使用actionsupport编码实现验证2.使用验证框架实现验证,使用actionsupport编码进行验证的方法有三种,1.直接在action类业务方法中验证,2.重写validate()方法实现验证,3.使用validateXXX()方法实现验证验证的关键点在于当用户名或密码没填写时添加addFieldError()方法,此方法处理与字段相关的错误,比如输入的年龄不合理,响应的jsp输出错误的标签是<s:fielderror fieldname=”/>, addActionError()方法是用来添加与action所处理的业务相关的错误信息,在JSP输出错误的标签是<s:actionerror>如果两种情况有任何一种错误(hasErrors())就return到INPUT结果集中(事先已经配置好) 使用验证框架使用特定的配置框架即可,命名的前半部分是action 的名字,可对全局和局部进行验证!具体查看相关资料5.拦截器拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。
struts1和struts2原理以及区别

Mvc设计模式:Mvc是一种软件设计模式,代表了一种多层的应用程序实现方式,mvc模式将应用程序实现分为三个不同的基本部分。
模型:表示数据和业务处理视图:是用户看到并与之交互的界面控制器:接受用户的输入并调用模型和视图去完成用户的请求。
Mvc的处理过程:首先控制器接受用户的请求,并决定应该调用哪个模型来进行处理,然后模型处理用户的请求并返回数据,最后控制器确定用相应的视图将模型返回的数据呈现给用户。
Struts1是mvc设计模式的一个优秀实现。
Struts定义了通用的controller,通过一个配置文件隔离了model和view,以Action的概念对用户请求做了封装。
Struts2以webwork优秀的设计思想为核心,吸收了struts框架的部分优点,提供了一个更加整洁的mvc设计模式实现的web应用程序框架。
Struts2 提供了一个更加整洁的MVC设计模式设实现的web应用程序框架。
Struts1执行过程:1、Web容器启动的时候,ActionServlet被初始化,加载struts-config.xml配置文件。
2、当客户端浏览器发起请求到ActionServlet时,ActionServlet对请求进行处理。
根据请求的路劲和配置信息找到对应的Action和ActionForm。
3、在确定将要调用的Action和对应的ActionForm后,就讲请求中包含的值填充到ActionForm 中。
在调用Action的execute方法前,ActionServlet还需要准备好ActionMapping参数。
4、Action调用业务逻辑方法,得到返回值,并返回ActionForward对象。
5、控制权重新回到ActionServlet,ActionServlet根据Action返回的ActionForward对象转发到相应的页面。
6、处理结果返回给浏览器。
Struts2执行过程:1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求2 这个请求经过一个的过滤器链(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy5 ActionProxy通过Configuration Manager(配置管理器)从配置文件读取配置信息,找到需要调用的Action类6 ActionProxy创建一个ActionInvocation的实例。
Struts2的学习自我总结

Struts2的学习⾃我总结
Struts2是⼀个轻量的的开源的框架,可以实现mvc的模式,起初struts和webwork两家公司都存在,后来strus的技术要落后⼀些,但是使⽤⼈群⽐较⼴泛,为了避免今后struts被淘汰,struts公司和webwork公司两家合并了,然后有了现在的struts2,struts2和struts有很⼤的区别。
struts2的⼯作流程是这么去⾛的.⾸先,客户端(client)发起⼀个请求(request)给服务器(server),服务器接受了请求之后⾸先通过http协议找到所请求的这个项⽬(webapplication),
找到这个项⽬之后项⽬会去访问web.xml中的配置,然后在配置中找到了struts2的配置之后,会去根据filter中的配置去找对应的配置⽂件,然后找到了strut.xml,然后根据struts.xml配置中的namespace下的action去找对应的返回结果(result)再去反馈给客户端。
今天把struts2的⼀个简单的项⽬部署到服务器之后,运⾏之后报null指针,然后上⽹查询相关的资料,发现时struts-2.1.6版本有⼀个bug,只要配置⽂件的常量(<constant>)设置成<constant name="struts.devMode" value="true" />就不能正常的运⾏,要想使项⽬能够正常的运⾏起来要么就是去掉tomcat安装路径下的空格,要么换⼀个struts2的版本,或者将value的值改成false。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
查看文章Struts2.1.6必须注意的几点2009-09-23 20:44看完《Sturts2权威指南》的前三章,也看了一些Sturts2的文章。
等到自己写个登录验证Demo时候却总是有想不到的问题,登录了一个钟头也没有登录成功,相当郁闷,就是按照书上还有当的那些资料上做的,但是为什么就不成功呢?后来想到肯定是版本问题。
因为那些资料的版本都太低,我用的版本是Struts2.1.6,再有Jar包导入有问题,不知道具体导哪些,有时候导多了,就出问题,因为少配置文件。
但是从官方列子中导入那些jar包还是有问题。
上班时候在网上撒网狂搜,终于找到点解决办法,下班后重新导入jar包问题果然解决了,下面我就把我这个登陆验证遇到的问题总结下来,希望对大家有帮助,也让大家少走我那样的弯路。
觉得挺简单,但是处理起来却不是那么容易,感觉和实际往往相差太大距离。
废话不说了,下面我就把该注意的地方写下来:首先是Jar包问题,Struts2.1.6的jar包和Struts2.0版本的有区别,如果你和我一样用的是Struts2.1.6的话,导入以下6个jar包:struts2-core-2.1.6.jarfreemarker-2.3.13.jarcommons-logging-1.0.4.jarognl-2.6.11.jarxwork-2.1.2.jarcommons-fileupload-1.2.1.jarStruts 2.1.6的最小jar包配置比Struts2.0.14多了一个commons-fileupload-1.2.1.jar。
如果要使用Struts2的注释功能,在Struts2.0.14中只要引用了struts2-core-2.1.6.jar文件即可,而在struts2.1.6中还需要引用struts2-convention-plugin-2.1.6.jar文件,而且注释类的包也变了(又增加了一些新的注释类),Struts2.0.14中的注释类在org.apache.struts2.config包中,而struts2.1.6的注释类在org.apache.struts2.convention.annotation包中。
除此之外,有些注释的属性名也变了,如Result注释在struts2.0.14中有一个value属性,表示一个要转入的URL,而在Struts2.1.6的Result注释中使用location属性代替了value属性(不再有value属性了),但它们的使用方法相同。
接下来配置WEB.XML文件这是《Struts2权威指南》上和网上大多数人说的配法<filter><filter-name>struts2</filter-name><filter-class>org.apache.Struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>但是在Struts2.1.6中最好将org.apache.Struts2.dispatcher.FilterDispatcher改为org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter也就是<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>接下来就是Struts.xml文件,此文件应该放在classes目录下,也就是工程的src目录下,和struts1不同不是和web.xml一样放在WEB-INF目录下。
<action name="login" class="lee.LoginAction"><result name="success">/success.jsp</result><result name="error">/error.jsp</result></action>action中的name等同于Struts1 action中的path 但是和Struts1不同的是name前不加“/”接下来是配置动态方法调用,所谓动态方法调用指的是一个Action中有多个方法,系统根据表单元素给定的action来访问不同的方法,而不用写多个Action。
和Struts1继承DispartureAction一样可以在一个类中写多个Action。
但是Struts2中不是在Struts.xml配置中添加Parameter参数而是下面这样<package name="Struts2Demo" extends="struts-default"><action name="loginAction" class="lee.LoginAction"><result name="success">/success.jsp</result><result name="error">/error.jsp</result></action><action name="addUserAction" class="lee.LoginAction"method="addUser"><result name="success">/success.jsp</result></action><action name="deleteUserAction" class="lee.LoginAction"method="deleteUser"><result name="success">/success.jsp</result></action></package>下面为一个相对应的Action 类package lee;public class LoginAction {private String userName;private String passWord;public String getPassWord() {return passWord;}public void setPassWord(String passWord) { this.passWord = passWord;}public String getUserName() {return userName;}public void setUserName(String userName) { erName = userName;}/*** 默认登录方法*/public String execute() throws Exception { System.out.println("this is login Action");if (getUserName().equals("xueying") && getPassWord().equals("xueying")) {return "success";} else {return "error";}}/*** Add user* @return* @throws Exception*/public String addUser() throws Exception{System.out.print("this is add Action");return "success";}/*** delete User* @return* @throws Exception*/public String deleteUser() throws Exception{System.out.print("this is delete Action");return "success";}}为同一个类配置多个Action 在action中指定method参数method对应类中相应方法的名称。
name为页面调用时的名称。
不指定method就会调用默认的execute()方法注意:要使用动态方法调用,必须设置Struts2允许动态方法调用,通过设置struts.enable.DynamicMethodInvocation常量来完成,该常量属性的默认值是true。
Index.jsp如下<%@ taglib uri="/struts-tags" prefix="s" %> 导入标签文件<body><s:form method="post" action="loginAction"><s:textfield name="userName"></s:textfield><s:password name="passWord"></s:password><s:submit></s:submit></s:form><a href="addUserAction.action" >add user1</a><br/><a href="/Struts2Demo/addUserAction.action" >add user2</a><br/><a href="/Struts2Demo/login!addUserAction.action" >add user3</a></body>调用addUser方法可以是上面三种链接方式中的任意一种。