对一个星期的 Struts1 进行笔记总结:
1 , what--> 什么是 struts
struts 实质上就是一个 mvc 框架,用于 java web 的应用开发
2 , why--> 为什么要用 struts
1 ,是一种开源软件
2 ,是 mvc 模式的一种很好的体现
3 ,提供了强大的自定义标签库( taglib )
4 ,支持国际化
5 ,拥有页面导航
6 ,提供 Exception 处理机制
7 ,数据库连接池管理
3how-->struts 的工作流程
1 读取配置 -- 读取 struts-config.xml 的配置信息,并把信息存放到各种配置对象
2 发送请求 --Actionservlet 接收客户的请求,到 ActionMapping 检索和客户请求相匹配的路径
3 填充 form-- 将客户端提交的表单信息保存到 ActionForm ,根据配置信息决定是否需要表单验证
4 派发请求 -- 会根据 ActionMapping 的路径进行发送请求到某个 Action 类
5 处理业务 -- 调用 execute() 方法处理业务逻辑
6 返回响应 -- 再把客户的请求转发给 ActionForward 对象,指向 jsp 文件
7 处理响应 --jsp 组件生成动态网页,返回给客户端
4struts 的 7 大组件( 6 大核心类)
1ActionServlet :主控制器
2Action :完成业务逻辑
3ActionForm :将客户提交的表单数据存储起来
4ActionMapping :帮助 ActiongServlet 将请求的 url 映射到相对应的操作类
5ActionForward :用于页面的转向
6ActionError :用来存储和回收错误信息
7struts 标签库: 可以减轻开发显示层次的工作
5 Struts1有哪些常用的标签库?
1、HTML标签库:这个标签库的大部分标签和HTML中的标签一一对应的。html标签库的目的是将jsp页面和Action通过ActionForm连接起来。
2、Bean标签库:Bean标签库中的定制标签主要用来向客户端输出文本信息。一般我们会用<bean:write name="classes" property="className" />
3、Logic标签库:进行逻辑判断和循环操作.一般我们会用<logic:iterate id="classes" name="list" type="com.lxitedu.classes.pojo.Classes">id与Bean中bean:wirte 对应的name 必须是相同的。
4、Nested标签库:这个标签库中的标签有来显示form或对象中的“nested”属性。
5、Tiles标签库:这个标签库的标签允许我们为视图层建立布局。
struts 标记库由四类标记组成:
1(bean) Bean 标记:用来在JSP 页中管理bean
<bean:message>
<bean:write> filter="false" 显示含html 标签的 输出int 类型的时候加上format 属性 format="#"
<bean:define>
2(logic) 逻辑标记:用来在JSP 页中控制流程
logic:iterate 迭代标签
<logic:notEmpty name="map">
<logic:iterate name="map" id="element">
<bean:write name="element" property="value"/><br>
</logic:iterate>
</logic:notEmpty>
logic:present logic:notPresent 作用域是否存在
<logic:present name="strTable">
<bean:write name="strTable" filter="false"/>
</logic:present>
logic:empty logic:notEmpty 集合元素为空
logic:equals logic:notEquals
<logic:equal name="onlybean" property="name" value="xxx">
等于 xxx
</logic:equal >
<logic:notEqual name="onlybean" property="name" value="xxx">
<bean:write name="onlybean" property="name"/>
</logic:notEqual >
3(html) HTML 标记:用来生成HTML 标记,在表单中显示数据,使用会话ID 对URL 进行编程
html:form html:text html:radio html:checkbox html:select html:option html:submit.....
<html:errors /> 显示所有错
<html:errors property=" 属性名"/> 显示对应的属性错误
4(template) 模板标记:使用动态模板构造普通格式的页面
6国际化 步骤
1建立中英文的资源文件,并配置好键值对
2在jsp页面动态导入I18n文件,
3在i18n文件进行判断
4在jsp页面用<bean:message key="键值">
7全局转发与局部转发
<global-forwards>
<forward name="xxx" path="/global.jsp"></forward>
<forward name="success" path="/uuu.jsp"></forward>
</global-forwards>
全局转发 所有的action共用 局部转发 自己的action用 当两者重名时,优先选择局部转发
8全局异常与局部异常(附件 struts1.x中的异常处理.txt)
<global-exceptions>
<exception key="资源文件中的key" type="包名.类名(如java.lang.ArithmeticException") path="/error.jsp"></exception>
</global-exceptions>
在error.jsp页面 <html:errors/>获取异常信息
全局异常 所有的action共用 局部异常 自己的action用 当两者重名时,优先选择局部异常
9 资源文件的使用(附件 资源文件设置.txt)
默认情况下,Struts默认的资源文件为ApplicationResources.properties文件。
在src目录下建立一个properties文件 一般为ApplicationResource.properties 里面写着键值对信息
如
aaa=111
bbb=222
ccc=333
在 struts-config.xml中配置使用资源文件 与<action-mappings>同级别,一般在<action-mappings>后,
<message-resources parameter="文件名(不需要后缀名)"/> 如上的配置为<message-resources parameter="ApplicationResource"/>
如果该资源文件不在src目录下,而在其他包名下,则应加上包名,假设ApplicationResource.properties在com包下,则配置修改为
<message-resources parameter="com/ApplicationResource"/>
在jsp页面上通过bean标记 可输出资源文件的内容
<bean:message key="aaa"/>
在页面上将显示111
10ActionError与ActionMessage
actionError 1.1版本 1.2版本推出actionMessage actionMessage是actionError的父类
actionError从语义上一般是指错误信息 actionMessage指的是一般信息
ActionError类与ActionErrors类
ActionError类从不独立进行错误处理,它们总是被存储在ActionErrors对象中。ActionErrors对象保存ActionError类的集合以及它们特定的属性值,我们可以使用自己定义的属性值,或是使用ActionErrors.GLOBAL_ERROR.
如下使用
ActionErrors errors = new ActionErrors();
ActionError error = new ActionError("资源文件中的key值",“要传递进去的参数值(一个或多个(字符串数组))");
errors.add(ActionErrors.GLOBAL_ERROR,error);//或者使用
errors.add("属性名",error )
saveErrors(req,errors);
在页面上通过
<html:errors /> 显示所有错误
<html:errors property="属性名"/> 显示对应的属性错误
ActionError类有两个构造方法 分别有一个参数和两个参数的
一个参数的 参数就是资源文件中的键值
两个参数的 第一个参数是资源文件中的键值,第2个参数是我们可以传进资源文件中的参数值
ActionMeaaage类与ActionMeaaages类
<html:messages id="aaa" property="属性名" message="true">
<bean:write name="aaa"/>
</html:messages>
Action 是单例的,不是线程安全的
每当有一次用户的请求, ActionFrom 就会被创建一次
18 struts缺点:
(1)struts的配置和结构过于复杂。
(2)因为actionServlet依赖于web容器,所以测试不太方便。
(3)Struts1的Action类是单例模式,必须设计成线程安全的。
19 struts1的客户端验证于服务端验证的区别?
答案:Struts中客户端验证跟服务器端验证有区别:客户端验证直接写一个action文件便可实现,而服务器端验证必须通过客户端程序去调用服务器端相 应的 WebServices,实现业务逻辑. 它们的本质区别是,就是客户端数据校验是在客户端上进行的,而服务器端校验是在服务器上进行的,在速度上客户端要快很多,但也有缺陷,就是当有黑客攻击的时候,他完全可以绕过客户端直接和服务器交互。
20关于Struts框架中的注意点
1.do请求后缀可以被改变
2.action类必须继承Action
3.execute方法是struts会自动调用的方法,不能随意修改
4.execute方法中的form是struts自动创建并建立的联系
5.form类必须继承ActionForm
6.页面中的html标记中的property必须和form java类中的属性相对应
7.form java类中的属性名必须配置setter和getter方法,而这些方法都是自动被调用的
8.页面中的<html:form action="/login">action的值的映射必须在struts-config.xml文件中存在
9.标签中的声明是必须的,但是前缀的名称是可以修改的
10.页面中的标签引用uri="http://struts.apache.org/tags-html",uri 的值是不能任意改变的