struts1Action原理与配置
Struts1与struts2的区别总结

Struts1与struts2的区别总结1,背景:Struts2并不是struts1的升级版,两者没有太大的关系,struts2是继承了webwork的机制,吸收了struts2和webwork的有优势。
Struts2是基于WebWork的一个全新框架. Struts2主要改进是取代了Struts1的Servlet和Action. Struts2的核心框架是当作一个filter来实现其功能的,而Struts1是ActionServlet.然后在Action上,Struts1都少不了要传递Request等参数,还要继承Action父类,而Struts2只要实现了一个public String execute()就可以了,这样Action就可以实现脱离Servlet 测试. Struts2还提供了拦截器(Interceptot)等Struts1所没有的技术.2,Action类Struts1要求action继承一个抽象基类,而struts2既可以继承类又可以实现action对应的接口,即接口编程,可以实现多个接口,使得可选和订制服务成为可能。
3,线程模式Struts1中的action是单例模式,会涉及到线程安全问题,因为仅有一个action来处理所有的请求,而struts2则是非单例模式,每个请求对应一个action,这样就不用考虑线程安全的问题(而且,servlet容器会给每个请求产生可丢弃的对象,这样就不会导致性能和垃圾回收问题)。
4,可测性Struts1中的action有个主要的问题是execute方法暴露了servlet API,这使得测试等需要依赖servlet容器。
一个第三方扩展--struts TestCase--提供了一套struts模拟对象来进行测试;而struts2 中的action可以通过初始化和设置属性(例如action当中直接用get和set方法),调用方法来测试,“依赖式注入”注入也使得测试更容易5,servlet依赖Struts1中的action依赖于servlet API,因为当一个action被调用时,HttpServletRequest和HttpServletResponse对象会被传递给execute方法(请求和响应的对象需要依赖于execute方法,即servlet API);而struts2中的action则不需要依赖于servlet容器,允许action脱离容器单独被测试(例如:struts2中获取请求的对象可以用ServletActionContext.getRequest())。
struts1入门教程

1.什么是Struts1基于MVC的轻量级,WEB应用框架2.struts1工作原理a> 初始化: struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象.b> 发送请求: 用户提交表单或通过URL向WEB服务器提供请求,请求的数据用HTTP协议传给WEB服务器.c> form填充: Struts的总控制器ActionServlet在用户提交请求时将数据放到对应的form对象中的成员变量中d> 派发请求: 控制器根据配置信息对象ActionConfig将请求派发到具体的Action,对应的formBean一并传给Action的excute()方法e> 处理业务: Action一般只包含一个excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)完毕后返回一个ActionForward对象.服务器通过ActionForward对象进行转发工作f> 返回响应: Action将业务处理的不同结果返回一个目标相应对象给总控制器g> 查找响应: 总控制器根据Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下为jsp页面h> 响应用户: 目标响应对象将结果传递给资源对象,将结果展现给用户struts1原理图:3.开发指南准备工作:1>到/下载struts的安装文件struts-1.3.10-all.zip2>解压struts-1.3.10-all.zip3>创建一个web project,并将上步中解压的lib文件下的jar包引进去4>配置web文件5>新建struts-config.xml6>创建数据库(mysql4. 项目开发4.1 页面制作index.jsp4.2 在struts-config.xml中需要修改4.3 创建com.javakc.struts1.action.StudentAction 业务类4.4 创建com.javakc.struts1.action.StudentForm类1)继承org.apache.struts.action.ActionForm类2)属性名要和表单中的属性名一一对应,并生成其对应的getter、setter方法4.5 在StudentAction中处理提交的请求1) 通过form表单或超链接可以将用户的请求提交到服务器进行处理,在系统架构中,服务器处理用户请求的场地就是StudentAction类的execute方法.4.6 在student_info.jsp中展示数据。
struts1配置文件action

