Struct学习笔记(一)
来源:互联网 发布:拍电影的软件下载 编辑:程序博客网 时间:2024/05/15 15:16
一、配置环境
1·配置struct
复制app里的struct.xml,copy到src目录下,将action的名字改为你想要的名字,result改为你想要的返回结果,****.jsp。 namespace="/"
2.将模式改为开发模式:
<constant name="struts.devMode" value=true />
改了之后改代码不需要重启服务器。默认是false。
3.将struct源码导入到到Myeclipse
在架包中右键选java source attachment->右边选external folder->struct文件夹/src/core/main/java。
4.将struct文档导入Myeclipse
在架包中右键选javadoc Location->javadoc URL 点Browse->struct文件夹/docs/struts2-core/apidocs
5.将struct的标签库导入Myeclipse
找到 struct-x.x.x.jar,解压开。有struct2.0.dtd。
copy structs.xml里的http://structs.apache.org/dtds/structs-2.0.dtd Myeclipse菜单栏点window->proferences-input catalog->XML Catalog->add->Key Type 选URI->Key黏贴http://structs.apache.org/dtds/structs-2.0.dtd->Location填xx\xx\struct2.0.dtd->OK-OK
二、运行机制
1、运行过程
客户端输入一个地址同过http协议传到tomcat,tomcat找到tomcat下面的web application来处理->读这个web application的web.xml->找到<filter>标签,然后交给在<filter-mapping>下面有<url-pattern>/*<url-pattern>,表示过滤所有的url地址,然后交给org.apache.structs2.***.StrutsPrepareAndExecuteFilter的类接受到。这个类会找到namespace="/",在斜杠后面有***,就会看有没有<ation name="***">,有的话,就找里面的<result>返回给客户端
三、namespace
1、 namespace决定了action的访问路径,默认为"",可以接受所有路径的action,namespace可以写成/ or /xxx /xxx/yyy,对应的action访问路径为/index.action,/xxx/index.action or /xxx/yyy/index.action。 namespace最后使用模块来命名
structs.xml里的package标签和java一样,起到命名空间的作用。
<package name="front" extends="struts-default" namespace="/xxx">
package的namespace必须是/开头。客户端想访问其package里面的action,就必须加上/xxx/***。在namespace不填,所有的action都可以处理。
《小题外》在复制项目时,他的默认url地址不变,项目上右键点Propertise->Myeclipse->Web->修改Web Context-root,这里才是部署到tomcat上面的项目名
四、Action
在structs.xml中修改<action name="yyy">为<action name="yyy" class="com.***.xxx">表示接到这个action后交给"com.***.xxx这个类,执行里面的public Sting execute(),这个类只需要一个普通的java类。根据返回的String来查找<result name="thisString">,在没有写class时,默认执行ActionSupport这个类,在写处理Action时也可以实现Action接口,也可以继承ActionSupport。在开发时用继承ActionSupport的方式。
如果action中写<action name="yyy" class="com.***.xxx" method="zzz">,将不再执行里面的execute方法了,而是会执行zzz的方法,记住zzz一定要是返回String类型
如果在structs.xml中不指定调用哪个方法可以通过***/yyy!zzz来指定调用里面的zzz方法,这称为动态方法调用DMI。
structs2在每次访问的时候都会new一个class处理,而Struct1则使用同一个对象。
《小题外》修改默认的jsp编码,Myeclipse->Preference->input Jsp->Encodeing改为UTF-8
五、路径文件说明
struct2中的路径是根据action的路径而不是jsp的路径来确定的,所以尽量不要使用相对路径。所以在struct2中统一使用绝对路径。在Myeclipse中自动在jsp的<head>中加入<base href="<%=basePath%>" />这意思是当前页面中的所有连接的前面都加上<%=basePath%>,
六、通配符的配置
作用是降低配置量。
<action name="xxx*" class="com.***.yyy" method="{1}">
其中{1}匹配第一个*号,name="xxx*"能匹配所有的xxx,后面无论是什么内容。result中也可以使用通配符来指定特定的jsp。
在项目中约定优于配置。
<action name="*_*" class="com.XXX.XXX.{1}Action" method="{2}">
<result>/{1}_{2}_xxx.jsp</result>
</action>
约定好,配置文件就只有很多个*了,在实际中,struct会先找最精确的,如果没有,在找通配符的。
七、参数接收
1.在Action类中写好成员变量,并且写好get和set方法,Struct会主动调用set方法。变量名和http://localhost:8080/xxx/yyy/zzz!add?name=oo&age=8,这中间的变量名必须一致才行(准确说是getName中的name与地址中的参数一致),类型struct会主动帮你转。
2.使用Domain Model(域模型)来接收参数
其实和第一种方法是一样的,只是提供了用实体类来接收参数,http://localhost:8080/xxx/yyy/zzz!?user.name=aa&user.age=8
在Action类中必须有User类的对象。实体类不需要实例化,struct会自动帮忙new出来。
3.使用Model Driven Action的类必须实现ModelDrien<?>的接口,可以使用第一种方式传参,但是确实用第二种方式接收参数。不常用,思想很重要。在这种情况下,必须自己new这个对象。Action类中有,
private User user = new User();
struct通过getModel来获得模型,然后在Model中填充数据。
《小题外》jdk1.5和jdk1.6的区别:在jdk1.5中,实现接口是不能写@Override的,而在jdk1.6中,是可以写的。Myeclipse中设置编译环境:项目右键->Properties->java compiler->Compiler compliance level:1.6。
《小题外》struct的默认参数可以在原先解压开的struct-x.x.x.jar中的default.properties的文件中找到,然后通过<content>标签进行修改覆盖。
- Struct学习笔记(一)
- Struct学习笔记(二)
- struct学习笔记
- 笔记---c++ primer——struct(一)
- c#学习笔记(五)struct
- matlab学习笔记 struct函数
- struct&typedef函数学习笔记
- C#学习笔记-struct关键字
- Go语言学习笔记 --- struct
- C++ Primer_4th学习笔记(5)- 使用struct 关键字
- C++学习笔记1 struct和typedef struct
- 学习笔记(一)
- 学习笔记(一)
- 学习笔记(一)
- 学习笔记(一)
- 学习笔记(一)
- 学习笔记(一)
- 学习笔记(一)
- Linux调度器发展简述
- vb和vb.net的学习
- 没有简单的事
- 域名调用规则(zend+mvc下)
- C++返回引用类型 指针的引用
- Struct学习笔记(一)
- ss3 动画停止的时候如何保持最后一个动作不变
- quartz
- 好莱坞原则概述
- C++ string append()添加文本
- Struct学习笔记(二)
- 数字问题Armstrong数
- 集合框架(三)——Collection 子集 ——————List 及其 小弟们!
- 手舞足蹈,跳舞机视频