struts2重点Word文档下载推荐.docx
《struts2重点Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《struts2重点Word文档下载推荐.docx(30页珍藏版)》请在冰豆网上搜索。
1、浏览器发送请求,如login.action(struts2-*.action)(struts1-*.do);
2、核心控制器FilterDispatcher根据请求决定调用合适的action;
3、拦截器链自动对请求应用通用功能,如validation输入验证;
4、回调Action的execute方法,该方法先获取用户请求参数,然后调用业务逻辑组件如JavaBean处理用户请求;
5、Action的execute方法处理结果将输出到浏览器,可以是HTML、JSP,也可以是Velocity、Freemarker等其他模板技术;
从代码层面上看,Struts2需要新加的内容:
*.action(相当于servlet,可以有n个方法如增删改查,默认有个execute方法,根据页面过来的参数调用哪个方法)
result(视图层技术如jsp文件的映射,由struts.xml文件来配置)
struts.xml(struts核心配置文件,完成诸如定义action的映射路径,以及result的定义等功能)
二、初识Struts2——HelloWorld
实现目标:
地址栏输入http:
//localhost:
88/Struts2HelloWorld/helloworld.jsp,输入用户名,交由http:
88/Struts2HelloWorld/hello.action处理,返回到helloworld.jsp视图层,并显示刚才输入的值;
步骤:
1、MyElipse下新建一个叫struts2hello的web工程;
2、将struts2的jar包copy到WEB-INF/lib/目录下;
3、修改web.xml文件,配置Struts2的核心Filter;
<
filter>
<
filter-name>
struts2<
/filter-name>
filter-class>
org.apache.struts2.dispatcher.FilterDispatcher<
/filter-class>
/filter>
filter-mapping>
url-pattern>
/*.action<
/url-pattern>
/filter-mapping>
4、在src目录下增加struts.xml配置文件;
<
?
xmlversion="
1.0"
encoding="
UTF-8"
>
!
DOCTYPEstrutsPUBLIC
"
-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
http:
//struts.apache.org/dtds/struts-2.0.dtd"
struts>
includefile="
struts-default.xml"
/>
constantname="
struts.i18n.encoding"
value="
GBK"
packagename="
default"
extends="
struts-default"
global-results>
<
resultname="
login"
login.jsp<
/result>
index"
index.jsp<
/global-results>
actionname="
UserAction"
class="
com.app.action.UserAction"
/package>
/struts>
5、实现控制器
packagecom.app.hello;
importcom.opensymphony.xwork2.Action;
//POJO(PlainObjectJavaObject低侵入式)
publicclassUserWorldimplementsAction{
//获取页面上的控件,只需要要在这里注入对应的属性,提供setter和getter方法即可。
(名称要完全一样)
privateUseruser;
privateUserDAOuserDAO=newUserDAO();
//action默认执行方法
publicStringexecute(){
if(!
userDAO.login(user.getUsername(),user.getPassword())){
ActionContextac=ActionContext.getContext();
ac.put("
msg"
"
登陆信息有误"
);
//request.setAttribute("
"
);
}else{
return"
;
//转发到逻辑视图对应的页面
}
return"
}
publicUsergetUser(){
returnuser;
publicvoidsetUser(Useruser){
this.user=user;
//http:
8080/Struts2HelloWorld/hello!
aliasAction.action
publicStringaliasAction(){
name="
success"
}
6、修改struts.xml文件,添加Action的映射和逻辑视图转向,在<
中添加如下内容;
hello"
com.app.hello.HelloWorld"
/helloworld.jsp<
/action>
7、添加JSP视图层,取名helloworld.jsp
%@pagecontentType="
text/html;
charset=utf-8"
%>
%@taglibprefix="
s"
uri="
/struts-tags"
%@pageisELIgnored="
false"
DOCTYPEHTMLPUBLIC"
-//W3C//DTDHTML4.01Transitional//EN"
html>
head>
metahttp-equiv="
Content-Type"
content="
charset=gb2312"
title>
SayHello<
/title>
/head>
body>
h3>
Say"
Hello"
to:
/h3>
s:
propertyvalue="
name"
/>
${name}
formaction="
Name:
textfieldname="
submit/>
/s:
form>
/body>
/html>
三、Struts2基础
3.1、核心控制器FilterDispatcher
FilterDispatcher是Struts2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求。
如果用户请求以*.action结尾,该请求将被转入struts2框架进行处理。
Struts2获得*.action请求后,将查找struts.xml文件的配置信息,改文件配置了action的name和class属性,其中name属性决定了该action处理哪个用户请求,而class属性决定了action的实现类。
Struts2用于处理用户请求的action实例,并不是用户实现的业务控制器,而是action代理——因为用户实现的业务控制器并没有与servletAPI耦合,显然无法处理用户请求。
而Struts2框架提供了系列拦截器,该拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到action中,并回调action的execute方法来处理用户请求。
3.2、业务控制器
业务控制器组件就是用户需要实现的Action类,该类包含一个execute方法,该方法返回一个字符串,字符串就是一个逻辑视图名——对应于一个JSP文件或其他视图层技术;
程序员实现完action后,需要在struts.xml配置action三个部分:
1、action处理的url;
2、action对应的实现类;
3、action里包含的逻辑视图与物理资源间的对应关系;
如:
input"
3.3、模型组件
模型组建包括实体bean和业务逻辑bean,或其他J2EE组件,如EJB等技术;
3.4、视图组件
Struts2改变了Struts1只能使用JSP作为视图层技术的现状。
允许使用如Freemarker、Velocity等模板技术;
每个action都有result子元素,定义逻辑视图名与物理资源的映射关系。
3.5、Struts2基本配置
3.5.1、配置web.xml
配置加载struts2标签库(如果web应用使用sevlet2.4以上的规范,无需配置因为它会自动加载标签库文件)
1、配置FilterDispatcher核心控制器类;
2、标签库;
需要把TLD描述文件COPY到WEB-INF/下;
taglib>
taglib-location>
/WEB-INF/tld/*.tld<
/taglib-location>
//TLD文件真实路径
taglib-uri>
/WEB-INF/tld/*.tld<
/taglib-uri>
//引用位置
/taglib>
想在jsp文件使用该标签:
%@tagliburi=””prefix=”s”%>
3.5.2、配置struts.xml
避免struts.xml文件过于臃肿,可以分拆成多个配置文件,然后包含进来;
//包含默认的xml文件
3.5.1、配置struts.properties属性文件
struts.properties应该放在WEB-INF/classes下,该文件包含了系列的key-value对象,每个key就是一个属性,对应的value就是值;
常见的key:
//设置web应用的默认编码,相当于request.setCharacterEncoding(“GBK”)
struts.i18n.encoding=GBK
//每次进来http请求时,是否重新加载国际化资源文件;
开发阶段应该设为true,发布阶段为false
struts.i18n.reload=false
//定义国际化资源文件的baseName
struts.custom.i18n.resources=globalMessages
有时候开发人员不喜欢使用额外的struts.properties文件,也可以在struts.xml通过配置constant元素,一样可以配置属性:
--指定国际化资源文件的baseName-->
struts.custom.i18n.resources"
globalMessages"
3.5.1、struts.xml文件结构
includefile=”struts-default.xml”/>
constantname=”struts.i18n.encoding”>
GBK<
/constant>
packagename=”default”extends=”struts-default”namespace=”/”>
--全局逻辑视图的定义-->
resultname=”input”>
/input.jsp<
actionclass=”com.app.action.UserAction”name=”user”method=”方法名(可选)”>
四、深入Struts2
4.1、深入struts2.xml配置文件
4.1.1、常量配置
可以在struts.xml也可以在struts.properties文件配置属性;
constantname=”struts.i18n.encoding”value=”GBK”/>
Struts框架按照如下顺序加载常量:
struts-default.xml
struts.xml
struts.properties(可以把struts.xml文件里的constant部分丢过来,利于管理)
web.xml
若同名,后面的会覆盖前一个;
4.1.2、包配置
Struts2核心组件是Action和拦截器,struts2用包来管理它们。
每个包就是多个Action和拦截器的集合。
下例定义了一个default包,并继承struts默认的包:
namespace=”/”>
8080/项目名/hello.action
actionname=”hello”class=””/>
a"
namespace=”/a”>
b"
namespace=”/b”>
name属性:
必填,包名,改名字是被其他包引用的key;
extends属性:
可选,改包继承其他包,自动拥有对方的action和拦截器等;
namespace属性:
可选,定义包的命名空间;
abstract属性:
可选,值为true|false,若为true,则改包为抽象包,不能包含action定义。
4.1.3、命名空间配置NameSpace
考虑到同一个web应用需要同名的action,struts2以命名空间来管理action,同一个命名空间不能有同名的action,不同的命名空间可以有同名的action;
Struts2通过为包指定namespace属性来为包下的所有action指定共同的命名空间;
--配置Action和逻辑视图-->
com.app.package1.HelloWorld"
admin"
namespace="
/admin"
com.app.package2.HelloWorld"
上例配置了两个包,admin包指定了/admin命名空间,也就是说它能处理
88/Struts2HelloWorld/admin/hello.action下的所有URL请求;
对于default包,没有指定命名空间,那么默认它的命名空间是“”;
可以为包显示指定根命名空间为”/”;
如果请求为/barspace/bar.action,系统首先查找/barspace命名空间里名为bar的action,如果有,则调用改action处理请求,否则会去默认命名空间去找;
若都找不到,系统会报错误;
4.1.4、包含配置
包含配置允许将一个struts.xml分拆成多个以便于管理;
每个被包含的文件都是标准的struts2配置文件;
struts-shop.xml"
struts-user.xml"
4.1.5、异常处理配置
在程序中出现异常可以尽管往外抛,由统一接口做页面处理
%@pageerrorPage=”url”%>
在异常处理页中处理异常:
%@pageisErrorPage=”true”%>
%
try{}catch(Exceptione){}
%>
package
name="
bbs2009_default"
extends="
result
error"
/error.jsp<
global-exception-mappings>
exception-mapping
result="
exception="
java.lang.Exception"
/global-exception-mappings>
这样抛出的异常java.lang.Exception由struts2处理,跳转到/error.jsp页面。
这个异常声明是全局的,也可以声明成局部的。
4.1.6、拦截器配置
拦截器允许在action处理请求之前或者之后,插入开发者自定义的代码;
详细请参考拦截器配置
4.2、Strus2的Action
4.2.1、实现Action
要点:
1、Struts2的Action属于低侵入式设计,不需要实现任何接口或者继承类。
也就是一个普通的POJO;
2、使用Action里的属性封装请求参数以及处理后的结果,对应给每个属性添加setXXX和getXXX方法;
可以利用<
propertyvalue=”username”/>
或者{$username}输出属性的值;
可以封装任何类型,包括自定义的类、数字、集合类、MAP等数据类型;
3、可以实现Action接口或者继承ActionSupport类,以利用其中的方法,增强功能;
4.2.2、Action访问ServletAPI
Struts2提供了一个ActionContext类来访问ServletAPI,使用request、session、application对象;
//实例化ActionContext用来访问ServletAPI
if(getUsername().equals("
tiger"
)&
&
getPw().equals("
1"
)){
//获取application的count属性
Integercount=(Integer)ac.getApplication().get("
count"
if(count==null)
count=1;
else
count++;
//设置application的count属性
ac.getApplication().put("
count);
//设置session的username属性
ac.getSession().put("
username"
//设置request的msg属性,相当于request.setAttribute(key,value)
ac.put("
你已成功登陆"
returnSUCCESS;
登陆失败"
returnLOGIN;
4.2.3、Action直接访问Servl