2.ClassName:对应配置元素的类,默认是ActionMapping。
3.Forward:制定转发URL路径。
4.Include:制定包含URL路径。
13.type:指定Action类的完整类名。
fo。
9.Roles:指定允许调用该Action的安全角色,多个角色之间以逗号隔开。
10.Scope:指定Form的存在范围,默认是session.type指定的Action的完整名。
11.Unkonwn:如果是true表示可以处理用户发出的所有的无效的ActionURL,默认是false。
12.Validate:指定是否调用ActionForm的validate方法。
5.Input:制定包含表单的URL,当表单验证失败时发送的URL。
:指定和该Action关联的Form名字。改名字必须是在form-bean中定义过的,可写可不写。
7.Path:必须以“/”开头的方位Action的路径。
8.Parameter:指定Action配置参数。在Action的execute()方法中可以调用ActionMapping的getParameter()方法来读取匹配的参数。
Struts工作原理

Struts开源架构很好的实现了MVC模式,MVC即Model-View-Controller的缩写,是一种常用的设计模式。
MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
MVC的工作原理,如下图1所示:Struts 是MVC的一种实现,它将Servlet和JSP 标记(属于J2EE 规范)用作实现的一部分。
Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。
下面是Struts实现MVC的原理。
如下图2所示:控制:通过图2大家可以看到有一个XML文件Struts-config.xml,与之相关联的是Controller,,它可以称作为Struts神经中枢。
视图:主要由JSP生成页面完成视图,Struts提供丰富的JSP 标签库:Html,Bean,Logic,Template等,这有利于分开在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet。
ActionServlet是一个通用的控制组件。
这个控制组件提供了处理所有发送到Struts的HTTP请求的入口点。
它截取和分发这些请求到相应的动作类(这些动作类都是Action类的子类)。
另外控制组件也负责用相应的请求参数填充Action From(通常称之为FromBean),并传给动作类(通常称之为ActionBean)。
动作类实现核心商业逻辑,它可以访问java bean 或调用EJB。
最后动作类把控制权传给后续的JSP 文件,后者生成视图。
所有这些控制逻辑利用Struts-config.xml文件来配置。
表现逻辑和程序逻辑。
模型:模型以一个或多个java bean的形式存在。
这些bean分为三类:Action Form、Action、JavaBean or EJB。
Action Form通常称之为FormBean,封装了来自于Client的用户请求信息,如表单信息。
Struts2中 struts.xml的Action配置详解

Struts2中struts.xml的Action配置详解使用package可以将逻辑上相关的一组Action,Result,Interceptor等组件分为一组,Package 有些像对象,可以继承其他的Package,也可以被其他package继承,甚至可以定义抽象的Package。
由于struts.xml文件是自上而下解析的,所以被继承的package要放在继承package的前边。
Namespace将action分成逻辑上的不同模块,每一个模块有自己独立的前缀。
使用name space可以有效的避免action重名的冲突,例如每一个package都可以有自己独立的Men u和Help action,但是事项方式各有不同。
Struts2标签带有namespace选项,可以根据namespace的不同向服务器提交不同的package的action的请求。
“/”表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个pa ckage中查找。
“”表示默认namespace,当所有的namespace中都找不到的时候就在这个namespace中寻找。
例如,有如下配置:CODE:<package name="default"><action name="foo" class="mypackage.simpleAction><result name="success" type="dispatcher">greeting.jsp</result></action><action name="bar" class="mypackage.simpleAction"><result name="success" type="dispatcher">bar1.jsp</result></action></package><package name="mypackage1" namespace="/"><action name="moo" class="mypackage.simpleAction"><result name="success" type="dispatcher">moo.jsp</result></action></package><package name="mypackage2" namespace="/barspace"><action name="bar" class="mypackage.simpleAction"><result name="success" type="dispatcher">bar2.jsp</result></action></package>1 如果请求为/barspace/bar.action查找namespace:/barspace,如果找到bar则执行对应的action,否则将会查找默认的n amespace,在上面的例子中,在barspace中存在名字为bar的action,所以这个action 将会被执行,如果返回结果为success,则画面将定为到bar2.jsp2 如果请求为/moo.action根namespace('/')被查找,如果moo action存在则执行,否则查询默认的namespace,上面的例子中,根namespace中存在moo action,所以该action被调用,返回success 的情况下画面将定位到moo.jsp、Action配置在struts2框架中每一个Action是一个工作单元。
详解struts1的配置文件

