STRUTS1.3

更新时间:2024-05-05 18:10:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

学习struts1.3

配置环境(日,学什么都要配置环境)

1.首先先建一个web工程,名字随便的

2.然后进行导包(找到包再导进去,是struts的包才好) 3.对配置文件进行配置,貌似应该是没有配置文件的,要先创建,创建在WEB-INF目录下,

和web.xml放在一个目录,名字的话可以随便

3.先对struts-confing.xml进行简单的配置吧(前面说了,名字随便取无所谓的,但这是一个标准吧,大家都这么取的),内容如下

4.还没搭建完,还要对web.xml进行配置

写一个简单的例子(第一次接触struts,个人感觉不简单 1.建立ActionFrom 2.建立Action 3.页面访问)

1.开发FROM

建立一个类,继承ActionFrom

注册,修改配置文件struts-config.xml,即加一个标签就行了

2.开发Action

建立一个类,继承Action 覆盖excute方法

需要强制转换(即转成与jsp页面对应的form)

调用其他模块

跳转(根据关键字,关键字参照该Action中forward标签中的name属性)

注册,修改配置文件struts-confing.xml,也就是配置标签(并写出可以forward跳转的页面,上面的action只能跳转到forward里配置的页面)

对应的jsp页面

LoginSuccess和LoginFailure没什么用,只是为了显示,Login页面有一个要注意的地方,就是那个form变迁的action属性就是要跳转到那个action去,那个action必须是struts-confing.xml的里面的有配置才行,看上面的action

就配了一个Login,至于后面那个.do的话是在web.xml里面有配置的,切记切记,个人理解为要在web.xml里面配置了才能访问action

Form 模型struts

请求页面 Action ActionServlet处理 Servlet业务代码 成功 失败 无论是否成功都要给人家返回一个结果这是为了给客户一个良好的体数据库 返回的页面jsp,html之类的

Action

1.Action什么时候初始化?发出该Action请求时,不是在读取配置初始化时 2.每个Action只会初始化一次

3.Action是线程不安全的,因为所有的请求会共享一个Action实例 4.怎样实现Action的安全性编程

A.注意不要用实例变量或者类变量共享只是针对某个请求的数据 B.注意资源操作的同步性

应用:统计一个Action的访问数据,只要定义一个类变量,再++即可

Action中的Mapping

来自配置文件中的Action元素,代表着控制器的请求信息

String name=mapping.getName();//获取配置文件中元素中的

的一个属性,即name

String path=mapping.getPath();//获取配置文件中元素中的

的一个属性,即path

String type=mapping.getType();//获取配置文件中元素中的

的一个属性,即type,可用于反射

String type=mapping.findForwards();//获取配置文件中元素中的

属性,获取全部forward的name

ActionForward froward=mapping.findForward(“指定名字(即forward标签里配置的name)”);

ActionForward

ActionForward有个Redirect属性,可以设置false或者true

False,no--------RequestDispatcher forward 只能跳转到当前应用的页面,不设置也可以

True,yes--------HttpServletResponse sendRedirect 可以跳转到应用外的页面,必须设置

ActionForm

工作原理

处理ActionForm的一般步骤:

A.检查Action的映射,确定Action中已经配置了对ActionForm的映射 B.根据name属性,查找form bean的配置信息

C.检查Action的form bean的使用范围,确定在此范围下(request,session),是否有此form bean实例

D.假如当前范围下,已经存在了此form bean的实例,而是对当前请求来说,是同一种类型的话,请慎用

E.否则,就重新构建一个form bean的实例(调用构造方法),并且保存在一定作用范围 F.Form bean的reset()方法被调用 G.调用对应的setter方法,对状态属性赋值

H.如果validate的属性设置为true那么就调用form bean的validate()方法 I.如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行

J.注意:直接从ActionFrom类继承的reset()和validate()方法,并不能实现什么处理功能,所以有必要自己重新覆盖由页面向 Action发出请求

查找Action,看Action是否有name属性 查找,根据name和scope Scope getAttribute(name)

Scope 是struts-config.xml 是否找到 中的Action标签的一个属性 ,表示作用范围(个人理解是 否就是Action实例化存在

的域),默认值为 没找到就实例化一个 Scope setAttribute(name,form) session,

是否需要校验 validate

和查找Action类似,看一下有没有可用的form bean有就直接调用该form bean的reset方法,没有就创建一个,并保存在一定作用范围 找到Action的实例就跳过实例化一个Action的步骤 取值,从客户端参数,request.getParameter()获取用户提交的数据和赋值

校验 是否校验成功 校验失败错误页面 校验成功,发送请求到Action

监听器

在struts里面还有监听器,监听器要继承你要监听的东西如下面代码

上面代码继承两个域的属性监听,当然要让监听器生效,还要对web.xml配置文件进行配置,web经常需要配置配置文件

在上面web.xml里面接近结尾处加了一个listener标签,这是让listener运行的关键,很明显,框架的作用这时候就体现出来了,只要你写好代码再配置一下文件,框架就会帮你自动运行,而不用你操心

