尚学堂科技马士兵Struts2学习小结v10.docx

上传人:b****4 文档编号:4881873 上传时间:2022-12-11 格式:DOCX 页数:32 大小:1.05MB
下载 相关 举报
尚学堂科技马士兵Struts2学习小结v10.docx_第1页
第1页 / 共32页
尚学堂科技马士兵Struts2学习小结v10.docx_第2页
第2页 / 共32页
尚学堂科技马士兵Struts2学习小结v10.docx_第3页
第3页 / 共32页
尚学堂科技马士兵Struts2学习小结v10.docx_第4页
第4页 / 共32页
尚学堂科技马士兵Struts2学习小结v10.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

尚学堂科技马士兵Struts2学习小结v10.docx

《尚学堂科技马士兵Struts2学习小结v10.docx》由会员分享,可在线阅读,更多相关《尚学堂科技马士兵Struts2学习小结v10.docx(32页珍藏版)》请在冰豆网上搜索。

尚学堂科技马士兵Struts2学习小结v10.docx

尚学堂科技马士兵Struts2学习小结v10

建立第1个Struts2小项目:

Struts2_0100_Introduction

1.拷贝struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\classes\struts.xml至项目的源文件夹src目录下

2.拷贝struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\lib下的所有jar文件至

/Struts2_0100_Introduction/WebRoot/WEB-INF/lib目录

3.修改web.xml文件如下(从struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\web.xml拷贝的):

4.修改struts.xml文件如下:

5.在浏览器输入

http:

//localhost:

8080/Strtus2_0100_Introduction/hello.action,即可输出Hello.jsp的内容

6.如何为jar包中的class文件建立源码以及javadoc?

-选择jar包,右击选择Properties

-建立源代码目录

-建立javadoc目录

-建立一个java文件,选择其中的一个类,按F1键即可弹出对应类的javadoc

7.如何struts.xml自动提示?

-解压struts-2.1.8.1\lib\struts2-core-2.1.8.1.jar

-得到我们修改struts.xml的参照:

struts-2.1.8.1\lib\struts2-core-2.1.8.1\struts-2.0.dtd

-Key:

http:

//struts.apache.org/dtds/struts-2.0.dtd

-Window\Preferences

8.struts2工作原理:

将请求与显示相分离

建立第2个Struts2小项目:

Struts2_0200_Namespace

1、关于Namespace的小结,修改struts.xml如下:

2、copy项目的时候,如copy项目Struts2_0200_Namespace为项目T,则右键选择properties,需要修改:

3、如何导入项目?

1)右击选择Import…

2)必须勾选“Copyprojectsintoworkspace”

3)唯一可能出现的问题:

拷贝项目的JRESystemLibrary的存储路径,重新ConfigureBuildPath即可

建立第3个Struts2小项目:

Struts2_0300_Action

1、关于Action的详述

1)如果不包含class属性,则会自动默认调用

-xwork-core-2.1.6.jar

-com.opensymphony.xwork2.ActionSupport

●ActionSupportimplementsAction

●Action是一个含publicStringexecute()方法的接口

-这个class必须含publicStringexecute()方法

2)如果不包含name属性,则会自动默认设置name="success";否则name等于execute()方法的返回值

3)如何编写一个Action的类?

-含execute()方法的普通类

-implementsAction接口的类,则必须实现execute()方法

-extendsActionSupport的类

2、重申Struts2的工作原理

1)client提交一个客户端请求

2)服务器接收到这个请求后,会根据web.xml中的寻找,调用doFilter()方法

3)strtus2filter根据struts2.xml检查

-namespace

-action:

根据class来处理

-result:

根据name来处理

4)读出result中的.jsp页面,并返回给客户端

建立第4个Struts2小项目:

Struts2_0400_Path

1、struts2中的路径问题是根据action的路径而不是JSP的路径来确定,所以尽量不要使用相对路径,统一使用绝对路径

2、可以由如下生成绝对路径

--request.getContextPath():

获得工程名-->

--request.getScheme():

http-->