1.<Data-sources>:用来配置数据源,连接数据库。
<data-source>:具体是数据库连接。
Type:type="org.apache.dbcp.BasicDataSource" Struts中连接数据库的类。
<set-property>:此标签中配置具体的链接内容。
如:<set-property property="driverClassName" value="com.mysql.jdbc.Driver" /> 数据库驱动<set-property property="url" value="jdbc:mysql://localhost:3306/exam" />数据库地址。
<set-property property="username" value="root" />数据库登录名。
<set-property property="password" value="root" />数据库密码。
<set-property property="autoCommit" value="true" />自动提交。
<set-property property="maxActive" value="10" />最大连接数。
<set-property property="maxWait" value="5000" />最大等待数。
<set-property property="defaultAutoCommit" value="false" />默认自动提交。
Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射

struts2的关于method=“{1}"意思详解<action name= "Login_* " method= "{1} " class= "mailreader2.Login ">中Login_*带*是什么意思?method= "{1} "带{}这个是什么意思?====================================================name= "Login_* "代表这个action处理所有以Login_开头的请求method= "{1} "根据前面请求Login_methodname,调用action中的以methodname命名的方法class= "mailreader2.Login "action的类名称如jsp文件中请求Login_validateUser的action名称,根据上面配置,调用action类mailreader2.Login类中方法validateUser()又如:对于Login_update请求,将会调用mailreader2.Login的update()方法。
它的用法同webwork中的!符号的作用,相当于是一个通配符。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++Struts2 学习笔记4--Action Method--接收参数文章分类:Java编程struts2中的路径问题注意:在jsp中”/”表示tomcat服务器的根目录,在struts.xml配置文件中”/”表示webapp 的根路径,即MyEclipse web项目中的WebRoot路径。
总结:struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
Sturts的工作原理