手动在Action里获取ActionForm对象

在一个Action的excute方法里添加这个方法,然后获取form,再与excute传进去的那个form是否一致,值得注意的是那个Attribute是你设置的form的名字

服务端校验

Form

validate

一般情况下校验都是开着的,而为什么就算数据错误都会不报错呢,那是继承ActionForm接口的同时也继承了ActionForm的validate(校验)方法,而ActionForm的validate方法是没有返回值的,在没有覆盖父类的validate方法之前,默认的validate是来自父类的validate方法

如何关闭校验呢

上面的绿色的字已经大概解析了,下面再发一个图片演示一下

配置文件简介

作用:使ActionServlet,ActionMapping,Action,ActionForm这几个不同层次的组件相互协调工作。这些配置文件是在系统启动的时候,读入内存中,供控制器使用。

web.xml

struts-config.xml

元素

元素帮助进行框架内部的流程控制,可将请求URL映射到Action类,将Action对象与ActionForm对象相关联。元素内可定义多个子元素 元素

所描述的是特定的请求路径和一个相应的Action类之间的映射关系。有以下属性: request/session的getAttribute(attribute)方法返回该form bean实例。用来存取form关键字,缺省值与name一样。

Input:当表单验证失败时将请求转发的URL,一般结合vaildate=”true”来用。 Validate:是用语控制是否校验表单(校验开关),缺省值为true-校验,false为不校验,不校验当然都通过就没必要跳转了。

:公共跳转标签,这是为了避免要设置多个相同的跳转页面,比如说每个标签都可以跳转到主页,那不是都得配相同的一个forward属性,那得多烦啊。注意这个标签是在标签外面的,是和标签同级的

分析Struts框架

类:

1.ActionServlet

读取配置文件:dom4j 填充form

派发请求,调用对应Action的execute方法 查找响应 2.ActionForm

Reset 重置方法 Validate 校验方法 3.Action

Execute(ActionMapping,ActionForm,HttpServletRequest,HttpServletResponse)运行方法

4.ActionMapping

属性:

Path Name Type Validate

HashMap 装forward

5.ActionForward

Name Path 6.配置文件

7.Acitonconfing Formconfig

模拟struts填充formbean

分析:

创建AddStudentForm对象---根据类的全名进行反射(Class.forName) 需要把页面的参数提取出来(request.getParameter()-----String) 把参数名与bean中的属性名进行匹配 如果能匹配酒吧取出来的值填充到bean中(借助BeanUtils)注:BeanUtils是一个jar包

保存form

Struts标签库

JSP视窗组件所使用的struts标签库由四类标签组成:

a.Bean标签:用来在JSP页面中管理bean,struts-bean.tld b.逻辑标签:用来在JSP页面中控制流程,struts-logic.tld

c.HTML标签:用来生成HTML标签,在表单中显示数据,使用会话ID对URL进行编程struts-html.tld

d.Tiles标签:使用动态模版构造普通格式的页面struts-tiles.tld

Bean标签:

这个标签库中包含用于定义新bean、访问bean及其属性的标签。Bean标签库将标签定义在四个自类别中:

A.创建和复制bean的标签 B.脚本变量定义标签 C.Bean翻译标签 D.消息国际化标签

:从已有的变量或者变量的属性定义一个新的变量

配置引用的ActionServlet文件的地方 Search: where(从哪里提取数据 scope) who(提取的属性或bean的名字 name) which property(当name是bean时,property表示该bean中的一个变量 property)

Define:新变量名(新创建的属性名就是ID的值) Save:to where(保存到哪个域里面 toScope) 下图有用法详解

新建一个username属性并存到request里面,这个当然不会在jsp里面定义,可以在Action等等里面做

把username的值赋给username1并用输出到页面

把username的值赋给username1并用toScope存储到session里面,再通过$(sessionScope.username1)输出,意为输出SessionScope中的username1

从session里把username提取出来,再把username的值赋给username1并用toScope存储到session里面,再通过$(sessionScope.username1)输出,意为输出SessionScope中的username1

定义属性,为了做测试用

从request域里提取user这个bean的一个叫username的属性,再把这个叫username的属性赋值给username2(即ID)

:从域里面提取属性并输出到页面

这几个例子都差不多的,里面的属性和上面描述的功能是一样的

作用:在不同的语言环境下,显示不同的文字,国际化?? 1.创建资源文件:(资源文件是自己创建的一个properties,下面只是事例,properties的名字是可以改变的,资源文件一般写在一个包里面)

com.itcast.ApplicationResouces.properties

com.itcast.ApplicationResources_ar.properties

com.itcast.ApplicationResources_zh.properties

2.在struts-config里面中添加:

图中还有个key那是在使用bean:message标签的时候可以通过key来调用,下面也会有图解的 3.页面中使用

Bean:message test