--request.getServerName():

localhost-->

--request.getServerPort():

8080,端口号-->

<%

Stringpath=request.getContextPath();

StringbasePath=request.getScheme()+":

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

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

%>

--设置base标签,当前页面的所有超链接前面都会自动加上basePath-->

"/>

index.jsp

建立第5个Struts2小项目:

Struts2_0500_ActionMethod

1、可以为Action指定method属性,而class属性的类UserAction中只有一个add()方法

1)输入http:

//localhost:

8080/Struts2_0500_ActionMethod/user/userAdd,则根据userAdd的method方法调用class属性类中相应方法

2)输入http:

//localhost:

8080/Struts2_0500_ActionMethod/user/user!

add,则根据user!

add调用相应class属性类中的法中

2、总结

1)Action执行的时候并不一定要执行execute方法

2)可以在配置文件中配置Action的时候用method=来指定执行哪个方法,也可以在url地址中动态指定(动态方法调用DMI)(推荐),而前者会产生太多的action,所以不推荐使用

建立第6个Struts2小项目:

Struts2_0600_ActionWildcard

1、关于通配符(Wildcard),请先看struts2的配置文件,其中包com.struts2.action中存在两个类:

StudentAction,TeacherAction,均含add()和delete()方法

输入http:

//localhost:

8080/Struts2_0600_ActionWildcard/actions/Studentadd,*会匹配add,而{1}则匹配出现的第一个*

输入http:

//localhost:

8080/Struts2_0600_ActionWildcard/actions/Teacher_add,*_*会一次匹配为Teacher和add,{1}{2}则匹配相对应的*

2、使用通配符,将配置量降到最低;不过,一定要遵守"约定优于配置"的原则:

类名相似,且方法同名,如StudentAction,TeacherAction,均含add()和delete()方法

建立第7个Struts2小项目:

Struts2_0700_ActionAttrParamInput

建立第8个Struts2小项目:

Struts2_0800_DomainModelParamInput

建立第9个Struts2小项目:

Struts2_0900_ModelDrivenParamInput

1、用Action的属性接收参数

-在自定义的Action中设置属性,以及Setters和Getters方法

-先看struts.xml文件,其中class属性的类UserAction含有add方法,两个私有属性:

privateStringname;

privateintage;

以及get和set方法:

publicStringgetName()

publicvoidsetName(Stringname)

publicintgetAge()

publicvoidsetAge(intage)

-在浏览器中输入:

http:

//localhost:

8080/Struts2_0700_ActionAttrParamInput/user/user!

add?

name=a&age=8,将会调用user下的add方法,并传递name和age两个参数,这里有一个好处,就是不需要再对接受到的int参数转型。

-接收参数赋值时,调用的是属性的setUser、getUser方法,而不是直接调用属性

2、使用用DomainModel(域模型)接收参数

-实际上就是先封装成一个类,即域,然后作为一个属性传递给自定义的Action类

-如下struts.xml,其中class属性类中存在一个add方法以及一个私有属性和对应setUser、getUser方法:

privateUseruser;

而User是包com.struts2.user.model中的一个类,含有同1中的属性和方法

-在浏览器中输入:

http:

//localhost:

8080/Struts2_0800_DomainModelParamInput/user/user!

add?

user.name=a&user.age=8,会自动将参数赋给域User

-想初始化DomainModel,可以自己new,也可以参数传值,但这时候需要保持参数为空的构造方法。

-如果传递的参数和域不匹配,则需要借助DTO(DateTransferObject)或者VO(ValueObject)进行中转,如注册界面,用户只需要用户名和密码,但是注册界面肯定还有个密码确认,这就需要进行中转匹配了。

3、使用ModelDriven(模型驱动)传递参数

1)分析自定义的Action类

-实现了ModelDriven接口,而ModelDriven一个接口,仅含一个TgetModel()方法,则自定义Action必须实现这个getModel()方法

-此时,User对象必须自己去new一个

2)Struts2重点在MVC的M层,即编写自定义的Action去协同Model和View的衔接

3)工作原理:

-Filter类接收到Client传递的参数,然后首先会new一个User对象

-检查Action,发现已实现了ModelDriven接口,然后调用getModel()方法,为返回的Model调用set和get进行封装

-得到User对象的值

4)在浏览器输入:

http:

//localhost:

8080/Struts2_0900_ModelDrivenParamInput/user/user!

add?

name=a&age=8,则可跟第一种使用Action属性传参方式的输入形式一样,不再赘述

建立第10个Struts2小项目:

Struts2_1000_CharacterEncoding

1、观察web.xml中的的配置

2、观察Struts.xml的配置

说明:

,即可解决中文乱码问题,但是,Struts2.1.6中存在Bug,所以,在web.xml将filter改为Struts2.0的Filter,即可重新解决中文乱码问题,而使用新的版本Struts2.1.8,则可以顺利修正Struts2.1.6中的Bug,此时web.xml中的配置又可以改过来了!

建立第11个Struts2小项目:

Struts2_1100_SimpleDataValiation

1、首先查看struts.xml的文件配置信息

2、直接在自定义的Action内编写验证,如下所示:

说明:

因为Action里面不存在request来设置错误信息传递给前台,可以使用如下的方式this.addFieldError(StringfieldName,StringerrorMessage)进行传值

3、查看前台处理错误信息的文件user_add_error.jsp

1)查看源代码

说明:

1.<%@tagliburi="/struts-tags"prefix="s"%>,可以在对应的Jar包中查找:

struts-2.1.8.1\lib\struts2-core-2.1.8.1\META-INF\struts-tags.tld

2.关于

debug>

debug>,以下显示的是ValueContext

建立第12个Struts2小项目:

Struts2_1200_AccessWebElements

如何获取Web元素?

-包括Map类型:

request、ession、application,真实类型:

HttpServletRequest、HttpSession、ServletContext

1、依赖于容器,如以下LoginAction1的源代码:

2、依赖于IoC,最常用的,如以下LoginAction2的源代码:

3、依赖于容器,如以下LoginAction3的源代码:

4、依赖于IoC,如以下LoginAction4的源代码:

5、如何在页面获取request、ession、application?

-这些对象属于ActionContext的内容,访问需要在前面加上“#”

说明:

关于

debug>

debug>,以下显示的ActionContext

6、工作原理(关于LoginAction2)

-Struts2接收来自客户端的请求,然后根据struts.xml文件的Action配置,先new一个LoginAction对象

-检查该LoginAction是否实现了RequestAware接口?

-若实现,则调用setRequest(Maprequest)方法从Filter中读取预先配置的request的,并映射给一个Map类型的request对象

-则execute()即可直接调用得到的Map类型的request

建立第13个Struts2小项目:

Struts2_1300_IncludeModules

1、模块包含,简单的说,就是struts.xml文件的嵌套

-struts.xml如下所示

-login.xml如下所示

建立第14个Struts2小项目:

Struts2_1400_DefaultAction

1、建立默认的Action,可以在浏览器输入访问时不指定Action,或者当访问的Action不存在的时候,均可调用默认的Action,如下图struts.xml的配置:

-浏览器输入:

http:

//localhost:

8080/Struts2_1400_DefaultAction/index,可访问

-浏览器输入:

http:

//localhost:

8080/Struts2_1400_DefaultAction/,可访问

-浏览器输入:

http:

//localhost:

8080/Struts2_1400_DefaultAction/login,可访问

建立第15个Struts2小项目:

Struts2_1500_ResultType

1、Result的类型Type:

包括dispatcher、redirect、chain、redirectAction、freemarker、httpheader、stream(上传下载)、velocity、xslt、plaintext、tiles,参考如下struts.xml的配置:

建立第16个Struts2小项目:

Struts2_1600_GlobalResult

1、关于struts.xml文件的配置:

说明:

-用来配置全局的Result

-extends的作用

 

建立第17个Struts2小项目:

Struts2_1700_DynamicResult

1、关于struts.xml文件的配置:

2、关于UserAction的源代码:

3、在浏览器输入:

http:

//localhost:

8080/Struts2_1700_DynamicResult/user/user?

type=1,返回的Result的结果则是则是/user_success.jsp,即${r}=/user_success.jsp

在浏览器输入:

http:

//localhost:

8080/Struts2_1700_DynamicResult/user/user?

type=2,返回的Result的结果则是则是/user_error.jsp,即${r}=/user_error.jsp

 

建立第18个Struts2小项目:

Struts2_1800_ResultWithParams

1、在Action之间forward的时候,不需要重新传递参数,但是,当客户端跳转到jsp页面的时候,就需要重新传递参数,此时,valueStack中因为没有Action,所以没有值的保存;但是,可以从ActionContext的parameters参数获取传递的值。

2、关于struts.xml文件的配置:

3、关于UserAction的源代码:

3、如何读取?

使用ActionStack的parameters参数读取。

关于user_success.jsp的源代码如下:

 

建立第19个Struts2小项目:

Struts2_1900_OGNL

1、ObjectGraphNavigationLanguage

2、关于struts.xml配置如下:

3、关于ongl.xml配置如下:

4、如何使用OGNL?

    --输出的内容就可以理解为OGNL表达式,如username-->

  1. 访问值栈中的action的普通属性:

    username:

    propertyvalue="username"/>

  2. 访问值栈中的对象的普通属性(getset方法):

    user.age:

    propertyvalue="user.age"/>|

    propertyvalue="user['age']"/>|

    propertyvalue="user[\"age\"]"/>

  3. 访问值栈中的对象的普通属性(getset方法):

    cat.friend.name:

    propertyvalue="cat.friend.name"/>

  4. 访问值栈中对象的普通方法:

    propertyvalue="password.length()"/>

  5. 访问值栈中对象的普通方法:

    propertyvalue="cat.miaomiao()"/>

  6. 访问值栈中action的普通方法:

    propertyvalue="m()"/>


  7. 访问静态方法:

    propertyvalue="@com.tim.struts2.ognl.S@s()"/>

  8. 访问静态属性:

    propertyvalue="@com.tim.struts2.ognl.S@STR"/>

  9. 访问Math类的静态方法:

    propertyvalue="@@max(2,3)"/>


  10. 访问普通类的构造方法:

    propertyvalue="newcom.tim.struts2.ognl.User(8)"/>


  11. 访问List:

    propertyvalue="users"/>

  12. 访问List中某个元素:

    propertyvalue="users[1]"/>

  13. 访问List中元素某个属性的集合:

    propertyvalue="users.{age}"/>

  14. 访问List中元素某个属性的集合中的特定值:

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

    propertyvalue="users[0].age"/>

  15. 访问Set:

    propertyvalue="dogs"/>

  16. 访问Set中某个元素:

    propertyvalue="dogs[1]"/>

  17. 访问Map:

    propertyvalue="dogMap"/>

  18. 访问Map中某个元素:

    propertyvalue="dogMap.dog101"/>|

    propertyvalue="dogMap['dog101']"/>|

    propertyvalue="dogMap[\"dog101\"]"/>

  19. 访问Map中所有的key:

    propertyvalue="dogMap.keys"/>

  20. 访问Map中所有的value:

    propertyvalue="dogMap.values"/>

  21. 访问容器的大小:

    propertyvalue="dogMap.size()"/>|

    propertyvalue="users.size"/>


  22. --?

    表示条件,^表示满足条件的集合中开头的第一个,$表示满足条件的集合中的最后一个-->

  23. 投影(过滤):

    propertyvalue="users.{?

    #this.age==1}[0]"/>

  24. 投影:

    propertyvalue="users.{^#this.age>1}.{age}"/>

  25. 投影:

    propertyvalue="users.{$#this.age>1}.{age}"/>

  26. 投影:

    propertyvalue="users.{$#this.age>1}.{age}==null"/>


  27. --[]可以从上到下读出valuestack里面存的对象-->

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

当前位置:首页 > 总结汇报 > 其它

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

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