安装与设置
1.解压struts
2.
3.1.2,假设解压后位于d:\struts2目录
2.安装MyEclipse,任何版本都可以
3.假设你已经安装好jdk和tomcat了,如d:\tomcat
HelloWorld
1.建立项目
a)打开eclipse
b)新建项目
c)选择myeclipse-java enterprise projects-web project
d)项目名称:s2_0100_introduction
e)选择java ee 5.0
2.设定server
a)window – preferences – myeclipse – servers – tomcat – 6.x
b)选择tomcat home directory
c)选择enable
d)finish
3.设定jdk环境
a)window – preferences – java – installed jres
b)如果没有对应的JDK(不是JRE),选择add
c)选择standard VM -> next
d)选择JDK对应的Directory
e)将刚刚设定的JDK设为默认
4.建立第一个struts2.3的程序
a)找到struts目录下对应的apps目录
b)解压struts2-blank-2.3.1.2.war
c)Copy对应的lib的jar文件,需要除junit和spring-test之外的所有文件,其中
commons-io的jar包会在文件上传和下载时需要,其他为必须
d)Copy对应的struts.xml到src目录,在package explorer视图进行操作
e)注释掉struts.xml的多余内容
f)建立Hellos2_1.jsp文件
g)*修改jsp文件的默认编码属性window-preferences-web-jspfiles-设为
Chinese,National Standard
h)在struts.xml中照原配置进行对应的配置
i)修改对应的web.xml,建立struts2的filter(参考struts自带的项目)
5.运行项目
a)可以首先部署到tomcat上项目
b)也可以项目右键debug as – myeclipse server app,选择刚刚建立好的server
6.其他
a)学习建立struts的dev-mode,好处在于我们修改了配置文件的时候能够自动热替
换
b)建立jar文件对应的源码D:/share/tools/struts-2.3.1.2/src/core/src/main/java,以及
xwork对应的源码,以及对应的javadoc location,(更好的方式是建立自己的
user-library)
c)浏览struts的目录
d)认识eclipse jee的项目部署目录,认识如何修改webapp的context-root,项目copy
改名后可能会出现的问题
e)package explorer –建立jar的源文件和目标关联,navigator –观察所有的内容
f)认识Action的后缀名,在struts2默认中,带不带action都可以
struts.xml常量配置:
Internationalizetion(国际化) i18n
struts.i18n.encoding=UTF-8 WEB应用默认编码集
struts.action.extension=action,, action扩展名
struts.devMode = false 是否开发模式
struts.i18n.reload=false
struts.configuration.xml.reload=false
struts.ognl.allowStaticMethodAccess=false
struts.custom.i18n.resources=testmessages,testmessages2
struts.enable.DynamicMethodInvocation = true
struts.mapper.alwaysSelectFullNamespace=false
struts.serve.static.browserCache=true
常见问题:
1.struts.xml不自动提示
a)window – preferences –搜索catalog – add
b)选择key type为URI
c)key: https://www.wendangku.net/doc/cd7062417.html,/dtds/struts-2.0.dtd
d)location: 对应的dtd文件,位于struts-core包中,解压开,指定相应位置,如:
struts-2.3.1.2\lib\struts2-core-2.3.1.2\struts-2.0.dtd
2.导入示例项目
a)注意JDK的版本,应该是JDK6,否则会出class version的问题
b)如果总是项目出问题,可以重建项目,单独拷文件
c)还有一种情况是项目右键,properties – java – compiler 选择6.0
d)另外,在tomcat配置中也要使用jdk6
3.devMode设为true就会出问题空指针问题
a)tomcat路径带了空格
b)
Action
1.实现一个Action的最常用方式:
a)普通类POJO
b)Action接口
c)ActionSupport继承
2.DMI动态方法调用!
http://localhost:8888/Struts2-02/
namespace/login!lisiexecute.action
黄色:
绿色(必须的):
蓝色:
紫色:
?user=zhangsan&pwd=123
3.Method属性
4.通配符配置* {1} {2} …
a)*_*
5.默认action处理
Result
1.常用四种类型:
a)dispatcher(默认,与JSP整合的类型)
b)redirect(直接跳转到的其他URL的类型)
c)chain(action链式处理结果类型)
d)redirectAction(直接跳转到其他action)
2.全局结果集
a)global-results | extends
3.动态结果(了解)
a)在action中保存一个属性,存储具体的结果location
4.传递参数
a)客户端跳转才需要传递
b)${}表达式(不是EL)
c)
6.接收参数的方法(一般用属性或者DomainModel来接收)
7.简单参数验证addFieldError
a)一般不使用Struts2的UI标签
8.访问Web元素
a)Map类型
i.IoC()
RequestAware,SessionAware,ApplicationAware
ii.依赖Struts2
ActionContext.getContext().getSession().put("user",
user.getName());//取得map的session
ActionContext.getContext().getApplication();//取
得map的Application
b)原始类型
i.IoC
implements ServletContextAware,ServletRequestAware ii.依赖Struts2
ServletActionContext.getResponse().addCookie(null);
9.包含文件配置
1.Object Graph Navigation Language
2.想初始化domain model,可以自己new,也可以传参数值,但这时候需要保持参数为
空的构造方法
3.其他参考ognl.jsp
4.什么时候在stack中会有两个Action?chain
Struts-Tags
1.通用标签:
a)property
b)set
i.默认为action scope,会将值放入request和ActionContext中
ii.page、request、session、application
c)bean
d)include(对中文文件支持有问题,不建议使用,如需包含,改用jsp包含)
e)param
f)debug
2.控制标签
a)if elseif else
b)iterator
i.collections map enumeration iterator array
c)subset
3.UI标签
a)theme
i.simple xhtml(默认) css_xhtml ajax
4.$ # %的区别
a)$用于i18n和struts配置文件
b)#取得ActionContext的值
c)%将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用
i.参考 作业 1.读doc文档:struts-tags 2.设计约定(编码规定) a)原则:简单就是美 b)库名:项目名 c)表的命名:_Model名 d)字段:保持和属性名一致(尽量不要起名和数据库命名冲突) e)用层来划分包action model(bean) service dto(vo) f)Action XXXXAction g)*-* h)/ i)/admin j)package “action” adminAction 项目开发顺序 1.建立界面原型 2.建立Struts.xml a)确定namespace b)确定package c)确定Action的名称,空的方法 d)确定Result e)将界面原型页面进行修改,匹配现有设置 f)测试 g)做好规划!!!!! 3.建立数据库(或者实体类) 4.建立Model层 5.建立Service层(后面讲了Hibernate后再完善) a)此时可以使用JUnit进行单元测试了 6.着手开发 声明式异常处理 1.在Actoin中进行异常映射 2.在package中进行全局异常映射 3.使用继承共用异常映射 4.Struts2中异常处理由拦截器实现(观察struts-default.xml) a)实际上Struts2的大多数功能都由拦截器实现 I18N 1.I18N原理 a)ResourceBundle和Locale的概念 b)资源文件 c)native2ascii 2.Struts的资源文件 a)Action – Package – App级 b)一般只用APP i.struts.xml custom.i18n c)PropertiesEditor插件 i.解压 ii.features plugin 覆盖到myeclipse中的eclipse目录里 d)动态语言切换 i.request_locale=en_US zh_CN Struts拦截器以及源码解析 1.Struts架构图 a)见文档 2.Struts执行过程分析 3.Interceptor拦截器过程模拟 4.定义自己的拦截器 a)acegi – spring security 5.使用token拦截器控制重复提交(很少用) 6.类型转换 a)默认转换 i.日期处理 b)写自己的转换器: public class MyPointConverter extends DefaultTypeConverter{ @Override public Object convertValue(Object value, Class toType) { if(toType == Point.class) { Point p = new Point(); String[] strs = (String[])value; String[] xy = strs[0].split(","); p.x = Integer.parseInt(xy[0]); p.y = Integer.parseInt(xy[1]); return p; } if(toType == String.class) { return value.toString(); } return super.convertValue(value, toType); } } public class MyPointConverter extends StrutsTypeConverter{ @Override public Object convertFromString(Map context, String[] values, Class toClass) { Point p = new Point(); String[] strs = (String[])values; String[] xy = strs[0].split(","); p.x = Integer.parseInt(xy[0]); p.y = Integer.parseInt(xy[1]); return p; } @Override public String convertToString(Map context, Object o) { // TODO Auto-generated method stub return o.toString(); } } c)三种注册方式: i.局部:XXXAction-conversion.properties 1.p(属性名称) = converter ii.全局:xwork-conversion.properties https://www.wendangku.net/doc/cd7062417.html,.xxx.XXX(类名)= converter d)如果遇到非常麻烦的映射转换 i.request.setAttribute(); ii.session 1.验证框架 2.UI标签 3.类型转换中的异常处理 4. 5. 6. 7. 8.上传与下载文件 Struts2总结 1.Action a)namespace(掌握) b)path(掌握) c)DMI(掌握) d)wildcard(掌握) e)接收参数(掌握前两种) f)访问request等(掌握Map IOC方式) g)简单数据验证(掌握addFieldError和 2.Result a)结果类型(掌握四种,重点两种) b)全局结果(掌握) c)动态结果(了解) 3.OGNL表达式(精通) a)# % $ 4.Struts标签 a)掌握常用的 5.声明式异常处理(了解) 6.I18N(了解) 7.CRUD的过程(最重要是设计与规划)(精通) 8.Interceptor的原理(掌握) 9.类型转换(掌握默认,了解自定义) 2012年第11卷第6期 产业与科技论坛2012.(11).6 Industrial &Science Tribune Struts2框架工作原理及应用体会 □宋 君 张家爱 【摘要】通过针对特定用户的分析,搭建以Struts2为技术核心的旅行社管理系统。本文简单的介绍了MVC 、 Struts2的工作原理,同时总结了在项目制作过程中所得到的心得。 【关键词】 Struts2;MVC ;FilterDispatcher ;Action 【基金项目】本文为大学生科技创新院级基金项目(编号:2011070)成果 【作者单位】宋君,吉林农业科技学院信息工程学院;张家爱,吉林农业科技学院信息工程学院教师 本着锻炼自我与积极参与到实用性技术的目标,以发掘自身创新意识为前提。利用空闲时间,在老师的指导下,进行了一次大学生创新项目的实践性活动。本着实用原则,以某中小旅行社为客户(根据用户需求,匿名),以Struts2框架为基点,进行了一次旅行社管理系统的开发。在项目结束之余, 特将在项目过程中经历的种种认识进行了简单的总结,希望让阅读本文的朋友们,更多的参与到此类活动中。 一、基础思想— ——MVC 简述作为时下经典框架之一, MVC 具有其独特的价值。MVC 框架简单的说,就是将数据模型与用户视图进行分离。通过控制器进行协调处理的一种结构是框架。同时,也是本文中要讨论的Sturts2框架的基础思想。 M 是指模型层(Model ),V 是指用户视图(View ),C 则是指控制器 (Controller )。这种划分方式是以将模型层与视图层进行代码分离,从而降低两者之间的耦合性,使同一程序可以使用不同形式进行表现。不同层之间的修改不会或尽量少的印象到其他层功能的史前为前提。有效的提高的代码的维护性和设计难度。 图1 二、 Struts2工作原理(一)Struts2框架组成。Struts2框架由三个主要部分组成:核心控制器、业务控制器,以及由用户实现的业务逻辑组件。这里我们将侧重于核心控制器与业务控制器的理解与说明。 (二)核心控制器:FilterDispatcher 。FilterDispatcher 是Struts2框架的核心控制器,在此,我们可以将FilterDispatcher 看作一个类似于过滤网的过滤器。当用户发出请求,并到达Web 硬哟那种时,该过滤器会过滤用户请求。如果用户请求的结尾为action ,则将该请求转入Struts2框架进行处理。当Struts2框架获得了*.actio 请求后,会根据请求前面“*”的那部分内容,决定调用哪个业务逻辑组件作为响应单位。这里需要说明的是Struts2用来处理用户请求的Action 实例并不是业务控制器,而是作为Action 的代理———正因为Struts2的一大特点,与Servlet API 的非耦合性,使得用户实现的业务控制器无法直接处理用户请求。有效的提高了后期调试维护的效率。而Struts2框架再次提供了了一系列的拦截器。这些拦截器负责将HttpServletRequest 请求的参数解析出来,传入Action 中,并毁掉Action 的Execute 方法来处理用户请求。用户实现的Action 类仅作为Struts2的Action 代理的代理目标。用户实现的业务控制器则包含了对用户请求的处理。用户的请求数据包含在HttpServletRequest 对象中,而用户的Action 类无需访问HttpServletRequest 对象。拦截器负责将HttpServletRequest 里的请求数据解析出来,并传给业务逻辑组件Action 实例。 (三)业务控制器。业务控制器就是前文提到的用来实现用户Action 的实力,这里的每个Action 类通常包含有一个execute 方法,当业务控制器处理完用户的请求后,该方法将会针对此次处理返回一个字符串— ——该字符串就是一个逻辑树图名。当程序开发人员开发出系统所需要的业务控制器后,还需要针对性的配置Struts2的Action ,即需要配置Ac- tion 的以下三个部分:(1)Action 所处理的URl 。(2)Action 组件所对应的实现类。(3)Action 里包含的逻辑试图和物理资源之间的对应关系。每个Action 都要处理一个用户请求,而用户请求则总是包含有指定的URL 。当核心控制器过滤用户请求,并调用后,根据请求的URL 和Action 处理URL 之间的对应关系来处理转发。 · 342· Struts2学习之二--Struts2标签介绍 热12已有 14625 次阅读 2009-07-12 18:53 [顶]3G移动--Android开发工程师全能班 (转) Struts2学习之二--Struts2标签介绍 在上一篇文章《为Struts 2.0做好准备》中,我过于详细地介绍了Struts 2.0开发环境和运行环境的配置,所以,本文很少涉及的以上两方面的细节。如果,您看完《为Struts 2.0做好准备》后,还有什么不明白,或者没法运行文中例子,请联系我。我的E-MAIL:Max.M.Yuan@https://www.wendangku.net/doc/cd7062417.html,。 在介绍常用标志前,我想先从总体上,对Struts 1.x与Struts 2.0的标志库(Tag Library)作比较。 分类将标志库按功能 分成HTML、Tiles、 Logic和Bean等 几部分 严格上来说,没有分类,所有标志都在URI 为“/struts-tags”命名空间下,不过, 我们可以从功能上将其分为两大类:非UI 标志和UI标志 表达式语言(expression languages)不支持嵌入语言 (EL) OGNL、JSTL、Groovy和Velcity 以上表格,纯属个人总结,如有所不足或错误,请不吝指正 好了,我要开始介绍“常用”(这里所谓的“常用”,是指在已往工作中使用Struts里经常用到的)的标志了。 1.非UI标志 o if、elseif和else 描述: 执行基本的条件流转。 参数: 名称必 需 默 认 类型描述备注 test 是Boolean 决定标志里内容是否 显示的表达式 else标志 没有这个 参数 id 否Object/String 用来标识元素的id。在UI和表单中为HTML的id属性 例子: <%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> 在Struts 2中实现文件上传 前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题,所以今天我们就来讨论一下这个问题。 实现原理 Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。 具体实现 前段时间Apache发布了Struts 2.0.6 GA,所以本文的实现是以该版本的Struts 作为框架的。以下是例子所依赖类包的列表: 清单1 依赖类包的列表 首先,创建文件上传页面FileUpload.jsp,内容如下: <% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncodi ng = " utf-8 " %> <% @ taglib prefix = " s " uri = " /struts-tags " %> Struts2框架工作原理及应用体会
Struts2学习之二--Struts2标签介绍
Condition Flow
Java多方式实现文件上传
阐述struts2的执行流程。 Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action 和用户实现的企业业务逻辑组件。 核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理 机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2 是WebWork的升级版本。 基本简要流程如下: 1、客户端浏览器发出HTTP请求。 2、根据web.xml配置,该请求被FilterDispatcher接收。 3、根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton。 4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。 5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到 相应页面。 6、返回HTTP响应到客户端浏览器。 工作原理 在Struts2框架中的处理大概分为以下几个步骤 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否 需要调用某个Action 4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action 类 6 ActionProxy创建一个ActionInvocation的实例。 7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP
Struts2项目的构建与配置 1.配置struts.xml (1)配置struts.xml可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的 参考项目的struts.xml文件。 (2)主要的配置如下:
一、 1、struts2 struts2是mvc设计思想的一个实现,可以将项目低耦合,提高扩展性 2、struts2和struts1的区别 struts2不是struts1的升级,而是继承的下xwork的血统,它吸收了struts1和webwork 的优势。 struts2的action是原型,安全的,struts2的action是单例,非安全 3、步骤: 1、导入包 2、在web.xml文件中,加入struts2的核心拦截器 3、在src下放入struts2的xml struts.xml 4、url http://localhost:8080/Struts2_01_HelloWorld/demo/hello.action 二、 1、默认值 2、转发和重定向的区别 转发:url显示的依然是上一个的url,共享上一次的请求 重定向:url显示的是下一个的url,不共享 3、url http://localhost:8080/Struts2_02_Default/demo/hello.action 4、路径 http://localhost:8080/Struts2_02_Default/demo/a/b/c/hello.action 1、原路径找不到,http://localhost:8080/Struts2_02_Default/demo/a/b/hello.action 2、如果1找不到,http://localhost:8080/Struts2_02_Default/demo/a/hello.action 3、如果2找不到,http://localhost:8080/Struts2_02_Default/demo/hello.action 3、如果3找不到,http://localhost:8080/Struts2_02_Default/hello.action 三、 11、自定义action
在很多Web应用中,为了完成不同的工作,一个HTML form标签中可能有两个或多个submit 按钮,如下面的代码所示: