Structs2学习宝典

合集下载

Struts2小知识点

Struts2小知识点

Struts2简要总结1、S truts2框架简介Struts2是Struts1的下一代产品,是建立在Struts1和WebWork技术基础上的合并的全新框架;在体系结构方面,Struts1和Struts2差别巨大,Struts2以WebWork 为核心,采用拦截器机制处理用户请求,使业务逻辑控制器能够与Servlet API脱离开,所以Struts2可以理解为WebWork的更新产品,也就是说Webwork和Struts2只有很小的变化,而Struts2和Struts1的变化很大。

2、M VC简介MVC是模型(Model)-视图(View)-控制器(Controller)三层架构的简称,3、S truts2流程1)Struts2框架的大致处理流程:①浏览器发出请求,例如请求/login.action等。

②核心控制器FilterDispatcher根据请求决定调用合适的Action。

③ Struts2的拦截器链自动对请求应用通用功能,例如workflow、validation或文件上传等功能。

④回调Action的execute方法,该execute方法先获取用户请求参数,然后执行某种数据库操作,既可以将数据保存到数据库,也可以数据库中检索信息。

实际上,因为Action只是一个控制器,它会调用业务逻辑组件来处理用户请求。

⑤ Action的execute方法处理结果信息将被输出到浏览器中,可以是HTML页面,图像,也可以是PDF文档或者其它文档。

此时支持的视图技术非常多,既支持JSP,也支持Velocity,FreeMarker等模板技术。

2)流程简介:橘黄色的部分,如:ActionContextCleanUp和Other Filters(SiteMesh,etc)和FilterDispatcher,属于过滤器层,由这三个过滤器组成过滤器链;蓝色的部分是Struts2框架的核心部分,比如Action代理,相应的配置和ActionMapper等等;绿色的是相应的拦截器,在Action执行前和执行后都要调用;浅黄色的部分是开发人员或者用户在使用框架的时候需要实现的部分,比如配置文件,Action,还有页面等当一个初始的请求到达Servlet容器,这个请求要先经过相应的一系列的标准的过滤器链的处理,最重要的是Filter Dispatcher过滤器,前面的两个过滤器在集成相应的插件的时候会用到(对页面的布局、描述进行统一的控制的时候会用到这些插件),如果请求并不使用相应的插件,那么请求会经过Filter Dispatcher过滤器,Filter Dispatcher作为核心过滤器会接受请求,然后询问ActionMapper来确定请求的Action是否应该被调用,如果请求的Action需要被调用的话,Filter Dispatche核心过滤器就会把核心控制权委派给相应的Action代理(ActionProxy),ActionProxy会询问Action框架的配置管理器(Configuration Manager,由Struts2框架提供的),而Configuration Manager的工作是由Struts.xml这样的一个配置文件来管理的(由开发人员提供,即请求该由那些资源来处理,处理后的结果是怎样的都是由开发人员在Struts.xml配置文件中配置的),那么通过配置文件和配置管理器后,Action代理(ActionProxy)会创建一个实现了命令模式的Action Invocation,实现了Action Invocation后,Action Invocation会在调用真正的业务控制器Action之前一次调用相应的Interceptor拦截器,然后执行Action,把结果会生成一个相应的响应页面(可以是JSP、FreeMarker等等),在执行完响应以后还会一次经过相应的拦截器,执行顺序跟执行Action前正好是相反的,然后响应会通过相应的过滤器链回到客户端,用户接收到响应呈现出最终的结果,也就是说通过过滤器链进来然后生成响应后又通过过滤器链返回到客户端,这就是Struts2框架的处理流程。

struts2自学完全文档

struts2自学完全文档

一.Struts2基础知识1. struts2的特点及配置1.1struts2与struts1的比较1)在软件设计上struts2没有struts1那样跟ServletApi和StrutsApi有着紧密的耦合,Struts2的应用可以不因爱ServletApi和StrutsApi.struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计public class OrderListAction ectends Action//struts依赖于java2)Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能3)Struts2提供了类型转换器,我们可以把特殊的请求参数转换成我们需要的类型,在struts1中,如果我们实现同样的功能,就必须向struts1的底层实现BeanUtil注册类型转换器4)Struts2提供了支持多种表现层技术,如JSp,freeMarker等5)Struts2的输入校验可以对指定方法进行校验,解决了Struts的长久之疼6)提供了全局范围,包范围和Action范围的国际化资源文件管理实现1.2搭建struts2的开发环境1)新建web项目2)导入必要的包3)写配置文件Struts2默认的配置文件为Struts.xml,该文件需要存放在WEB-INF/classes下,该文件的配置模板如下(在m yeclipse中放在src目录下就可以了)模板在D:\Program Files\struts-2.3.4.1-all\struts-2.3.4.1\apps 解压struts2-blank.var再打开web-info/classes中的struts.x m l文件即可<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration2.3//EN""/dtds/struts-2.3.dtd"><struts></struts>4)在web.xm l中加入Struts2MVC框架启动配置在struts1.x中struts框架是通过Servlet启动的,在struts2中,struts框架式通过Filter 启动的,他在web.xm l中的配置如下:(D:\Program Files\struts-2.3.4.1-all\struts-2.3.4.1\apps 解压struts2-blank.var再打开Web-Info\web.xm l即可)<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.Str utsPrepareAndExecuteFilter</filter-class><!—自从struts2.1.3以后,下面的FilterDispatcher已经标注为过时<filter-class>org.apache.struts2.dispatcher.ng.filter.FilterDispather</filter-class> --></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>在StrutsPrepareAndEXecuteFilter()方法中将会读取类路径下的默认文件struts.xml完成初始化操作。

structs2

structs2
10
IoC方式
要使用IoC方式,我们首先要告诉IoC容器 (Container)想取得某个对象的意愿,通 过实现相应的接口做到这点
11
Acபைடு நூலகம்ionContext
一次Action调用都会创建一个ActionContext 调用:ActionContext context = ActionContext.getContext() 在structs2中,它通过包装提供了对Servlet的访问:
22
“%”符号
“%”符号的用途是在标志的属性为字符串 类型时,计算OGNL表达式的值。例如在 Ognl.jsp中加入以下代码 "%{#foobar['foo1']}"
23
“$”有两个主要的用途
用于在国际化资源文件中,引用OGNL表达 式 在Struts 2配置文件中,引用OGNL表达式
国际化支持
1 resource bundle per action
pervasive UI support for retrieving messages
8
Action
如果我要取得Servlet API中的一些对象, 如request、response或session等,应该 怎么做?这里的execute不像Struts 1.x的 那样在参数中引入。开发Web应用程序当然 免不了跟这些对象打交道。在Strutx 2.0你 可以有两种方式获得这些对象:非IoC(控 制反转Inversion of Control)方式和IoC 方式
12
二、structs2原理
XWork2的层次:
ActionProxy ActionInvocation Action

struts2框架学习

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学习总结(完整版)

Struts2学习总结(完整版)

Struts2学习总结(完整版)⼀、搭建struts2环境1、jar包的导⼊主要是到解压其中的⼀个⼯程,得到⾥⾯lib下包含的jar包把这⾥的所有的jar包拷贝到项⽬的WEB-INF⽬录下的lib⽂件夹下⾯。

2、配置struts.xml⽂件注意:必须要放在src⽬录下,因为struts2源码就是这样设计的,只有在src⽬录下才读取得到。