浅析Struts 体系结构与工作原理(图)基本概念Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用MVC模式,能够很好地帮助java 开发者利用J2EE开发Web应用。
和其他的java架构一样,Struts 也是面向对象设计,将MVC模式"分离显示逻辑和业务逻辑"的能力发挥得淋漓尽致。
Structs 框架的核心是一个弹性的控制层,基于如Java Servlets,Java Beans,ResourceBundles 与XML等标准技术,以及 Jakarta Commons 的一些类库。
Struts有一组相互协作的类(组件)、Serlvet以及jsp tag lib组成。
基于struts构架的web应用程序基本上符合JSP Model2的设计标准,可以说是一个传统 MVC设计模式的一种变化类型。
Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。
在模型层,Struts可以很容易的与数据访问技术相结合,如 JDBC / EJB ,以及其它第三方类库,如 Hibernate / iBATIS ,或者 Object Relational Bridge(对象关系桥)。
在视图层,Struts能够与JSP,包括 JSTL 与 JSF,以及 Velocity 模板,XSLT 与其它表示层技术。
Struts 为每个专业的 Web 应用程序做背后的支撑,帮助为你的应用创建一个扩展的开发环境。
Struts的体系结构与工作原理MVC即Model-View-Controller的缩写,是一种常用的设计模式。
MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。
MVC的工作原理,如下图1所示:图1Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
struts1Action原理与配置今天临时调到另外一个项目帮忙,三天时间修改一个功能,e(⊙o⊙)…,刚down下项目一看是struts1+Hibernate3,平时一直采用spring+springMvc+springData+Hibernate,之前只接触过struts2还好久没用了,只好先来看一下struts1的action配置了,又因为时间有限有限只好摘抄他人文章了,哈哈首先介绍下struts1工作原理:1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象。
(面向对象思想)2.发送请求:用户提交表单或通过URL向WEB服务器提交请求,请求的数据用HTTP协议传给web服务器。
3.form填充:struts的总控制器ActionServlet在用户提交请求时将数据放到对应的form对象中的成员变量中。
4.派发请求:控制器根据配置信息对象ActionConfig将请求派发到具体的Action,对应的formBean一并传给这个Action中的excute()方法。
5.处理业务:Action一般只包含一个excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)完毕后返回一个ActionForward对象。
服务器通过ActionForward对象进行转发工作。
6.返回响应:Action将业务处理的不同结果返回一个目标响应对象给总控制器。
7.查找响应:总控制器根据Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下为jsp页面。
8.响应用户:目标响应对象将结果传递给资源对象,将结果展现给用户。
下面具体介绍一下struts1配置并配合简单的例子简单易懂:Action, ActionForm, ActionForward ,这三个对象构成了Struts 的核心。
Struts 最核心的控制器是ActionServlet ,该Servlet 拦截用户请求,井将用户请求转入到Struts 体系内。
一、配置ActionServletActionServlet 是一个标准的Servlet ,在web.xml 文件中配置,该Servlet 用于拦所有的HTTP 请求。
在web.xml 文件中配置ActionServlet 应增加如下片段:<servlet><!-- ActionServlet 的名 --><servlet-name>actionSevlet</servlet-name><!-- 配置Servlet 的实现类 --><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><!-- 指定Struts 的第一个配置文件 --><init-param><!-- 指定配置文件的映射 --><param-name>config</param-name><param-value>/WEB-INF/struts-con工fgl.xml</param-value></init-param><!-- 指定Struts 的第二个配置文件 --><init-param><!-- 指定配置文件的映射 --><param-name>config/wawa</param-name><param-value>/WEB-INF/struts-config2.xml</param-value> </init-param><!-- 将ActionServlet配置成自启动Servlet --><load-on-startup>2</load-on-startup></servlet>二、配置ActionForm配置ActionForm ,必须包含ActionForm 类才行。
Struts 要求ActionForm 必须继承Struts 的基类: org.apache.struts.action.ActionForm,ActionForm 的实现非常简单,该类只是一个普通的JavaBean,只要为每个属性提供对应的setter 和getter 方法即可。
根据前面的讲解, ActionForm 用于封装用户的请求参数,而请求参数是通过JSP 页面的表单域传递过来的。
因此应保证ActionForm 的参数与表单域的名字相同。
注意: JavaB ean 的参数是根据getter 、setter 方法确定的。
如果希望有一个A 的属性,则应该提供getA 和setA 的方法。
(1)ActionForm的实现ActionForm 的属性必须与JSP 页面的表单域相同。
本示例的表单包含如下两个表单域:· usemame· password因此,ActionForm 必须继承org.apache.struts.action.ActionForm,并为这两个域提供对应的setter 和getter 方法,下面是ActionForm 的源代码:import org.apache.struts.action.ActionForm;public class LoginForm extends ActionForm {private String username;private String password;// 表单域username对应的setter 方法/*** @return the username*/public String getUsername() {return username;}/*** @param username* the username to set*/public void setUsername(String username) {ername = username;}/*** @return the password*/public String getPassword() {return password;}/*** @param password* the password to set*/public void setPassword(String password) {this.password = password;}}(2)ActionForm 的配置所有的ActionForm 都被配置在struts-config.xml 文件中,该文件包括了一个form-beans 的元素,该元素内定义了所有的ActionForm,每个ActionForm 对应一个form-bean 元素。
为了定义LoginForm. 必须在struts-config.xml文件中增加如下代码:<!-- 用于定义所有的ActionForm --><form-beans><!-- 定义ActionForm,至少指定两个属性: name , type--><form-bean name="loginForm" type="lee.LoginForm" /> </form-beans>三、配置ActionAction 的配置比ActionForm 相对复杂一点,因为Action 负责管理与之关联的ActionForm. 它不仅需要配置实现类,还需要配置Action 的path 属性,该属性用于被用户请求。
对于只需在本Action 内有效的Forward. 还应在Action 元素内配置局部Forward。
(1)Action 的实现通过ActionForm. 可使Action 无须从HTTP 请求中解析参数。
因为所有的参数都被封装在ActionForm中,下面是Action 从AcitionForm 取得请求参数的源代码:import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;public class LoginAction extends Action {// 必须重写该核心方法,该方法actionForm 将表单的请求参数封装成值对象public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception {//将ActionForm强制类型转换为LoginFormLoginForm loginForm = (LoginForm) form;// 从ActionForm中解析出请求参数: usernameString username = loginForm.getUsername();// 从ActionForm中解析出请求参数: passwordString pass = loginForm.getUsername();//后面的处理与前一个示例的Action 相同。
...}}该Action 从转发过来的ActionForm 中解析请求参数,对应的ActionForm 则由ActionServlet 在接收到用户请求时,负责实例化。
实际的过程是: ActionServlet 拦截到用户请求后,根据用户的请求,在配置文件中查找对应的Action , Action 的name 属性指定了用于封装请求参数的ActionForm; 然后ActionServlet 将创建默认的ActionForm 实例,并调用对应的setter 方法完成ActionForm的初始化。