上面的代码就是引用资源文件里面的数据的,然后那个显示的值会根据你的网页显示语言而变化,下面有切换网页显示语言的方法 4.切换浏览器的语言类型:

工具------Internet选项---常规---语言 5.下面两个页面的taglib 的引用都是对的

逻辑标签

逻辑库的标记能够用来处理外观逻辑而不需要使用scriptlet Struts逻辑标签库包含的标记能够有条件的产生输出文本, 在对象集合中循环从而重复地产生输出文本,以及应用程序 流程控制。它也提供了一组在JSP页中处理流程控制的标记。 这些标记封装在文件名为struts-logic.tld的标记包中。逻辑标 记库定义的标记能偶执行下列三个功能:

条件逻辑 重复

转发/重定向响应 Logic:iterate

单重循环使用 双重循环使用 例子:

要先设置把taglib这个<%@ taglib rul=”http://struts.apache.org/tags-logic” prefix=”logic”%>

先做数据准备,这是例子,当然一般可以在后台代码做这个事情

上图的循环解析:

Id可以随便起,就像我们随便起的遍历时用来存储数据的一个临时变量,可以理解为for(Object o: oo)的o,scope是指定在哪个域里面查找,name指的就是我们要查找的那个变量,在这里就是我们在上面存的那个usernames,可以理解为我们平时通过getParameter获得usernames,这里应该是通过了一定的封装。

这个个人可以理解为java中的双重for循环,有明显的痕迹,表现在两个logic:iterate而图中有个property属性,这就再提一下logic:iterate标签的用法了,就是说没有property属性的时候,name指定的必须是一个集合数组或者迭代(如:String[] name = {“a”,”b”,”c”}),党有property的时候,property指定的必须是一个集合数组或者迭代(如:有一个a.property property是a中的一个数组那么这时候name可以指定为a,而property则可以指定为property),不懂的话上图还有例子

动态FormBean

普通的FromBean

动态FormBean

由上图可以简单的理解为动态FormBean就是写在struts-config.xml里面的,还有不同的就是动态FormBean是使用默认DynaActionForm的,再在form-bean标签里面配置FormBean的属性。

Name 属性名 Type 类型

Form-property中的type必须使用包装类

因为使用的类型是DynaActionForm,所以必须转成DynaActionForm(我们平时都转成ActionForm),再通过get(“属性名”)来获取属性,很明显这个就有点不方便了,还要知道属性名。

在页面提取属性,为什么这样取呢,貌似是因为动态FormBean存储时是以map存储的

Struts中的异常处理

一,配置异常(在struts-config.xml文件中定义)

定制异常有两种:全局异常和局部异常 全局异常定义方法如下:

局部异常定法方法如下:

path=”/Login.jsp”

其中ItcaseException是自己定义的异常,不必太在意,随便定义就行,名字也随便起。当对应的Action抛出异常时就不会继续往下运行,而是跳转到指定的页面。(当然,一般都是有错才会抛出异常,比如说输入了敏感数据)

Type指的是抛出的异常

Path指的是抛出type指定的异常时会往path指定的路径跑去

个人感觉:就像一个另类的跳转,只不过exception是抛出了才会跳转

Action.execute方法 Action Serlvet 把异常带回 是否出现异 常 ActionForwa 正常运行 是否出现异正常运行 常 Exception中的PATH Forward对应的PATH

:可以指明type,path,key

Path:出现异常后的跳转页面 Key:异常信息的键

Type:所要处理的异常类型

在相应的Action中的execute方法抛出异常

在异常处理页面(path所指的页面)使用html:errors标签

插件的使用

应用:在struts启动时把hibernate加载进来(读取hibernate的配置文件和打开hibernate的sessionfactory)

1.环境:struts和hibernate的jar包

2.设计一个类,HibernatePlugin实现Plugin借口

属性:String hibernateConfingFile #读取hibernate配置文件 #打开sessionfactory

3.在struts-config.xml配置文件中填上一对,在plugin中加上子标签

ForwardAction的讲解

这个就是最后那一行代码,比起之前的那个的区别就是把forward写在action里面会直接跳转到指定路径,上图中的就是跳转到/WEB-INF/AddStudent.jsp页面,这样做就是为了掩饰jsp文件,让别人不知道这个是不是jsp

注:放在WEB-INF中的文件是不对外访问的,就是说,你在浏览器端输入http://localhost:8080/pup/WEB-INF/AddStudent.jsp是没有用的

DispatchAction的讲解

实现一个模块,要对学生进行操作 分析:

Add delete select alter 起码要有四个action才行

但是这个明显action太多了,配置比较麻烦

特殊action的使用:

DispatchAction 作用:

减少action的数量 使用:

继承DispatchAction

在里面添加需要用的所有方法,参数和返回值与原来的execute方法一样 配置文件中带上parameter属性 parameter=“opertationType” 使用的时候采用如下形式:/*.do?opertationType=add

本文来源:https://www.bwwdw.com/article/tm2g.html

Top