Struts1
什么是struts?
Struts是一个按照MVC模式设计出来的web层框架。说笼统一点实际上就是一个大大的Servlet。这个Servlet名为ActionServlet,或者是ActionServlet的子类。我们可以在web.xml文件中将各种符合条件的请求全部交给这个Servlet进行处理。这个Servlet参照一个名为struts-config.xml的文件(通常放在/WEB-INF/struts-config.xml)来对不同请求交给不同的action去处理。
Struts的工作原理一般来说分为八步(当然这是个人看法):
1.读取配置文件(初始化对应的模块)
2.发送请求(提交表单或者超链接)
3.填充FromBean(实例化,复位,填充数据,校验数据)
4.通过struts-config.xml配置信息派发给相应的action
5.Action接受业务并进行处理
6.返回响应结果
7.通过struts-config.xml查找响应的目的地
8.响应用户(通常是浏览器显示)
当然也可笼统的解释为:
用户提交请求,ActionServlet接受到请求,会把数据封装到一个Formbean对象里面。如果FromBean里面重写了validate方法,那么就会对表单数据进行校验,如果校验成功才会把请求交给对应的Action来进行处理,如果校验失败通过配置文件里面的action 里面的input属性指定错误页面。Action接受请求调用execute方法进行业务处理,然后通过mapping.findForward("转向名字")-转向响应目标
对于struts-config.xml认识(常用的属性)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config SYSTEM "http://struts.apache.org/dtds/struts-config_1_3.dtd" PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN">
-<struts-config>
<!-- ==Form Bean Definitions -->
<form-beans>
<!-- form-bean的配置 第一个是名字自己定义用于action配对,第二个type是该bean的路径 从命包名开始 -->
<!-- 静态form -->
<form-bean type="cn.lovo.LoginForm" name="loginForm"/>
<!-- 动态增加form -->
<form-bean type="org.apache.struts.action.DynaActionForm" name="addStudentForm"> <form-property type="java.lang.String" name="name"/>
<form-property type="java.lang.Integer" name="age"/>
<form-property type="java.lang.Float" name="score"/>
</form-bean>
<form-beans>
<!-- ====Action Mapping Definitions -->
<action-mappings>
<!-- path 给页面请求的路径以及名称 type= 路径 从包名开始 name = 是关联的哪一个formBean attribute=用于在web域取值时用,默认和name的一样 input=进行表单校验才用的,就是表单出错该奔向哪个页面 parameter=是用于继承的action是DispatchAction时用的 scope=表示对应的formbean存在哪一个web域默认是session validate=表单数据是否进行校验 默认是true -->
<action type="com.lovo.LoginAction" name="loginForm" path="/login">
<!-- 转发到某个页面 第一个名字用于action里面调用,path该jsp的路径-->
<forward name="loginSuccess" path="/LoginSuccess.jsp"/>
<forward name="loginFailure" path="/LoginFailure.jsp"/>
</action>
<!-- 测试异常的action -->
<action type="com.lovo.action.exceptionTest.ActionExceptionTest" name="addForm" path="/actionExceptionTest">
<exception type="com.lovo.action.exceptionTest.AddUserException" path="/exception.jsp" key="user"/>
</action>
<!-- 统一配置action用于转发到jsp -->
<action path="/preActionExceptionTest" forward="/WEB-INF/addStudentException.jsp"/>
<!-- DispatchAction配置 加入parameter属性 -->
<action type="com.lovo.dispatchActionTest.StudentDispatchTest"path="/studentDispatchTest" parameter="method">
<forward name="add" path="/add.jsp"/>
<forward name="delete" path="/delete.jsp"/>
<forward name="query" path="/query.jsp"/>
</action>
</action-mappings>
<!-- 配置全局异常处理页面 -->
<global-exceptions></global-exceptions>
<!-- 配置全局Forward -->
<global-forwards></global-forwards>
<!-- 配置资源文件 -->
<message-resources parameter="com.love.action.exceptionTest.resouce"/>
</struts-config>
对Formbean的理解
一个formbean必须继承ActionForm。如果某个Action关联了一个Formbean,那么当浏览器请求这个action的时候,struts的ActionServlet将创建这个Formbean,并将请求参数填充在里面,并按照配置文件里面的scope属性将此存储在对应的web域里面。
一个Formbean除了在ActionServlet中处理请求的过程中会被创建。还可能在jsp页面调用<html:form>标签的时候被创建。也就是说<html:form>标签会生产对应的Formbean对象
Struts1 里面的Formbean里面的属性如果是一个复杂对象的话,那么在书写这个复杂对象的时候必须new一个该对象的实例出来。
对于动态Formbean:可以不用编写Formbean的代码,通过DynaActionFrom实现
示例:
<!-- 动态增加form -->
<form-bean type="org.apache.struts.action.DynaActionForm" name="addStudentForm">
<form-property type="java.lang.String" name="name"/>
<form-property type="java.lang.Integer" name="age"/>
<form-property type="java.lang.Float" name="score"/>
</form-bean>
关于action:
要成为一个action一般情况下是继承Action类。
请求同一个action,它是在第一次请求的时候进行初始化的,不是在读取配置的时候,每一个action只会初始化一次,它是单实例和线程不安全的,所以在action中最好不要有可读写的成员变量
每一个action通过重写父类的execute方法对业务进行操作(DispatchAction不重写)
Execute方法返回一个ActionForward对象,通过该对象找到返回响应的jsp或者action。对应配置文件里面的forwards属性,<forward name="add" path="/add.jsp"/> 默认是用请求转发,如需重定向需要配置属性redirect=true
ActionMapping对象里面封装的是配置文件action里面的值
怎么实现action的安全性编程呢?
注意不要用实例变量或者类变量共享只是针对某个请求的数据
注意资源操作的同步性
对于DispatchAction的使用
比如对于用户的操作一般有crud ,那么我们可以全部在一个action里面进行处理
就样就不用对于一个请求创建一个action了,只需要在一个action里面创建不同的方法进行不同的处理就即可。那么要实现这样的action必须让该类继承DispatchAction
然后在该action的配置文件里面配置一个parameter的属性指定请求参数的名称。
public class DispatchActionDemo extends DispatchAction
该action里面的方法必须和execute方法一模一样(除了名字当然方法里面的内容不需要一样) 例:
/**删除用户信息提交
* */
public ActionForward deleteUser(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
response.getWriter().write("deleteUser");
return null;
}
配置文件:
<action path="/dispatchActionDemo" type="com.lovo.DisPatchActionDemo.action.DispatchActionDemo" parameter="method">
</action>
请求地址:注意参数http://127.0.0.1:8080/DisPatchActionDemo/dispatchActionDemo.do?method=deleteUser
常见问题:如何防止struts配置文件的不断膨胀?
web.xml配置文件里面初始化参数的时候配置文件可以写多个用逗号隔开,(每一个模块单独一个配置文件)
还有就是通过DispatchAction来减少action的数量,这也是一个办法。
常用标签:
<html:rewrite action="">该标签生成请求的action全路径,用于外部访问
例:<form action="<html:rewrite action="/regUser"/>" method="post">
<html:link>生成超链接,对于请求路径直接写action配置里面的path值即可。
例:<html:link action="/regUser">注册(很好)</html:link>
<.html:form>生成表单,此标签会生成formbean对象
例:整个表单内容
<html:form action="/regUser">
用户名:<html:text property="user.name"></html:text>
密码:<html:password property="user.password"></html:text><br/>
年龄:<html:text property="user.age" ></html:text>
爱好:
<logic:iterate id="like" collection="${likes }">
<html:multibox property="user.likes" value="${like.id }" title="${like.name }"></html:multibox>${like.name }
</logic:iterate>
<br/>
favorite:
<html:select property="user.favorite">
<html:optionsCollection name="favorite" value="id" label="title"/>
</html:select>
<html:submit title="注册">注册</html:submit>
</html:form>
标签的property属性用于指定对应的formbean里面的属性,这个属性是必须有的
这些标签在表单校验出错的时候会自动回显数据。
最后附带word文档供下载。
分享到:
相关推荐
### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...
从给定的文件信息来看,标题“struts2中文学习文档”和描述“struts2的根本webwork2”表明这是一份关于Struts2框架的学习资料,特别强调了Struts2与WebWork2的关系。Struts2是Apache Struts的一个版本,它是一个用于...
### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...
Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其存在的问题,如性能和灵活性。Struts2的核心是Action类,它是业务逻辑和视图之间的桥梁。通过使用拦截器,Struts2能够提供诸如输入验证...
根据给定的文件信息,以下是对Struts2学习笔记中涉及的关键知识点的详细解析: ### Struts2框架概览 #### MVC模式的理解与演进 Struts2是基于MVC(Model-View-Controller)模式设计的一种Java Web开发框架。在MVC...
以上是基于文档提供的信息整理出来的Struts2学习笔记的关键知识点概览。这些内容不仅涵盖了Struts2的基本使用方法,还涉及到了一些高级特性和最佳实践。通过学习这些知识点,可以帮助开发者更好地理解和掌握Struts2...
在实际项目中,Struts2可以处理类型转换、文件上传下载、拦截器(Interceptor)防止重复提交等问题。Interceptor是Struts2中的重要特性,它允许在Action执行前后插入额外的处理逻辑,如登录验证、日志记录等。深入...
张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...
13. ** strut2四天笔记**:这份学习笔记可能涵盖了以上所有知识点,包括如何创建Action,配置struts.xml,使用OGNL表达式,处理异常,以及实践中的各种技巧和最佳实践。 在四天的学习过程中,你应该通过实践和理解...
struts2学习笔记struts2学习笔记struts2学习笔记
struts2.0学习笔记1 自己动手做的还算可以的 ]struts2.0学习笔记1 自己动手做的还算可以的struts2.0学习笔记1 自己动手做的还算可以的struts2.0学习笔记1 自己动手做的还算可以的
### Struts2学习笔记之文件上传与Ajax开发 #### Struts2文件上传 **文件上传简介** 文件上传是Web应用中常见的功能之一,Struts2框架内置了对文件上传的支持,使得开发者能够轻松地实现这一功能。为了确保文件...
本学习笔记将对Struts1和Struts2进行详细解析。 **Struts1简介** Struts1是早期流行的MVC框架,它的核心是ActionServlet,负责处理HTTP请求,并通过ActionForm对象收集表单数据,然后调用Action类的方法进行业务...
学习Struts1.x需要理解其设计理念,掌握配置文件的编写,熟练运用Action、ActionForm、JSP标签,以及理解MVC模式在实际开发中的应用。虽然现在Struts1.x已经被Struts2等更新的框架所取代,但它的基础思想和设计模式...
- **发展演变**: Struts2 结合了传统 Struts1 和 WebWork 两个经典框架的优点,是一个成熟的 MVC 框架。 - **核心功能**: - 允许使用 POJO (Plain Old Java Object) 作为 Action 类,使得 Action 更易于测试。 - ...
struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换struts2学习笔记3数据类型转换