每⼀个package都要extends=”struts-default”,namespace 是访问的路径Action中的name和 package中的namespace组成完整的访问路径3、配置web.xml<filter><filter-name>action2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>action2</filter-name><url-pattern>/*</url-pattern></filter-mapping>4、编写的Action类都要继承ActionSupport类或者implements Action接⼝默认action类访问的是⾥⾯的execute⽅法如果要访问特定的⽅法,可以这样:(1)在action 后⾯指定 method=“⽅法名”(2)使⽤通配符 <action name=”example_*” class=”com.XX.YY.ZZ” method=”{1}” />(3)使⽤动态表达式⽐如example!execute(不常⽤)5、接收表单提交的数据(1)属性驱动获取表单参数--在action类中定义与表单的input中 name ⼀样的属性(必须⼀样,否则注⼊不进去)同时还要⽣产属性对应的set ⽅法,因为 action类要调⽤set⽅法把表单中的参数注⼊到属性中(2)模型驱动获取表单参数--模型驱动⾸先action类要实现ModelDrivern,然后重写getModel⽅法--在action类中声明并创建接收表单参数的实体类(Student user = new Student())--原理分析:struts2调⽤action类的getModel⽅法,得到user对象,然后利⽤user对象⾥⾯的set属性的⽅法,设置user对象的属性值--注意,表单的参数name必须要跟Student的属性值⼀致,否则注⼊不进去。

Structs 2复习资料1

Structs 2复习资料1

客户端初始化一个指向Servlet容器的请求;请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器)接着FiterDispatcher询问ActionMapper来决定这个请求是否要调用Action如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxyActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action ActonProxy创建一个ActionInvocation的实例ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关的拦截器的调用一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到相应的返回结果Package:处于模块化的考虑,可将各种动作分门别类的组织成不同的包必须有一个name属性,namespace属性是可选的以“/”作为默认值,调用该包里的动作,必须将命名空间的添加到有关的URI字符串中使用extends扩展某一个包<package name="default" namespace="/" extends="struts-default"> Result元素:是<action>的子元素,指出动作完成后把控制权交给谁对应着动作方法的返回值;同一个action可以有多个result;结果和方法返回值之间的映射关系有result的name属性负责建立,默认值是:success;如果某方法返回一个值,而该值没有与之匹配的result,structs 将尝试在global-results元素下为它匹配结果,再找不到就抛出异常可以在struts.xml文件里利用constant元素来覆盖default.properties 文件里的某个设置POJ O:plain and old Java Object动作类需要遵循的规则遵守JavaBeans属性名的命名规则;必须有一个不带任何参数的构造器;每个动作类至少有一个方法供struts在执行时调用(默认为execute)同一个动作类可以包含多个方法;编写动作类可以不考虑线程安全的问题Action的作用得到请求参数;调用逻辑处理类处理业务;返回String类型结果Action的一些重要元素ActionContext 数据环境需要为每个Action准备一个数据环境获取与Web容器相关的对象Interceptor 丰富的层次结构使用类似责任链的设计模式对Action的责任进行分类并连接起来Result 执行结果执行结果被抽象成一个层次,可以定义任意类型的View层的构造ActionProxy 执行环境需要一个类似调度器的产品将上面的元素整合起来ActionInvocation 调度者ActionProxy接口中有个比较特殊的变量:ActionInvocation,它就是Action的调度者,负责一些列的调度动作可以继承一下5个静态字段SUCCESS NONE ERROR INPUT LOGIN ActionSupport类ServletActionContext对象getRequest() 返回HttpServetRequest对象getSession()getResponse()getServletContext()result 的type属性默认为dispatcher,含义是把控制权转交给某个JSp页面type的其他常用类型:Redirect 重定向到另一个URLRedirectAction 重定向到另一个动作Session的创建和使用private Map session;public void setSession(Map session) {this.session = session;}public String execute() {this.session.put("USER_NAME", "Test User 1");return SUCCESS;}}Map session = invocation.getInvocationContext().getSession();OGNL:对象图形导航语言表达式:ONGL就是表达式,用简洁直观的语法表达想法。

struts2学习笔记

struts2学习笔记
Байду номын сангаас
struts2 的处理流程: 核心控制器(StrutsPrepareAndExecuteFilter)--->Interceptor--->action---->业务逻辑层--->dao 层
一.struts2 核心文件 struts.xml 的配置
<package name="struts2" namespace="" extends="struts-default"> <action name="sum" class="com.alex.FirstAction"> <result name="positive">/positive.jsp</result> <result name="negative">/negative.jsp</result> </action> <constant name="struts.action.extension" value="jun,lu"/> <!--指定需要 Struts 2 处理的请求后缀,多个之间用逗号分开--> <constant name="struts.enable.DynamicMethodInvocation" value="false"/> <!--关闭动态方法调用。--> <constant name="struts.custom.i18n.resources" value="message"/> </package> 说明:space 声明命名空间。这里和表单提交的要保持一致。例如: namespace="/mystruts" 那么在表单提交的时候应该<s:form action="mystruts/sum.action" > namespace="" 那么在表单提交的时候应该<s:form action="sum.action" > 2.<action name="sum" class="com.alex.FirstAction"> class 便是对应的 Action 类 name 对应 action 的唯一标识。和表单提交时保持一致。例如: name="yj" 那么在表单提交的时候应该<s:form action="yj" > 3.<result name="positive">/positive.jsp</result> 判断跳到哪一个页面,其中 name 是唯一标识。和"com.alex.FirstAction"的返回值进 行对比。相同就跳到相应的页面 4. <constant name="struts.custom.i18n.resources" value="message"/> 配置常量 资源文件--> 1.Action 范围:类名.properties (在国际化的时候,那么就应该是:类名_zh_CN.properties ) //配置一些类型转换错误信息和其他的信息 2.包范围:package.properties 需要放在包下面,只能被该包和子包访问 (在国际化的时候,那么就应该是:package_zh_CN.properties ) 3.全局范围:通过 struts.custom.i18n.resources 来定义全局资源文件,比如在 struts.xml 中配置: <constant name="struts.custom.i18n.resources" value="message"/> 那么全局资源文件就是 message.properties

struts2学习笔记

struts2学习笔记
6. Struts2 使用了新的 OGNL 的表达式语言,可以访问值栈,在对集合和索引属性的支持上功能更强大。
7. Struts1 的配置文件只需 struts-config.xml;Struts2 的配置文件有 struts.xml 和 struts.properties。struts.properties 中有两个 struts.devMode = fase 和 struts.configuration.xml.reload = true 很可爱,分别设置当前是开发还是生产模式,以及 struts.xml 改变后是否自动重新加载,免去了改配置手工重启应用的必须步骤。
Struts2 学习笔记(四)
1. 按这个顺序加载 Struts2 的常量,struts-default.xml、struts-plugin.xml、struts.xml、web.xml;后加载的会覆盖前面的同名常量。强烈不推荐在 web.xml 中配置 Struts2 常量。
2. Struts1 中有一种 Action 类型是 ForwardAction,而在 Struts2 中相应的配置方式是 <action name="Showcase"><result>/showcase.jsp</result></action>,Showcase.action 直接映射到 /showcase.jsp。
3. Struts1 的 Action 须继承抽象 Action 类,侵入了 Servlet API;而 Struts2 的 Action 可以实现 ActionSupport,或者只要一个纯净的 POJO 来充当,完全与 Servlet 绝缘。也因此带来测试性 Struts2 要比 Struts1 强,可把 Struts TestCase 扔到一旁去了。

Struts2的学习自我总结

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。

Struts2学习笔记

Struts2学习笔记

struts2学习笔记Struts2 框架第一天今天重点内容: 1、什么是Struts2框架?框架特性分析 2、 struts2 快速入门(分析struts2 运行原理) 3、 struts2 常用配置 4、如何访问Struts2 Action (Servlet) 5、 Struts2 结果集使用(响应跳转/ajax) 1. Struts2 框架概述1.1. 什么是struts2Struts2 框架问题:什么是框架?为什么要学习框架?框架是一些已经写好代码,通常和具体业务无关(可以看成:软件的半成品)学习框架,提高开发效率,简化开发(应用框架,实现代码代码开发实现开发标准化) javaEE三层结构在web阶段 DAO模式符合JAVAEE三层结构的三层结构出自 JavaEE规范(体系结构图)? 表现层? 业务层? 持久层/集成层Struts2 是一个表现层框架(简化表现层代码开发)分层开发:代码结构更加清晰,为了更好维护和扩展1.2. struts2 由来由两个框架优点合并后发展而来(struts1 + webwork)历史由来: Java兴起 98年(最早进行java开发分方向 j2se 、j2ee、 j2me ) J2EE 企业级应用软件开发2000 年左右出现struts1 (几乎所有开发人员都在用)随着互联网的发展struts1设计慢慢开始存有缺陷和不足 Webwork框架的出现该框架的设计思想比struts1 先进的多,例如:引入拦截器机制、 ognl 表达式语言 Apache 推出struts2 框架,特点: 开发流程类似struts1 ,内部结构类似webwork (struts2 和 webwork 源自xwork 命令模式框架)1.3. struts2 开发包结构使用框架,导入jar包课程使用 struts-2.3.15.3-all.zip 版本学习apps 使用demo (方便后期快速导入jar包和配置文件)开发中war重命名成zip包解压找到里面的13个核心jar包 doc 文档(学习struts2的官方官方规范文档) lib 开发struts2 需要的所有jar包 src 源代码开发struts2 没必要导入 lib下 128个jar包(去struts2_blank.war下方找struts2 最基本jar)将war包改为zip 扩展名,解压缩回顾jar记忆: 核心struts2-core-3.15.3.jar+ xwork-core+ognl (3) 上传(2jar) 日志: 2 jar 字符串 lang 1asm.* 3 jar 处理字节码信息 javassist.jar 1 代理相关 freemarker 1 jar 图形模板引擎开发strutrs2 基包导入web 工程!感谢您的阅读,祝您生活愉快。

Struts2知识点详解

Struts2知识点详解

Struts 2的基本流程Struts 2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。

在这3个部分里,Struts 2框架提供了核心控制器FilterDispatcher,而用户需要实现业务控制器和业务逻辑组件。

2.核心控制器:FilterDispatcherFilterDispatcher是Struts 2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求。

如果用户请求以action结尾,该请求将被转入Struts 2框架处理。

Struts 2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于login.action请求,Struts 2调用名为login的Action来处理该请求。

Struts 2应用中的Action都被定义在struts.xml文件中,在该文件中定义Action时,定义了该Action的name属性和class属性,其中name属性决定了该Action处理哪个用户请求,而class属性决定了该Action的实现类。

Struts 2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。

而Struts 2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action 的execute方法来处理用户请求。

显然,上面的处理过程是典型的AOP(面向切面编程)处理方式。

图3.19显示了这种处理模型。

图3.19 Struts 2的拦截器和Action从图3.19中可以看出,用户实现的Action类仅仅是Struts 2的Action代理的代理目标。

Struts 2讲义(一)

Struts 2讲义(一)

Struts 2入门讲义宋 铁11/2011CH 基本1. 2. 3. Str 1. 称作1体与内单应会导况更设计上讲务的深层页需意,中提和内H10. St 本内容Struts 2的由下载和搭建案例:基于ruts 2的Model 1早期的JSP 规作JSP Model 体系中,如图内容的分离,应用的需要,导致JSP 页内更为严重。

尽计人员开发并讲,将导致角Model 2体的方法。

它吸层次的处理任需要使用的b 在JSP 页内没提取动态内容内容,明确了truts 由来和概述。

Struts 2的运Struts 2的H 由来和概、Model 规范提出了两1 和JSP Mod 1所示,JSP 因为所以的它却不能满被嵌入大量尽管这对于Ja 并维护的――通角色定义不清体系结构,如吸取了两种技任务。

在这里ean 和对 象没有处理逻辑容插入静态模了角色的定义2(一)运行环境。

HelloWorld 程概述2和MVC 两种用JSP 技del 2,它们的P 页面独自响数据存取都是满足复杂的大的脚本片段或ava 程序员来通常这是开发清和职责分配图1.图2所示,是术各自的突出,servlets 充象,同时根据用辑;它仅负责模板。

在我看来义以及开发者)程序。

C技术建立应用的本质区别在响应请求并将是由bean 来型应用程序的或Java 代码,来说可能不是发大型项目的不明,给项 Model 1示是一种把JS 出优点,用J 充当控制者的用户的动作决责检索原先由来,这是一种与网页设计用程序的方式在于处理批量将处理结果返来完成的。

尽的实现。

不加,特别是当需是什么大 问题的规范――这项目管理带来示例图P 与servlets JSP 生成表达角色,负责管决定把那个J 由servlets 创建种有代表性的计者的分工。

式。

这两种方量请求的位置返回客户。

这尽管 Model 1加选择地随意需要处理的请题,但如果JS 这就确实是个来不必要的麻联合使用来达层的内 容,管理对请求的JSP 页传给请建的对象或 的方法,它清事实上,项方式在术语中置不同。

Structs2学习资料

Structs2学习资料

开发工具:MyEclipse6Web服务器:Tomcat6Struts版本:Struts2.0.11.1JDK版本:JDK1.5.0_12J2EE版本:Java EE5.0在本系列教程中Web工程的上下文路径都是struts2,如果在Web根目录有一个index.jsp文件,则访问路径如下:http://localhost:8080/struts2/index.jsp由于MyEclipse6目前并不支持Struts2,所以我们需要到去下载Struts2安装包。

要想正常使用Struts2,至少需要如下五个包(可能会因为Struts2的版本不同,包名略有差异,但包名的前半部是一样的)。

struts2-core-2.0.11.1.jarxwork-2.0.4.jarcommons-logging-1.0.4.jarfreemarker-2.3.8.jarognl-2.6.11.jarStruts2虽然在大版本号上是第二个版本,但基本上在配置和使用上已经完全颠覆了Struts1.x的方式(当然,Struts2仍然是基于MVC模式的,也是动作驱动的,可能这是唯一没变的东西)。

Struts2实际上是在Webwork基础上构建起来的MVC框架。

我们从Struts2的源代码中可以看到,有很多都是直接使用的xwork(Webwork的核心技术)的包。

既然从技术上来说Struts2是全新的框架,那么就让我们来学习一下这个新的框架的使用方法。

如果大家使用过Struts1.x,应该对建立基于Struts1.x的Web程序的基本步骤非常清楚。

让我们先来回顾一下建立基于Struts1.x的Web程序的基本步骤。

1.安装Struts。

由于Struts的入口点是ActionServlet,所以得在web.xml中配置一下这个Servlet。

2.编写Action类(一般从org.apache.struts.action.Action类继承)。

Struts2学习笔记-3

Struts2学习笔记-3

Struts学习1.3一、值栈a)struts2中的action是多实例的,每次请求都会创建一个Action的实例b)值栈是存放在request中的一个对象,ValueStack类是值栈的描述类。

c)获取值栈的方法:i.ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack")d)值栈存放对象的方法:i.vs.set("msg","提示信息");e)值栈分为对象栈和Map栈,对象栈的运行原理为:执行时,先把值放置到Map集合中,在把Map集合放置到List[对象栈]集合中二、Ognl表达式的用法a)“ # ”号的用法i.使用ognl表达式获取request、session、application中的值:1.<s:property value="#ername" />2.<s:property value="#ername" />3.<s:property value="#ername" />4.<s:property value="#application['username']" />5.<s:property value="#parameters.cid[0]" />6.<s:property value="#ername" />ii.使用上面的标签解释:1.从Request域中获取username的值-->${ername}2.从Session域中获取username的值-->${ername}3.从Application域中获取username的值-->${ername}4.上面第四个方法等同于第三个方法,只是表现形式不一样罢了5.request.getParameterValues("cid")[0]获取Request提交的所有名称为“cid”的参数,得到的是一个数组,使用[0]取得第0号角标的值6.#ername相当于${username}从四个作用域中依次找名称为username的属性iii.构造Map集合1.<s:radio name="sex" list="#{'male':'男','female':'女'}"></s:radio>b)“ # ”号的用法i.“ % ”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。

Struts2入门及配置(许业生)

Struts2入门及配置(许业生)

Struts2入门及环境配置虽然Struts2号称是一个全新的框架,但这仅仅是相对Struts 1而言。

Struts 2 与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架:WebWork基础上发展起来的。

从某种程度上来讲,Struts2没有继承Struts 1的血统,而是继承WebWork的血统。

或者说,WebWork衍生出了Struts2,而不是Struts 1衍生了Struts2。

因为Struts2是WebWork的升级,而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证:而且吸收了Struts 1和WebWork两者的优势,因此,是一个非常值得期待的框架。

Apache Struts2是一个优雅的,可扩展的JAVA EE web框架。

框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。

Apache Struts 2即是之前大家所熟知的WebWork 2。

在经历了几年的各自发展后,WebWork和Struts社区决定合二为一,也即是Struts 2Struts 2 英文官方网站:下面我们来用一个简单的实例来学习一下Struts2,大家都知道MyEclipse集成开发环境中对Struts1有了很好的支持,我们可以用MyEclipse就可以给项目添加Struts1支持,但是Struts2目前就没有什么好的工具可以直接给项目添加Struts2支持了,我们必须全部手动添加了,其实对与初学者我建议不要用工具进行生产,自己手动配置一下会让你对一个新技术有很好的理解。

先不多说了,下面我们开始吧!新建一个web项目,项目名称就叫Struts2,项目建好了,我们该给项目添加Struts2支持了吧,要引入很多jar包,这些jar包从哪里来呢!没关系,下面是目前最新版本Struts2.1.6官方下载地址:下载完毕后,我们将你下载的zip格式的文件解压,解压完了找到解压包里面的lib文件夹,里面包含了Struts2所有的jar文件。

Struts2知识点整理

Struts2知识点整理

Struts2一、struts入门Struts2是基于Struts1和Webwork,以Webwork(支持更多表现层)为核心的。

Struts1:只支持jsp表现层,不支持Freemarker和velocity;与servlet API耦合严重;属于侵入式设计。

Struts2鼓励基于M2模式(MVC设计模式)来开发程序-- Web应用程序中通过前端控制器来实现MVC应用程序的模型。

它是框架的表现层,是对MVC构架的具体实现:1, 视图层(V)2, 控制层(C)3, 模型层(M):P5 原理图运行环境:下载Struts2框架,解压,找到lib文件夹:存放Struts2核心库和第三方插件库核心JAR包:struts2-core-2.1.6.jar xwork-2.1.2.jar ongl-2.6.11.jar freemarker-2.3.13.jar commons-logging-1.0.4.jar commons-fileupload-1.2.1.jarstruts基本运行机制(Example1):web.xml: 配置struts2的核心控制器FilterDispatcher,FilterDispatcher用来拦截客户端请求并把请求转发到相应的Action类来处理。

(只要web应用加载了FilterDispatcher就可以获得整个struts2框架所提供的服务)。

struts.xml: struts2框架的配置文件,主要用于配置业务逻辑控制器Action以及Action中result的定义、Bean配置、常量配置、包配置和拦截器配置。

result的name属性值与Action的返回值相对应。

(也可用struts.properties)login.jsp部分代码<s: form action="checkLogin" namespace="/login"><s:textfield name="username" style="font-size:12px; width:120px;" label="登录名称" /> <s:password name="password" style="font-size:12px; width:120px;" label="登录密码" /> <s:submit value=" 登录" />web.xml 代码如下:<?xml version="1.0" encoding="UTF-8"?><web-app><display-name>first Struts 2 Project</display-name><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></web-app>注:<filter>元素用来指定要加载struts2框架的核心控制器FilterDispatcher;<filter-class>标签配置struts2核心Filter的实现类;<filter-mapping>元素用来指定让struts2框架处理用户的哪些请求(URL),当它的子元素<url-pattern>的值是*时表示用户的所有请求都使用此框架来处理。

开源框架:Structs2.0入门学习(1)

开源框架:Structs2.0入门学习(1)

开源框架:Structs2.0入门学习(1)1.下一个项目开发用structs2.0现在开始学习JAVA中的这个技术了!Struts 是一组相互协作的类、servlet 和 JSP 标记,它们组成一个可重用的MVC 2 设计。

这个定义表示Struts 是一个框架,而不是一个库,但Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。

● Client browser(客户浏览器)来自客户浏览器的每个 HTTP 请求创建一个事件。

Web 容器将用一个 HTTP 响应作出响应。

● Controller(控制器)控制器接收来自浏览器的请求,并决定将这个请求发往何处。

就Struts 而言,控制器是以 servlet 实现的一个命令设计模式。

struts-config.xml 文件配置控制器。

● 业务逻辑业务逻辑更新模型的状态,并帮助控制应用程序的流程。

就Struts 而言,这是通过作为实际业务逻辑“瘦”包装的Action 类完成的。

● Model(模型)的状态模型表示应用程序的状态。

业务对象更新应用程序的状态。

ActionForm bean 在会话级或请求级表示模型的状态,而不是在持久级。

JSP 文件使用 JSP 标记读取来自 ActionForm bean 的信息。

● View(视图)视图就是一个JSP 文件。

其中没有流程逻辑,没有业务逻辑,也没有模型信息-- 只有标记。

标记是使Struts 有别于其他框架(如Velocity)的因素之一。

Struts 的控制器是将事件(事件通常是HTTP post)映射到类的一个 servlet.正如您所料——控制器使用配置文件以使您不必对这些值进行硬编码。

时代变了,但方法依旧。

ActionForm 类ActionForm 维护 Web 应用程序的会话状态。

ActionForm 是一个抽象类,必须为每个输入表单模型创建该类的子类。

当我说输入表单模型时,是指 ActionForm 表示的是由 HTML 表单设置或更新的一般意义上的数据。

struts2基本学习教学

struts2基本学习教学

继续框架的学习:Struts2:MVC ←→SpringMVC (不要打架)Oracle:DB ←→MySQL (一些语法还是有差异的,不要打架) Hiberante:DAO ←→MyBatis (都是实现持久化的,不要打架)SSH整合的一个简单的CRUD案例!SSH: spring struts2 hibernate1,Struts2框架是一个MVC框架M(javabean) V(view) C(前端(核心)控制器,业务控制器)2,阐述Struts2的框架原理请求到达前端(核心)控制器从ActionMapper对象中查找ActionMapping对象获得ActionInvoker对象并执行Action返回视图3,在编写Struts2代码之前再介绍一个框架(了解)Struts2是Struts1的一个”延伸”(其实两个框架没有关系)其实Struts2的前身并不是struts1,它其实来自另一框架:webworkStruts1这个框架的控制器是Servlet,这个框架与servlet是严重耦合的!(ActionServlet)Struts1中的控制器是单例的!Struts2跟Servlet无关!Struts2中的控制器是多例的!4,开发Struts2的项目(学框架就是用别人的东西,学别人定义的规则)1)引入JAR包commons-fileupload-*.*.jar : 实现文件上传commons-logging-*.*.jar : apache下提供的一个日志包freemarker-*.*.jar : 提供视图解析的ognl-*.*.jar: struts2中的一个新特性,提供对象图导航语言struts2-core-*.*.jar :struts2的核心包xwork-core-*.*.jar : webwork的核心包2)在开发之前介绍几个文件:在struts2-core-*.*.jar中文件:struts-default.xml满足约束:文件中定义了组件:<bean> : 是struts2中要使用的bean对象<result-type> : 定义了struts2中视图的响应方式<interceptor>: 定义拦截器在struts2-core-*.*.jar中的org.apache.struts2包中文件:default.properties文件中定义开发的语言环境以及url的默认扩展名3)开发31)配置核心控制器(是一个过滤器) 在web.xmlorg.apache.struts2.dispatcher.FilterDispatcher (过时)org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter (使用)32)View –> JSP编写自己的配置文件:在src下struts.xml满足33)编写ActionAction可以是一个普通的javabean,不需要实现任何接口或者继承任何类!(当然也可以去实现Action接口或者继承ActionSupport类)视图传值给Action:规则是视图组件的name必须和action中的属性名保持一致!!(注:方法的执行顺序Setter –> execute)5,如果在Action中要使用request,response,session,application对象,struts2框架提供了如下机制:去实现XxxAware接口6,如果在struts.xml中希望有多个action的name相同,可以使用不同package进行管理。

Structs2学习笔记

Structs2学习笔记

1.函数显示注释方法Action1.实现一个Action的最常用方式:从ActionSupport继承2.DMI动态方法调用!3.通配符配置* {1} {2} …a)*_*4.接收参数的方法(一般用属性或者DomainModel来接收)5.简单参数验证addFieldErrora)一般不使用Struts2的UI标签6.访问Web元素a)Map类型i.IoCii.依赖Struts2b)原始类型i.IoCii.依赖Struts27.包含文件配置8.默认action处理2.s tructs2把请求与展现分开,请求与最后的结果分开3、页面传值给action三种方法传值1,/user属性下,user的action对应的add方法,name和age为对应的get后面的名字见下面使用action属性接收参数<a href="user/user!add?name=a&age=8">添加用户</a>下面是对应struct配置文件的配置<struts><constant name="struts.devMode"value="true"/><package name="user"extends="struts-default"namespace="/user"><action name="user"class="erAction"> <result>/user_add_success.jsp</result></action></package></struts>(域模型)/user属性下,user的action 传值2,对应的add方法,user类对应的name和user 类对应的age为对应的get后面的名字见下面使用action属性接收参数<a href="user/user!add?=a&user.age=8">下面是对应struct配置文件的配置<struts><constant name="struts.devMode"value="true"/><package name="user"extends="struts-default"namespace="/user"><action name="user"class="erAction"><result>/user_add_success.jsp</result></action></package></struts>传值3,使用ModelDriven接收参数<a href="user/user!add?name=a&age=8">添加用户</a><struts><constant name="struts.devMode"value="true"/><package name="user"extends="struts-default"namespace="/user"><action name="user"class="erAction"><result>/user_add_success.jsp</result></action></package></struts>Struct2先创建new一个action,然后发下他实现了modeldriven接口,然后调用它的实现的model,有该model返回他调用的model,然后使用里面的get,set方法4通配符配置5,动态方法调用6,<s:debug></s:debug>标签里数据解释7,多个submit提交。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Struts2学习宝典第一章认识Web项目1.0 什么是struts2:官网中对于struts是这样描述的:Apache Struts 2 was originally known as WebWork 2. After working independently for several years, the WebWork and Struts communities joined forces to create Struts2.原文大意为: Apache Struts 2即是之前大家所熟知的WebWork 2。

在经历了几年的各自发展后,WebWork和Struts社区决定合二为一,也即是Struts 2。

struts 官方网站:/Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开。

因而struts与struts的差别较大,不能错误的人为struts2是struts的升级版本。

目前最新版本为2.3.1.2。

以下是该版本的完整包下载地址:/apache-mirror//struts/binaries/struts-2.3.1.2-all.zip1.0.1 新建项目①创建struts.xml ,放置于WEB-INF\classes目录下<struts><constant name="struts.devMode"value="true"/><package name="default"namespace="/"extends="struts-default"> <action name="hello"><result>/hello.jsp</result></action></package></struts>一般情况都从struts-default继承。

因为在struts-default.xml对name=struts-default的package做了详尽的配置,我们从它继承可以免去很多繁琐的配置。

②WEB-INF/lib中放入所需类库将Struts-2.3.1.2\apps\struts2-blank\WEB-INF\lib下面的全部jar file拷到your app\WEB-INF\lib③配置web.xml<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndEx ecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern> <!—过滤根目录下所有的action--> </filter-mapping>1.1 配置MyEclipsea.查看类库代码:在MyEclipse中选中该jar文件,右键->property->java source attachment= …./struts2.1.2/src/core/src/main/java查看文档Javadoc Location = …../s truts2.1.2/docs/apidocsc. structs.xml 编辑时的自动提示w indow—>preference—>XML catalog—>addl ocation = …./struts2.0/lib/struts2-core-2.1.6/struts2.0.dtdkey type = URIkey = /dtds/struts-2.0.dtdd.struts.xml 开发模式<constant name="struts.devMode"value="true"/>这样tomcat可以动态感知struts.xml的变化e.管理webapp右击项目->property->myEclipse->Validation->Web ->Web Context-root1.3 struts工作原理浏览器的请求交给服务器程序(如Tomcat)去处理,服务器程序会读取相应的webapp 的web.xml,web.xml对于filter的配置决定了,用户请求的所有action都交给org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExec uteFilter去处理,这个类会参考struts.xml,寻找namespace属性与用户请求的路径一致的package,若有则寻找其中的action,将result中的结果返回给客户端浏览器。

第二章Action2.0 action 的作用将请求与界面分开具体视图的返回由Action来决定。

具体手段是根据返回的字符串找到具体的配置项。

例如:action有如下方法public String execute(){if(name== null || !name.equals(‚admin‛)){return ‚error‛;}return“success”;}则在struts.xml中可以这样配置<action name="user"class="com.jnmc.unique.ModelDriven.Action"> <result>/user_add_success.jsp</result><result name="error">/user_add_error.jsp</result></action>如果execute返回error,则访问user_add_error.jsp.若返回success,则访问user_add_success.jsp<result>的name属性默认是success,所以success可以不写2.1 package用于区分同名的actionname 包名,用于区分包extendsnamespace 访问路径2.2namespacenamespace决定了action 的访问路径,默认为namespace=‛‛,相当于package标签可以没有namespace属性,这样可以匹配所有路径,即无论敲什么路径都可访问到该package下面的action2.3 定义自己的action1.struts.xml配置<action class=‛package name/class name‛></action>若没有class属性,则默认为com.opensymphony.xwork2.ActionSupport类因为package继承自struts-default,而在struts-default.xml中对于name=struts-default的package的定义有:<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />2.定义Action①自义类,该类只要拥有如下方法即可public String execute(){return“success”;}缺点:难于控制,容易写错,并且没有继承来的方法可用②实现Action接口缺点:其中的方法都是空的,没有实际作用③继承ActionSupport类(最常用)已经封装各种有用的方法2.4 路径Struts2中的路径是根据action的路径而定,而不是根据jsp 路径,所以尽量不要使用相对路径。

解决办法:①使用MyEclipse自带的basepath获得基路径,形如 http://localhost:8080/<%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request. getServerPort()+path+"/";%>指定全文的基本路径<base href="<%=basePath%>">②使用request.getContextPath()来拿到webapp的路径,形如:/webapp2.5 动态方法调用DMI<package name="default"namespace="/user"extends="struts-default"> <action name="useradd"class="er_add"method="add"><result>/user_add.jsp</result></action></package>访问路径为:webapp/user/useradd调用user_add的add方法缺点:若调用其他方法需再配置一个action动态调用DMI<package name="default"namespace="/user"extends="struts-default"><action name="user"class="er_add"><result>/user_add.jsp</result></action></package>访问路径为:webapp/user/user!add!method 可以动态指定调用的方法所以只需配置一个action,而在url中动态调用方法2.6 wildcard通配符*号的运用*可以匹配一个任意长度的字符串在*之后的任意位置可以使用{n}来指代第n个*<package name="default"namespace="/"extends="struts-default"> <action name="*_*"class="com.bisxt.{1}Action"method="{2}"> <result>/{1}_{2}.jsp</result></action></package>2.7 Action接收参数<方法一>用Action的成员变量接收url中的参数在Action中定义变量,并封装setters and getters. 在action初始化之后,会首先根据url中的参数n1、n2、n3调用setN1()、setN2()、setN3().所以变量名可以随便定义,但set方法的名词部分必须与url 中的参数名一致!不区分大小写public class MyAction extends ActionSupport {private String name;private int age;public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String execute() throws Exception {return super.execute();}}<方法二>DomainModel(域模型)在Action类中定义一个实体类,并封装getter and setter,否则无法自动给该实体类的引用赋值。

相关文档
最新文档