struts221学习笔记.docx

上传人:b****8 文档编号:10791457 上传时间:2023-02-22 格式:DOCX 页数:29 大小:434.51KB
下载 相关 举报
struts221学习笔记.docx_第1页
第1页 / 共29页
struts221学习笔记.docx_第2页
第2页 / 共29页
struts221学习笔记.docx_第3页
第3页 / 共29页
struts221学习笔记.docx_第4页
第4页 / 共29页
struts221学习笔记.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

struts221学习笔记.docx

《struts221学习笔记.docx》由会员分享,可在线阅读,更多相关《struts221学习笔记.docx(29页珍藏版)》请在冰豆网上搜索。

struts221学习笔记.docx

struts221学习笔记

1、首先在在struts-2.2.1.1\apps\struts2-blank\WEB-INF\classes目录下拷贝struts.xml至src下粘贴。

再拷贝struts-2.2.1.1\apps\struts2-blank\WEB-INF下web.xml里的filter到web.xml。

2、一般/*用写*号,虽然有时候用*.Action也可以。

默认过滤所以请求。

被org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter接收到。

首先看namespace(struts.xml),这里namespace为”/”再去找里面有没有hello的action,如果有去找对应的result应用的项。

3、Struts.xml里面中namespace=”/”中的”/”与我们在浏览器中访问的路径一一对应。

Locahost:

8080/my/最后面的一个”/”对应要访问下面action需要localhost:

8080/my/hello.action就可以,不然会出错。

4、在struts.xml里面复制把value改为true,则表示,开发模式,重启tomcat服务器,就可以了。

这样更改配置很会自动更新

5、在struts.xml里面”<”提示。

在struts2文件夹里面,随便找一个struts2-core的jar文件解压,struts.xml里的dtd文件,为http:

//struts.apache.org/dtds/struts-2.0.dtd,把struts-2.0.dtd加入到xml的catalog里面就可以了。

”windows”--“Preferences”再”MyEclipse”--“FilesandEditors”—“XML”—“XMLcatalog”在XMLcatalogEntries里按add,keyType为上面的url,key的值为:

http:

//struts.apache.org/dtds/struts-2.0.dtd,location为struts-2.0.dtd所在目录,点击ok就可以了。

6、

7、namespace决定了action的访问路径,默认为""(意味着不写,不管在浏览器哪里敲action,都会查找下面的action,在其它namespace找不到的action都交给默认为””的namespace去处理),可以访问所有路径的action,namespac可以写成"/",或"/xxx"或"/xxx/yyy","/xxx/index.action",namespace最好也用模块来命名(package也一样尽量用模块来命名)。

当需要访问namespace="/front"时,需要在action前面带上/front/hello.action.,当没有找到对应的namespace时候会返回tomcat服务器,web.xml,welcome-file

8、result默认名字为SUCCESS成功。

9、当复制一个项目的时候,需要注意,名字虽然改成了“T”,部署到tomcat服务器,但是却访问不到路径,其实他还是原画的名字,能访问,所以我们要改”WebContext-root”改成与项目名字相同(T)就可以访问了,如:

10、当访问action的时候,会找到对应的class类对象,每一次访问必定会new一个此类对象(struts1是服务器启动就自动new一个对象,这样会出现线程同步问题),自动执行execute()方法反回一个String值。

当不配置class时,默认执行的是ActionSupport返回success

11、定义自己的action

a)实现Action接口

b)从ActionSupport继承。

(常用)可以直接调用struts2封装好的方法

c)直接publicStringexectue(){}

12、路径问题:

a)在jsp页面里面,如果是action映射成功的,那么在里面的不会去表示jsp当前页面,而是action映射的路径。

可以用jsp自动生成前面的:

<%

Stringpath=request.getContextPath();

StringbasePath=request.getScheme()+":

//"+request.getServerName()+":

"+request.getServerPort()+path+"/";%>

12、在这里可以自己定义方法。

只要返回的是一个String就可以了。

有一种动态的调用dmi,能过user!

add来指定类名和方法名,调用。

13、可以使用通配符配置。

”*”是第一个通配符,{2}代表第二个通配符,代表一个字符串,如ActionAdd时候就会自动找到 Action*,ActionDelet的时候,也会自动找到Action*,{1}表示第一个*号,这里代表Add和Delete。

在下面的result的时候,也可以用*代表这个字符串。

 首先匹配最精确的

14、“约定优于配置!

15、在有些项目名称更改之后,无意断开,会导致web.xml文件破坏,需要重新复制filter进去。

16、还有可能是编译1.5版本与jdk的版本不匹配。

或者是tomcat中的jdk版本不匹配,具体中:

a)

b)

17、Action传递参数:

a)在自己的Action里定义属性,写好get,set方法,当new时会自动设置(传值)。

url里面的参数的Action里的成员变量可以是一一对应的。

变量名与url里也可以不相同,但是会自动调用setName()中set后面的方法名字,必须与url相同。

b)方法二:

可以直接使用user对象,传递参数,user.name=name;当model与的属性数量不相等时候,不能用域模型model,用do/dto/vo。

另外定义一个dto类,只用来传递参数,交给model对应的参数和其它的参数值。

(当父类与子类有相同的属性名时候,在url里面有相同赋值,则当前类(子类)优先)

c)方法三:

modelDrivenInput,实现ModelDriven模型驱动这个接口。

这个时候user必须自己new,tomcat不会自动去new。

1.publicclassTeacherAddextendsActionSupportimplementsModelDriven{

2.Useruser=newUser();

3.Strings;

4.publicStringgetS(){

5.returns;

6.}

7.publicvoidsetS(Strings){

8.this.s=s;

9.}

10.publicStringAdd()throwsException{

11.System.out.println("ModelDrivenname:

"+user.getName());

12.System.out.println("ModelDrivenage:

"+user.getAge());

13.System.out.println("ModelDrivens:

"+s);

14.returnSUCCESS;

15.}

16.@Override

17.publicUsergetModel(){

18.//TODOAuto-generatedmethodstub

19.returnuser;

20.}

21.}

22.//这样能接收多个参数,包括模型里面以外。

d)总结,接收的参数往往是交给参数的模型去处理。

18、有中文尽量不要用get提交数据,用post。

19、中文乱码问题:

a)Struts.xml里加上一句,实际上就已经解决了中文乱码问题。

在1.1.7版本之后可用,在1.1.6之前这是一个bug

b)有时候把web.xml里的过滤类org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter这是2.1改在2.0的:

org.apache.struts2.dispatcher.FilterDispatcher有时候也可以解决乱码问题。

20、Struts2学习在\struts-2.2.1.1\docs\WW文件里面home.html里guides.html打开。

基本上所有的配置都在里面。

21、在struts2里面this.addFieldError(“name”,”nameerrot”)添加属性错误信息(继承ActionSupport类this.addFieldError是从该类继承)。

a)要把错误属性担出来需要用struts2标签。

fielderrorfieldName=”name”theme=”simple”/>theme可写可不写。

不能更改展现。

只能重写css的class,右击查看源码,修改对应的class。

b)

bug>

dug>查看所有bug,常用

c)

properytvalue=”error.name[0]/>取属性展现出来,可以取

bug>

dug>里的属性。

Error是一个map,想取里面的内容用error.name[0](ognl表达式。

22、访问web元素,request,session,application,HttpServletRequest,HttpSession,ServletContext。

a)取得request,session,application,利用ActionContext拿到Map值(一般有Context是封装环境),当我们利用些对象request.put身变量里复制时候,会全部复制到http的request对象里去,在前台就能访问了。

都不是单例。

Request.getAttru...(“name”)和获取值。

b)(只用这种,除非特殊情况)实现接口ApplicationAware,RequestAware,SessionAware,(Aware得知,知道,获得)要求提供三个方法,setRequest,setSession,setApplication,当实现上面三个接口就应该知道对应的request,session,application的存在。

(实现ioc(inverseofcontrol)或di(dependencyinjection)设计思想),依赖注入到request里面或本来由自己控制,现在由别人控制。

最常用的。

Request在类里面也很少拿。

将http原始的request转换成map类型的request.<%=request.getAttribute("name")%>
用这种方法取值

c)若想访问http里的request,session,application类型,定义为HttpServletRequest,HttpSession,ServletContext。

实现接口ServletRequestAware,对应一个setServeltRequest方法,给变量赋值。

23、Struts.xml里面配置可以包含其它xml文件,当成struts.xml里的一部分。

24、DefaultAction默认 Action的引用。

如果找不到对应的Action就去找它。

但是找到后,不会去执行它的Action里的配置的类,只是单纯的跳转到指定的页面。

(注意这里面的这是一个bug,可以在web.xml的defaultAciton设置默认Action这样可以省去default-action-ref了。

)有待解决!

25、注意解决问题的方式。

26、Result类型,在定义result的时候可以定义一个类型。

默认是dispatcher,服务器跳转(forward跳转只能跳转到页面)。

a)Dispatcher(默认)

b)Redirect(点击之后url显示的是jsp的地址)

c)Chain(服务器跳转到Action)

d)redirectAction(客户端跳转到Action)

e)freemarker

f)httpheader

g)stream

h)velocity

i)xslt

j)plaintext

k)tiles

27、${r}r是Action的一个成员变量。

对于任何一个Action的属性都会放到堆栈里面,Vlauestackcontents里面。

R是Action的一个属性可以用{r}取值,而r是动态确定的,叫动态结果集。

Ognl表达式。

(不常用)

28、Jsp页面从值栈取值,

propertyvalue=”#parameters.r”>

29、将Actionr的参数传递出来,也可以/user_success.jsp?

name={name}

30、其中extends继承,相当于继承包的配置,这里继承struts缺省值。

也可以extends=“user”继承了包为user的所有配置。

(这是很常用的方法)

31、/main.jsp全局的共用结果集。

32、凡是forward过程共享一个值栈。

33、作业

34、看文档(学会使用文档)doc文档,struts-tags

35、设计BBS(做一个约定,在项目经理下)

36、

Ognl(ObjectGraphNavigationlanguage)

37、

38、先做原型再一点一点向上包。

这种模式更容易适应需求,迭代式作试验。

39、

propertyvalue=”username”/>基中username是OGNL表达式。

{}也是ognl表达式。

40、只有我们在url里面传user.xxx,才会构造user方法。

如果在url里面不传递参数user.xxx只有xxx则也可以,但是需要自己new在类里面new一个user对象。

空的构造方法没有时候,就不会自动初始化。

41、一般DomaModel都要提供无参的构造函数。

否则会出错。

42、访问Action多级Cat.friend.name是可以的

propertyvalue=”Cat.friend.name”/>调用方法也是一样的,很直观,Cat,friend.getClass(),但是直接调用方法的时候只能是针对Action,不用类名只写方法名。

43、访问当前值栈的方法也可以用

propertyvalue=”m()”/>

44、访问静态方法,访问静态属性

propertyvalue=”@+类名+@+方法/属性”/>例

propertyvalue=”@Cat@getName()”/>,但是在2.1里面改了一个设置,要在struts.xml里面加上:

,才能成功访问的静态方法。

访问Math类的静态方法,s:

propertyvalue=”@@max(2,3)”/>其它类不能用此方法。

45、访问普通类的构造方法

propertyvalue=”newCat(“name”)”/>

46、访问普通类的集合:

a)访问list和数组一模一样:

propertyvalue=”users”/>

b)访问list某个元素:

propertyvalue=”users[0]”/>

c)访问list某个属性集合:

propertyvalue=”users.{age}”/>,{}在ognl里可以代表一个集合。

返回users里age的那个集合。

d)访问list某个属性集合中某个特定值:

propertyvalue=”users.{age}[0]”/>或

propertyvalue=”users[0].{age}”/>

e)访问Set集合:

propertyvalue=”dogs”/>

f)访问Set某个元素:

propertyvalue=”dogs[0]”/>(一般取不到,因为Set里元素没有顺序。

没有意义)

g)访问Map集合:

propertyvalue=”dogMap”/>

h)访问Map中某个元素:

propertyvalue=”dogMap.dog101”/>

i)访问Map中所有的key:

propertyvalue=”dogMap.keys”/>

j)访问Map中所有的value:

propertyvalue=”dogMap.values”/>

k)访问Map的大小:

propertyvalue=”dogMap.size()”/>

47、投影(过滤)

a)

propertyvalue=”users{?

#this.age==1}.{age}”/>,这样比较users里的每一个对象,进行比较,得出结果。

只有?

#或$#或^#这三种

b)

propertyvalue=”users{^#this.age>1}.{age}”/>大于1集合里元素的第一个。

c)

propertyvalue=”users{$#this.age>1}.{age}”/>大于1集合里元素的结尾的一个。

d)

propertyvalue=”users{$#this.age>1}.{age}==null”/>输出true/false

48、用[]访问元素:

propertyvalue=”[0]”/>访问ognl里面的对象集合。

可以

propertyvalue=”[0].username”/>第一个Action里没有username没有,则继续找。

当内部服务器跳转时候可能会产生值栈里两个Action。

可能会更多。

49、在ognl里面可以用一个单引号代表一个双引号。

不能跟java混淆

50、Js动态的指定连接内容:

onclick=”javascript:

documents.f.action=’login1’;document.f.submit();”onclick=”javascript:

documents.f.action=’login2’;document.f.submit();”

51、StackContext.顾名思义,栈的上下文环境.访问的时候,通过#key来访问.如下:

假设reques中有名为obj属性的值.使用OGNL表达式访问.

property value="#request.obj” />这样就可以取到stackContext中的值.

52、Struts-tags

53、多做试验GenericTagRefernce

54、标签里有的是ognl表达式,有的是字符串。

propertyvalue=”username”/>由于value是一个object表达式,所以struts2会把username解析为ognl表达式,若想传真真的字符串,只能:

propertyvalue=”’username’”/>

55、如果值取不到,可以用这个方法设置默认值:

propertyvalue=”username”default=”黄标”/>

56、设定HTML:

propertyvalue=”


”escape=”false”/>默认escape为true.默认不会转换为html语言。

Escape是否解析与html相关的字符串。

57、Set标签:

(一般很少用,一般用来换名字用。

如果变量名太长,但是用到多次就可以用来换行)

a)设置变量的值。

Var变量名,value值:

setvar=”username”value=”黄标”/>,默认(scope范围为Action)放在request和ActionContext里面.

b)从reuqest取值:

propertyvalue=”#request.username”/>

c)从ActionContext取值

propertyvalue=”#username”/>

d)从相应的范围取值:

propertyname=”userPassword”value=”password”scope=”page”/>如果能取出来说明在我们配置文件已经有这个属性了。

e)设定var范围为ActionContext:

setname=”userPassword”value=”password”var=”a”/>其中name已经被废弃了。

setvalue=”password”var=”a”/>

f)从相应的范围取值:

propertyvalue=”#session.username”/>就直接用#username取不到,2.1就算你用了var在ActionContext里面也不能用#username取到值。

58、Bean标签

a)定义bean并使用param来设定新的属性值。

beanname=”Cat”>

bean>

b)定义的bean在debug里如果不定义变量是找不到的:

beanname=”Cat”var=”myDog”>

bean>,会显示在StackContext.把改成

beanname=”Cat”>

debug>

debug>

bean>,就可以在valueStackContents里看到Dog对象了。

放到栈里面去。

当s:

bean结束后就从栈里拿走了,就不能访问了。

c)

paramname=”name”value=”dagou”>

param>这样是不行的,他会把dagou当成是ognl表达式,所以找不着。

59、Include标签(很少用)(中文不能)

a)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1