文档视界 最新最全的文档下载
当前位置:文档视界 › struts2配置及例程

struts2配置及例程

struts.xml配置及例程

1.配置文件的优先级

在struts2中一些配置(比如常量)可以同时在struts-default.xml(只读性),strtus-plguin.xml (只读性),struts.xml,struts.properties和web.xml文件中配置,它们的优先级逐步升高,即是说后面的配置会覆盖掉前面相同的配置。

2.配置形式

下面以对struts.i18n.encoding=UTF-8的配置为例进行说明:

在struts.xml配置形式如下:

在struts.properties的配置形式如下:

struts.i18n.encoding=UTF-8

在web.xml中配置如下:

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts.i18n.encoding

UTF-8

说明官方声称配置了此常量可以解决中文乱码问题,但实事上并不能达到目的,在前面的三个项目中,如果我们在表单中输入中文,其结果是会出现乱码。解决此问题参看[一.7的注意]。这是struts2.1.6中的一bug,它的下一版2.1.8已解决此问题。

3.package配置相关

下面我们建立struts2package项目来进行package相关测试:

说明:在上面的配置文件中所用到的Test1Action和Test2Action这两个Action都只是继承了com.opensymphony.xwork2.ActionSupport类,而ActionSupport默认返回的就是“success”,所以当点击上面的链接分别转到了forward目录下的test1.jsp和test2.jsp。下面重点来看这个package元素的namespace属性及action的name属性,它们共同定义了action所映射到的实质文件。上图展示了链接地址和action的对应关系,所以当我们要想访问一个action 所关联到的jsp文件时,应该用namespace+action的name 关于它的内容测试可以参考struts2package项目。

补充:通常情况下,action元素的name是属性值是不能出现“/”的,所以希望通过action 中name属性来实现多级映射,需要在sturts.xml中增加如下属性:

这样配置后就可以再action的name元素中使用“/”了。比如:

/forward/test3.jsp

然后输入test3
链接地址就可以访问了

强调:namespace默认值“”,即不配置namespace属性。它的意思是:如果action不能进行完整路径匹配,则会来此namespace下进行匹配,比如:.../test/test/test.action,如果参照namespace及action的name不能找到也之完全对应的action,它会再到依次追溯到上级目录中查找,即是说它会以…/test/test.action这样的路径来对应namespace和action的name 进行查找。如果返回到最终的目录仍找不到,它就会到namespace="/"对应的包下查找名为test的action,如果仍找不到,它就会去默认的namespace下查找名为test的action,如果找到则执行此action。另外,namespace也可以配置成namespace="/"。它代表配置为项目的根。总结action的名称探索顺序:完全对应、逐步追溯到上级目录查找、"/"下查找、默认namespace下查找。

为什么要提出namespace,主要是避免多人共同开发项目出现名字冲突。如果不使用namespace,多个人所写的action中可能出现重名的现象,这样当项目合并时就会出现冲突。而有了namespace可以在项目开发时由项目经理给每一个人分不同的namespace,这样每个开发人员只需要保证自己所写的action不同名即可。

namespace引发的链接问题:当我们为action配置了namespace时,访问此action的形式总会是如下形式:.../webappname/xxx/yyy/ActionName.action 而当此action成功执行跳转到某个jsp页面时,如想在此jsp页面写链接,一定要写绝对路径,因为相对路径是相对.../webappname/xxx/yyy/,而如果以后我们修改了action的namespace时,相对路径又要变,所以链接不能写成相对路径。以下介绍绝对路径的写法:通常用myeclipse开发时建立一个jsp文件,默认总会有如下内容:

<%

String path = request.getContextPath();

String basePath=request.getScheme()+"://"+request.getServerName()+":"

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

%>

我们写绝对路径可以参此内容。还可以参下的 来完成绝对路径的书写。

4.分工合作include:指定多个配置文件

比如让jack来单独开发一个action,在jack.xml中的配置文件为:

/forward/test4.jsp

然后在struts.xml文件中增加如下内容: 它实质就是把jack.xml中的及其内容写进struts.xml中的根元素下。

链接:test4 这样便可以访问到了forward目录下的test4.jsp了。

5.tomcat认证访问

接上例:namespce的作用除了在前面提到的避免协同开发名字冲突外,还为认证提供一个条件。比如jack开发的东西所关联到的页面需要权限才能被访问。由于多为tomcat中的内容,下面只列出步骤。

步骤一

tomcat的conf目录下tomcat-users.xml内容如下:

步骤二

在web.xml中增加如下内容:

jack

/jack/*

POST

GET

admin

admin

BASIC

input authentication message

这样配置完成后,当我们访问.../jack中的任何内容都会要求输入密码认证信息,认证时输入tomcat-users.xml配置的admin权限的用户名和密码即可访问(这里就只有jack用户名可以访问)

6.初识拦截器

拦截器能在action被调用之前和被调用之后执行一些“代码”。Struts2框架的大部分核心功能都是通过拦截器来实现的,如防止重复提交、类型转换、对象封装、校验、文件上传、页面预装载等等,都是在拦截器的帮助下实现的。每一个拦截器都是独立装载的(pluggable),我们可以根据实际的需要为每一个action配置它所需要的拦截器。

在myStruts2项目下,重新对配置文件作如下修改:

class="com.opensymphony.xwork2.interceptor.TimerInterceptor" />

class="com.opensymphony.xwork2.interceptor.ParametersInterceptor" />

/success.jsp

/failure.jsp

首先在package中定义了两个拦截器,然后在login action中引用了这两个拦截器,需要说明的是这里使用的拦截器都是系统自带的拦截器。其实在extends所继承的struts-default中就包含了很多拦截器,也包括我们这里所用的拦截器,但如果在此action中不使用params拦截器,将会报空指针错,因为params拦截器的作用是传递表单参数,如果不使用此拦截器就不能在action中得到表单参数,所以引用时会报空指针错。虽然extends继承的strust-default自带有params拦截器,但是当我们自己引用了拦截器时,继承struts-default 将不会再为我们分配默认的拦截器(有点类似构造器),但是我们仍然可以通过来继续使用struts-defalut的拦截器。补充:由于上面的package继承于struts-default,而我们这里所用到的timer和params都是在struts-defalut 中定义过,所以即使我们在中没有定义过这两个拦截器,也可以直接在action 中引用。

使用组合多个拦截器:比如我们想把上面的params和timer这两个拦截器组合:

然后再在action引用”,效果和分别引用两个是一样的。其实我们使用strtus-default中的也是使用interceptor-stack方式。

7.Action中的method属性

在struts1.x中我们知道通过继承DispatchAction可以实现把多个Action进行统一操作,在struts2中实现action的统一操作也很简单。我们以crud操作为例,把crud集中到一个Action 中。

步骤一、

建立CRUDAction,内容如下:

package com.asm;

import com.opensymphony.xwork2.ActionSupport;

public class CRUDAction extends ActionSupport {

public String add() {

return "success";

}

public String del() {

return "success";

}

public String update() {

return "success";

}

public String query() {

return "success";

}

步骤二、

配置此Action,为了清晰明了,专为此Action,建立一个配置文件crud.xml,主要内容如下:

/crud/addSuccess.jsp

/crud/delSuccess.jsp

/crud/updateSuccess.jsp

/crud/querySuccess.jsp

分析:上面的method方法的值来源于CRUDAction中方法的名字,这样当我们访问上面的每一个Action时,它实质是和method指定的方法关联上。

步骤三、

把crud.xml配置文件并入struts.xml中,只需增加如下代码:

步骤四、

编写相应的jsp页面,在此略去crud文件夹下的四个跳转jsp页面(addSuccess.jsp等),重点是crud.jsp页面。内容如下:

<%String path=request.getContextPath();%>

添加数据

删除数据

查询数据

修改数据

步骤五、

发布测试。

补充扩展,动态调用DMI:不使用method实现统一.我们在crud.xml中增加如下内容:

/crud/op.jsp

然后再在crud.jsp中定义如下链接:

添加数据

删除数据

查询数据

修改数据

注意查看上面的链接地址,它们都是针对op action,然后再加地上“!+CRUDAction中相应的方法名”,最后再写上.action即可以访问到统一页面op.jsp。这样做虽然能减少页面,但是由于它们实质用到的是同一个Action,所以这就意味着我们要使用的拦截器相同,相同的跳转result。实际中这种方式很少使用,在此略作了解。如果不想使用动态方法调用,我们可以通过常量来关闭,即在struts.xml中增加如下配置:

扩展2:在CRUDAction中使用do。举例:我们在CRUDAction中增加一个新的方法,内容如下:

public String doMain(){

return "success";

}

然后再在在crud.xml中增加如下内容:

/crud/main.jsp

注意:配置中method属性值是doMain中去掉do后M小写。然后再在crud.jsp中增加如下链接:

main页面

随后便可以访问到.../crud/main.jsp页面了。

8.使用ForwardAction实现页面屏蔽。

我们在jsp页面之间写链接总会是.../xxx.jsp,而如果我们想屏蔽掉具体的jsp,只需要所jsp页面配置成一个ForwardAction即可实现。示例如下:在根目录下有一个index.jsp主页,我们strtus.xml中作如下配置:

/index.jsp

说明:如果没有未action指定class,默认就是ActionSupport类,如果没有为action指定method属性,则默认执行execute方法,如果没有指定result的name属性,默认值为success。知道了这些再结合ActionSupport的源码就不难理解实现转发的原理了。

随后再在前面第7点扩展中用到的op.jsp中增加如下代码:

forward

最后再测试访问op.jsp,在op.jsp中页面中直接点链接便可以跳到index.jsp,观察地址栏发现此时跳到index页面是进行的服务器跳转,如果我们在上面的配置中的result增加type属性变成/index.jsp,实现的跳转就是客户端跳转。补充:像这

种forward形式的action实质是执行的ActionSupport 这个Action。因此配置它的result可以参看此类的api文档,比如它常用的result name有:success、login、input等。

8.使用default-Action配置统一访问

default-action-ref,当访问没有找到对应的action时,默认就会调用default-action-ref指定的action.同样在上面的package中增加如下内容:

/other/error.jsp

上面一段内容就是说当我们访问的action不能被找到时便指向名为error的action中去,接着我们在下面配置了这个error Action。但是要注意,一个package内只配置一个,如果配置多个,就无法预测结果了. 此时我们只要输入.../myStruts2/luanFangWen.action这样的形式,它就会去访问这个默认的,通常我们会为它配置一个错误页面,以提示用户访问的页面不存在。在web开发中,我们还可以把这个默认的action访问配置成主页,这样当用户访问一些不存在的action时,总会跳到主页上去。

通过此配置,只要是访问一个不存在的action便会转向到.../other目录下的error.jsp页面。但是如果访问是其它的不存在资源则仍是报tomcat所标识的404错误,我们可以在web.xml 中作如下配置:

404

/other/404error.jsp

这样配置后,访问错误页面将跳到.../other/404error.jsp页面中去。补充说明:如果我们用ie 访问时,如果选中了[工具][IE选项][高级][浏览][显示友好的http错误信息],则配置的错误页面将失效,因为找不到资源时会报HTTP404错误,而ie截取到此错误进行了它自身的友好处理,所以我们设置就失效。

小结Action

在struts2中一个普通的java类只要有public String execute()这样的方法都可以配置成一个Action,另外我们可以实现Action接口来使java类成为一个Action,但通常的做法是继承

ActionSupport类,这也是以后的项目中惯用的方法,也是推荐的首选方法。与struts1.x不同的是:在struts2中每一个Action被请求访问时都会new出这个Action对象,所以Action 本身不存在线程安全的问题。

9.使用通配符

建立struts2wildcard项目,此实例基本仿照前面前面第7点的实例改写而成。为了使用通配符,只需要改写配置文件即可。此实例未使用通配时的配置文件如下:

/user/addUser.jsp

/user/delUser.jsp

/user/queryUser.jsp

/user/updateUser.jsp

我们注释掉上面的配置,使用通配符只需如下内容即可达到相同的效果:

/user/{1}User.jsp

原理:当有.../addUser.action请求时,如果不能在当前应用中找到完全相同的addUser名字的Action时,通配符配置这时就起作用了,按通配原则,它便和上面的name="*User"相配成功,这里不难明了*此时代指的内容是add,再来看method恰恰是引用第一个*的内容,所以它的method此时的完整名为addUser,它刚好和com.asmUserAction中的addUser方法相对,所以它会去addUser方法,再来看下面的result配置所指代的页面,它也用到了{1},所以它的完整页面是/addUser.jsp。其实如果我们有良好的编程命名习惯,所有的Action我们都只需要进行一次配置。举例:规定所有的Action类都用XXXAction来命名,类中所有的CRUD方法都用add/del/update/query。Jsp页面也用add/del/update/query_XXX.jsp这样的形

式。即配置文件可以写成如下形式:

.../{1}_{2}.jsp

Name中第一个*代表CRUD操作的名字,第二个*代表类的名字。所以访问链接地址举例如下:

.../del_User.action将访问到User类的del方法,成功后跳到del_User.jsp页面。补充说明{0}是代表name中所有的*组合。

10.使用0配置:ZERO Annotation

11.Result配置详解

说明:在前面的许多案例中我们所用到的Action基本都继承自ActionSupport这个类,而在这个类中我们定义了五个字段:SUCCESS,NONE,ERROR,INPUT,LOGING。我们可以直接返回这些字段值,这些字段值实质是被定义成:String SUCCESS=”success”这样的形式,所以我们只要在Result元素中用它们的小写即可。

标准完整形式如下:

/default.jsp

如果我们都采用默认的形式,最终可以简写成:/default.jsp

探讨type类型:

以上对type类型作简要的说明,下面来看实例:当一个Action处理后要返回的Result是另一个Action时,作如何配置,关键就是配置type类型。下面建立struts2result项目说明

步骤一:

建立两个Action:TestAction、Test2Action

步骤二:

web.xml配置省略。struts.xml主要配置内容如下:

test2

/test2Suc.jsp

test2

/test2Suc.jsp

test2

/test2Suc.jsp

说明:在名为“test”的action中,我们配置result元素的type类型值为chain,意为将继续把Action传递到下一个名为test2的Action中去,在test2.action中会把页面转向到test2Suc.jsp中去。在type类型为chain时,它的param有4个值可配,除了这里用到的name=”actionName”外(必须配置,否则报错),还有name=namespace|method|skipActions。其中namespace指定要转向到action的名字空间,由于此处是转到Action位于同一个namespace 下,而namesapace的默认值the current namespace,所以可以省略不写(需要说明的是如果要跳到别的名称空间的action中去,除了使用namespace指定外,还可以用:/要跳去action 所在名称空间的值/要跳去的action的name值)。Method用于指定转向到一个目标action 所调用的方法,默认是调用下一个action的execute方法,所以此处仍可以省略。SkipActions 是一个可选的属性,一般不用。具体可以参看chain所对应类的api帮助。

在本实例中,我们还在TestAction中设定一个username字段,并在execute方法执行为它赋

了值,并在test2Suc.jsp中引用了此值。其实这种做法在web开发中还是很有用处,比如可以代替隐藏域。需要注意的是之所以在action的传递中能把设定的这个值保存下去,主要是因为转向都是服务器跳转。如果我们跳转时采取了客户端跳转,比如在test2 action的result 中指定type类型为redirect,要想传递参数可以在result指向的jsp页面中附加参数即可,我们可以在test2 action的result中写成:

/test2Suc.jsp?username=${username}

随后在test2Suc.jsp页面中引用时会出现三个问题:1.EL表达式引用失效,(EL 表达式应该使用${https://www.docsj.com/doc/064410448.html,ername}形式)。我们也可以使用<%=request.getParameter("username")%>获取参数值。 2.由于在前面的TestAction中设定的值为中文,而附加到这里的uri请求的参数后面时会出现乱码问题。(可以使用URI编码再解码解决此问题)3.值栈取值失效:因为每一次request共享同一个值栈,所以服务器端的forward跳转也是能共享同一值栈得。但是着当test action执行后把请求交由test2 action时,test2 action采取的是redirect重定向到test2Suc.jsp页面,这时其实就是重发的一次request,所以在test action保存的值栈内容全部失效。这也就是为什么我们要附加参数的原因。而参数是保存在actionContext中,所以采用了#的方式来取出值。图示说明:

步骤三,

编写链接页面index.jsp。发布测试:

全局result:

如果我们所有的action均有可能跳到相同的页面,则不防使用全局result。为了方便引用我们专门建立一个package来存放公共的result。在会用到个全局的跳转时,只需要把继承自这个公共的package即可。

建立公共包,代码如下:

/error.jsp

由于它下面没的action配置,所以我们可以像默认的struts-default包一样,声明abstract=true,这样声明表示此packgage下不会有action,它一般是用来让别的package继承。随后再在要用到全局result中引用这个公共的package。代码如下:

这样操作相当于把全局的result加到了此package下的所有action中去。动态Result:了解

步骤一:

建立DyanAction,主要代码如下:

package com.asm;

public class DynaAction extends ActionSupport {

private String username;

private String nextAction;

public String execute() throws Exception {

if (username.equals("admin")) {

nextAction = "admin";

} else if (username.equals("user")) {

nextAction = "user";

} else {

nextAction = ERROR;

}

return SUCCESS;

}

...省略get/set方法

}

步骤二、

建立jsp页面dyna.jsp,主要是为了向DynaAction中传递username参数。

相关配置如下:

${nextAction}

/admin.jsp

/user.jsp

分析:当dyna.jsp把参数传递到DynaAction中去时,如果传递的值为admin,我们便设定了nextAction的值admin,在配置文件中我们通过${nextAction}(用在struts配置文件中的ognl,其实nextAction的值是存在值栈中,我们通过${}这样的形式取出。在此只作了解)来获取值便为admin,随后再继续把请求传递到下一个Action中去(此时也即admin.action),为了方便我们设定了两个ForwardAction:admin.action和user.action。这样便可以跳到指定的jsp 页面。原理:dyna.action执行后会继续把请求传递给下一个Action,而下一个Action的到底是哪一个Action,是通过DynaAction中动态指定的,比如这里是根据传递的username的值指定。

12.异常处理

步骤一、

建立struts2exception项目下,在该项目下建立登录页面login.jsp。主要代码如下:

username:

建立LoginAction,代码如下:

package com.asm;

public class LoginAction extends ActionSupport {

private String username;

public String execute() throws Exception {

if (username.equals("exception")) {

throw new ClassNotFoundException("类未被找到");

} else if (username.equals("global")) {

throw new Exception("全局异常");

} else {

return SUCCESS;

}

}

...省力get/set方法

}

步骤三、

struts.xml配置文件如下:

exception="https://www.docsj.com/doc/064410448.html,ng.ClassNotFoundException">

/exception.jsp

/main.jsp

/globalException.jsp

exception="https://www.docsj.com/doc/064410448.html,ng.Exception">

分析:异常处理机制较为简单,所以在此只略作说明。当登录时输入“exception”时,在LoginAction中会抛出会一个ClassNotFoundException异常,此异常我们采取的局部异常处理的方式,如果登录时输入“globla”,则会抛出Exception异常,此异常我们采取的是全局异常的处理方式,在ex包中我们继承了全局异常所在的包。提示:中的result属性的值来源于元素中的name属性的值。从实例可以看出,我们一般把这种全局性的异常放在一个抽象包中供其实包继承。

Struts2配置文件通配符的使用说明

Struts2配置文件中使用通配符收藏 形式一:调用相同Action中的不同方法 /login.jsp /error.jsp /welcome.jsp 其中表达式{1}的值name属性值中第一个*的值。 如果用户请求的URL为loginAction.action,则调用Jcuckoo.LoginRegistAction中的login方法; 如果用户请求的URL为registerAction.action,则调用Jcuckoo.LoginRegistAction中的register方法;形式二:通过匹配,调用不同的Action的execute方法 /login.jsp /error.jsp /welcome.jsp 上面没有出现method属性,故默认调用对应的execute方法 如果用户请求的URL为LoginAction.action,则调用Jcuckoo.LoginAction中的execute方法; 如果用户请求的URL为RegisterAction.action,则调用Jcuckoo.RegisterAction中的execute方法; 形式三:动态结果 /input.jsp /{1}.jsp 当处理结果是input时,会转到/input.jsp页面

最新版本Struts2.3.12+Spring3.2.2+Hibernate4.2.0框架配置详细步骤

SSH框架搭建 Struts2.3.12+Spring3.2.2+Hibernate4.2.0 编号:SSH-S2-S3-H4 版本:V1.1 级别:公开 编写时间:2013-03-18

目录 1 导言 (1) 1.1 目的 (1) 1.2 范围 (1) 1.3 说明 (1) 2 搭建Struts2 (2) 2.1 搭建所需jar包 (2) 2.2 整合步骤 (2) 2.2.1 创建项目 (2) 2.2.2 导入jar包 (2) 2.2.3 配置web.xml (4) 2.2.4 创建web (4) 2.2.5 创建jsp页面 (5) 2.2.6 配置struts.xml (6) 2.2.7 配置Tomcat (6) 2.2.8 部署项目 (7) 2.3 测试 (8) 2.3.1 启动Tomcat (10) 2.3.2 测试Tomcat (10) 2.3.3 测试Struts (11) 3 整合Spring3 (12) 3.1 整合所需jar包 (12) 3.2 整合步骤 (12) 3.2.1 导入jar包 (12) 3.2.2 配置web.xml (12) 3.2.3 配置struts.xml (13) 3.2.4 配置spring.xml (13) 3.3 测试 (14)

3.3.1 启动Tomcat (14) 3.3.2 测试登录 (14) 4 整合Hibernate4 (15) 4.1 整合所需jar包 (15) 4.2 整合步骤 (15) 4.2.1 导入jar包 (15) 4.2.2 创建数据库ccc (15) 4.2.3 创建对象User (16) 4.2.4 生成映射文件User.hbm.xml (17) 4.2.5 创建dao (18) 4.2.6 创建service (19) 4.2.7 创建web (20) 4.2.8 配置jdbc.properties (21) 4.2.9 配置db.xml (22) 4.2.10 配置spring.xml (24) 4.2.11 配置struts.xml (24) 4.3 测试 (25) 4.3.1 启动Tomcat (25) 4.3.2 测试登录 (25)

struts2拦截器配置详解

Struts2拦截器详细配置过程 1:所有拦截器的超级接口Interceptor,拦截器去实现这个接口; Interceptor它其中有三个方法 (init(),destroy(),interceptor()):Init()方法:在服务器起动的时候加载一次,并且只加载一次; Destroy()方法:当拦截器销毁时执行的方法; Interceptor()方法:其中里边有一个参数invocation public String intercept(ActionInvocation invocation)throws xception { System.out.println("interceptor!!"); String result=invocation.invoke(); return result; }Invocation.invoke()是如果只有一个拦截器执行完这个方法后,会返回给视图,如果有多 个拦截器,它顺序的执行完所有的拦截器,才返回给视图. 2:可以在系统初始化中给拦截器指定默认的参数(也包括了定义拦截器方式)如下:在拦截器类中把hello当做属性set/get方式注入到拦截器类中;

张钊钊 也可以在使用拦截器的时候给它设置参数: 就是在一个action的reslut下面配置上如下: ),并为我们提供了一些标准的配置。我们可以在struts2-core.jar中找到这个文件。 5.其它配置文件 velocity.properties,struts-default.vm,struts-plugin.xml struts.xml文件的配置 Struts2的核心配置文件,由程序员开发编写,包含Action、result 等配置信息,主要负责管理Struts2框架的业务控制器Action。在开发中,当修改一些配置时总是不能及时地更新到服务器,我们总会重新部署或重启来更新改变的内容,在struts2中可以通过一个常量来达到此目的。即在struts.xml中的元素下增加如下内容:这样配置后,当配置文件修改保存时就会及时更新到服务器中。

02-Struts2的工作流程及配置文件

Struts2的工作流程及配置文件--- https://www.docsj.com/doc/064410448.html, --- Struts2.0的流程图

从图中看到Struts2的工作流程如下: 1.服务器接收到的请求首先经过一组过滤器链(实际中的其他过滤器可能还包括诸如Spring 的字符过滤器CharactorEncodingFilter、V elocity的过滤器等,一般FilterDispatcher位于过滤器的最后一个执行),过滤器链按照你在web.xml中的配置顺序在接收客户请求时顺序执行,在向客户发送响应时反序执行,Struts2的核心FilterDispatcher在web.xml中的配置如下: setCharactor org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 struts2 org.apache.struts2.dispatcher.FilterDispatcher setCharactor /* struts2 /* 注意:如果你使用的是W ebLogic6.1作为应用服务器,需要使用FilterDispatcherCompatW eblogic61替代FilterDispatcher。 2.请求被送到FilterDispatcher之后,FilterDispatcher会通过其私有静态的属性ActionMapper 询问这个请求是否需要调用Action处理,如果需要调用Action,FilterDispatcher会把请求委托给ActionProxy,ActionProxy调用ActionInvocation查找配置文件中该Action的所有信息,并以这个Action为目标创建代理对象(因为Struts2中的Action由于XWork的设计理念,并没有与Servlet的API被调用,所以如果直接调用Action的实例,那么显然基于HTTP 的请求都将无法传入Action。Struts2通过创建Action的代理对象,并使用拦截器将HTTP 的请求信息传入代理对象,这是典型的AOP处理方式,这也实现了控制器与Servlet的API 的分离,这是Struts1.x所欠缺的优秀的设计方式),然后执行该Action之前的所配置的所有拦截器,与过滤器相同,在接受请求时,会顺序执行你在配置文件中为该Action配置的拦截器顺序; 3.在穿越拦截器之后,就会执行Action,当Action执行完毕,ActionInvocation就要使用result

struts2复习题(含答案)

Struts2复习题 1.以下属于struts2的控制器组件是: A.Action B.ActionForm C.ActionServlet D.dispatchAction 2.以下属于struts2的体系结构的是:(多选) A.struts2控制器组件 B.struts2配置文件 C.FilterDispathcer D.Action 3.以下属于struts2配置文件中的配置元素是:(多选) A. B. C. D. 4.关于struts1和struts2对比的说法正确的是: A.struts1要求Action类继承struts1框架中的Action父类,struts2中则不一定需要继承,可以是POJO类 B.struts1中的Action不是线程安全的,而struts2中的Action是线程安全的 C.struts1和struts2中都使用ActionForm对象封装用户的请求数据 D.struts1使用OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值 5.以下关于ValueStack说法正确的是:(多选) A.每个Action对象实例拥有一个ValueStack对象 B.每个Action对象实例拥有多个ValueStack对象 C.Action中封装了需要传入下一个页面的值,这些值封装在ValueStack对象中 D.ValueStack会在请求开始时被创建,请求结束时消亡 6.关于struts2配置文件说法正确的是: A.必须在WEB-INF/classes目录下 B.名字必须为struts.xml C.配置Action时,必须配置包信息 D.使用元素配置转发 7.在struts2配置中用()元素来配置常量: A. B. C. D. 8.关于struts2包的说法正确的是: A.struts2框架使用包来管理常量 B.struts2框架定义包时必须指定name属性 C.struts2框架中配置包时,必须继承自struts-default包,否则会报错 D.struts2框架中使用包来管理Action 9.struts2中获取Servlet API的方法正确的是:(多选) A.使用ActionContext对象以解耦合的方法访问Servlet API B.使用ServletActionContext对象以解耦合的方式访问Servlet API C.使用ActionContext对象以耦合的方式访问Servlet API D.使用ServletActionContext对象以耦合的方式访问Servlet API 10.struts2动态调用的格式为: A.ActionName?methodName.action B.ActionName! methodName.action C.ActionName*methodName.action D.ActionName@mathodName.action 11.如果要实现struts2的数据校验功能 A.普通Action类可以实现

最详细eclipse配置struts2

第一章lectery的学习笔记 1.1Eclipse下搭建Struts2开发环境 博客分类: Java EclipseTomcatJSPStrutsJDK 作者:bukebushuo 来源:https://www.docsj.com/doc/064410448.html,/bukebushuo/archive/2007/03/29/1545728.aspx 最近下载了最新的struts 2.06,在使用其中附带的例子时,在配置上遇到了一些问题。 经过很多次的努力后,终于配置成功。现在把配置过程写出来供大家参考! 一软件:1 Eclipse+lomboz 3.2 下载地址: https://www.docsj.com/doc/064410448.html,/project/showfiles.php?group_id=97&release_id= 1864(网页) https://www.docsj.com/doc/064410448.html,/project/download.php?group_id=97&file_id=7714(文件),不保证一直有效。 2 Tomcat 5.5 下载地址:https://www.docsj.com/doc/064410448.html,/download-55.cgi https://www.docsj.com/doc/064410448.html,/mirrors/apache/tomcat/tomcat-5/v5.5.23/bin/apache -tomcat-5.5.23.zip 3 JDK 6 下载地址:https://www.docsj.com/doc/064410448.html,/javase/downloads/index.jsp 4 Struts2.06

下载地址:https://www.docsj.com/doc/064410448.html,/download.cgi#struts201 二安装: 1 安装JDK6,按照自己喜欢的安装即可。JDK一定要在Eclipse之前安装,因为Eclipse的启动需要JDK。 2 安装Tomcat,我下载的Tomcat是直接解压缩版的,解压缩后拷贝到一个地方就可以了,拷贝后需要注意的是需要把JDK6目录中的 tools.jar拷贝到Tomcat中具体是JDK的lib目录下的tools.jar拷贝到Tomcat下common\lib中。 3 安装Eclipse,重点来了,解压缩下载的lomboz,应该得到一个eclipse目录,把这个目录拷贝到一个比较容易找的地方。 解压缩的时候需要注意,在解压缩过程中可能遇到文件路径过长的问题,我的解决方法是把下载下来的压缩包名重命名为1.zip,也就是尽量缩短文件名长度。然后解压缩的时候直接解压缩到某个硬盘的根目录下,解压缩完后再拷贝到自己想要的地方。 4, 解压缩Struts2.06,把下载下来的Struts2.06压缩包解压缩到一个目录中在他的APPS目录下有几个.war文件。 可以使用WINRAR打开,这里我们仅仅使用winrar把struts2-blank-2.0.6.war文件解压缩到本目录中就可以了。 三、配置 1:配置工作目录 第一次打开Eclipse时会要求你指定你的工作目录,请选择好你的工作目录,今后你的Eclipse的相关项目的配置就放在这个目录里。 2:配置JREs 打开配置对话框

Struts2配置Result

配置Result 一个result代表了一个可能的输出。当一个Action类的方法执行完成时,它返回一个字符串类型的结果码,框架根据这个结果码选择对应的result,向用户输出。 Results配置由两部分组成:一部分是result映射,另一部分是result类型。 1.结果映射 在struts.xml文件中,使用result元素来配置result映射。result元素有两个可选的属性: 在Struts2中允许定义一个默认的Result类型,这是通过result-type元素来定义的。在框架的默认配置文件struts-default.xml中,在struts-default.xml包中有如下的一个配置: result-type元素的default属性指定名为dispatcher的结果类型, dispatcher结果类型使用ServletAPI中的ResultDispatcher将请求导向到目 标资源(通常是JSP页面)。如果在使用result元素配置result映射时,没有使用 type类型,那么框架就将使用默认的dispatcher类型。 由于Struts2中的包是可以继承的,所以我们定义的package只要继承了 struts-default包,因此也继承了默认的结果类型,所以可以省略result元素的 type属性。 如果没有指定result元素的name属性,那么框架将把它命名为”success”。 2.结果类型 在框架调用Action对请求进行处理之后,就要向用户呈现一个结果视图,Struts2支持多种类型的视图,这些视图是由不同的结果类型来管理的。 一个结果类型就是实现了com.opensymphony.xwork2.Result接口的类,在Struts2中定义了多种结果类型,如下表所示:

struts2教程(完全版)

Yaio 4 一、准备工作及实例 4 1.解压struts- 2.1.6-all.zip 4 2.六个基本包 4 3.初识struts2配置文件 4 (1).web.xml文件 4 (2).struts.xml文件 4 (3).struts.properties(参default.properties) 4 (4)struts-default.xml 5 (5)其它配置文件 5 4.让MyEclipse提示xml信息 5 5.如何使用alt+/提示 5 6.实例 5 7.开启struts2自带的开发模式常量 7 8.vo传参模式 8 9.ModerDriven传参模式(不建议采用) 8 10.为什么要使用struts2代替struts1.x 9

二、struts.xml配置及例程 9 1.配置文件的优先级 9 2.配置形式 9 3.package配置相关 10 4.分工合作include:指定多个配置文件 12 5.tomcat认证访问 12 6.初识拦截器 13 7.Action中的method属性 15 8.使用ForwardAction实现页面屏蔽。 17 8.使用default-Action配置统一访问 17 小结Action 18 9.使用通配符 18 10.使用0配置:ZERO Annotation 19 11.Result配置详解 19 12.异常处理 24 三、在Action获取Scope对象 25 方式一、与Servlet解耦合的非IOC方式 25

方式二、与Servlet解耦合的IOC方式 27 方式三、与Servlet耦合的非IOC方式 27 方式四、与Servlet耦合的IOC方式 28 四、OGNL与ValueStack(VS) 29 1.值栈入门 29 2.OGNL入门 31 3.普通方法访问 31 4.静态方法访问 31 5.默认类Math的访问 32 6.调用普通类的构造方法 32 7.集合对象初步 32 8.集合对象进阶 33 9.N语法top语法 34 10.获取Stack Context中的信息 35 11.总结$ # %的区别 35 12.总结OGNL[重点] 35 五、拦截器 36

Struts2知识点总结

Struts2基础知识 Struts2概述 1.Struts2框架应用javaee三层结构中的web层框架。 2.Struts2框架在struts1和webwork基础之上发展的全新框架。 3.Struts2所解决的问题: 在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。 图解: 4.现在比较稳定的Struts2版本 struts-2.3.24-all.zip 5.web层常见框架 1.struts 2.springMVC Struts2框架入门 1.导入jar包 1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring 包,是不能使用的,导入会导致程序不能运行。 2.到app目录里面复制案例的jar包是最好的方法。 2.创建action 3.配置action类的访问路径

1.创建struts2核心配置文件,该核心配置文件位置和名称是固定的, 位置必须在src下面,名称为struts.xml 。 2.引入dtd约束,可以在案例文件中找到,复制在struts.xml文件中即 可。 3.action的配置 *注意访问路径: http://域名/端口号/项目名/action名.action 注意:.action可以省略,但建议不要省略,为了兼容一些老版本的浏览器。 4.配置Struts2的过滤器,可以在案例中的web.xml文件中找到,复制粘贴 即可。 Struts2执行过程 图解:

Struts2配置

1.是一种常量标签 2.修改Struts2的默认常量值 1.常用方式 在struts.xml中进行配置。 2.其它两种方式 1.在src下面创建struts.properties文件并修改。 2.在web.xml文件中进行修改。 3.Struts2最常用的常量 struts.il8n.encoding=UTF-8,解决表单在通过post方式提交中文时,中文乱码的问题。

Struts2中 struts.xml的Action配置详解

Struts2中struts.xml的Action配置详解 使用package可以将逻辑上相关的一组Action,Result,Interceptor等组件分为一组,Package 有些像对象,可以继承其他的Package,也可以被其他package继承,甚至可以定义抽象的Package。 由于struts.xml文件是自上而下解析的,所以被继承的package要放在继承package的前边。Namespace将action分成逻辑上的不同模块,每一个模块有自己独立的前缀。使用name space可以有效的避免action重名的冲突,例如每一个package都可以有自己独立的Men u和Help action,但是事项方式各有不同。Struts2标签带有namespace选项,可以根据namespace的不同向服务器提交不同的package的action的请求。 “/”表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个pa ckage中查找。 “”表示默认namespace,当所有的namespace中都找不到的时候就在这个namespace中寻找。 例如,有如下配置: CODE: greeting.jsp bar1.jsp

STRUTS2零配置

简述STRUTS2 Convention零配置 从struts2.1开始,struts2不再推荐使用Codebehind作为零配置插件,而是改为使用Convention插件来支持零配置,和Codebehind相比,Convention插件更彻底,该插件完全抛弃配置信息,不仅不需要是使用struts.xml文件进行配置,甚至不需要使用Annotation进行配置,而是由struts2根据约定自动配置。 如何使用Convention 1. 将struts-Convention-plugin- 2.1.6.jar文件复制到WEB-INF/lib路径下 2. 对于Convention插件而言,它会自动搜索位于action,actions,struts,struts2包下的所 有java类,Convention插件会把如下两种java类当成Action处理: 1)所有实现了com.opensymphony.xwork2.Action的java类 2)所有类名以Action结尾的java类 3. Convention插件还允许设置如下三个常量: 1) struts.Convention.exclude.packges:指定不扫描哪些包下的java类,位于这些包结构下的java类将不会自动映射成Action; 2) struts.convention.package.locators:Convention插件使用该常量指定的包作为搜寻Action 的根包。对于actions.fore.LoginAction类,按约定原本应映射到/fore/login;如果将该常量 设为fore,则该Action将会映射到/login 3) struts.convention.action.packages:Convention插件以该常量指定包作为根包来搜索Action 类。Convention插件除了扫描action,actions,struts,struts2四个包的类以外,还会扫描该常量指定的一个或多个包,Convention会视图从中发现Action类。 注意:struts.convention.package.locators和struts.convention.action.packages两个常量的作用比较微妙,开发者在利用这两个常量时务必小心。 如:下面Action所在包被映射的命名空间如下: com.fun.actions.LoginAction 映射到 / com.fun.actions.myoffice.CarInfoAction 映射到 /myoffice com.fun.struts.myoffice.EntINfoAction 映射到 /myofiice 4. 映射Action的name时,遵循如下两步规则: 1)如果该Action类名包含Action后缀,将该Action类名的Action后缀去掉。否则不做任何处理。 2)将Action类名的驼峰写法(每个单词首字母大写、其他字母小写的写法)转成中画线写法(所有字母小写,单词与单词之间以中画线隔开) 如:LoginAction映射的Acion的name属性为login,GetBooks映射的Action的name的属性为get-books,AddEmployeeAction映射的Action的name属性为add-employee 5. 默认情况下。Convention总会到WEB应用的WEB-INF/content路径下定位物理资源,定位资源 的约定是:actionRUL+resultCODE+suffix。当某个逻辑视图找不到对应的视图资源时,Convention 会自动视图使用ActionURL+suffix作为物理视图资源。 如:actions.fore.LoginAction 返回success字符串时,Convention优先考虑使用 WEB-INF/content/fore目录下的login-success.jsp作为视图资源。如果找不到该文件,login.jsp也可作为对应的视图资源。如果返回input字符串,Convention会将WEB-INF/content/fore里面查找 login-input.jsp

Struts2配置详解2 配置Action

配置Action Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法。 该方法如下: public String execute() throws Exception Struts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无参的public方法即可:public String xxx() 在实际开发中,action类很少直接实现Action接口,通常都是从 com.opensymphony.xwork2.ActionSupport类继承,ActionSupport实现了Action接口和其他一些可选的接口,提供了输入验证,错误信息存取,以及国际化的支持,选择从ActionSupport继承,可以简化action的定义。 开发好action之后,好需要对action进行配置,以告诉Struts2框架,针对某个URL的请求应该交由哪个action进行处理。 1.Action映射: action映射是Struts2框架中的基本”工作单元”,action映射就是将一个请求 URL(即action的名字)映射到一个action类,当一个请求匹配某个action的名字 时,框架就使用这个映射来确定如何处理请求。 action元素的完整属性表 例如: /user.jsp 2. 使用method属性 在配置action时,我们可以通过action元素的method属性来指定action调用的方法,所指定的方法,必须遵循与execute方法相同的格式。 在Struts2.xml文件中,我们可以为同一个action类配置不同的别名,并使用 method属性。 在Struts.xml文件中为同一个Action类配置不同的别名 /Methods/list.jsp

struts2中struts.xml配置文件的详解

/error.jsp

详解struts1的配置文件

1.:用来配置数据源,连接数据库。 :具体是数据库连接。 Type:type="org.apache.dbcp.BasicDataSource" Struts中连接数据库的类。 :此标签中配置具体的链接内容。如: 数据库驱动 数据库地址。 数据库登录名。 数据库密码。 自动提交。 最大连接数。 最大等待数。 默认自动提交。 默认为只读。 这里可以不加,不过加了就保证能至少能够返回一条记录。 2.< form-beans> :用来配置多个ActionForm,包含一个或者多个子元素。每个 子元素里都有很多属性。 Classname:制定配置的类。 Name:制定该ActionForm的唯一标识。 Type:制定该ActionForm的路径,带包名。 :指定动态的Form的元。 3.:用于配置异常处理,元素可以包含一个或者多个元 素,用来设置JA V A 异常和异常处理类ExceptionHandler之间 的映射。 className:指定和元素对应的配置类,默认的不用动. Handler:指定异常处理类,默认是ExceptionHandler.key指定在本地资源文件中异 常的消息。 Key,path:指定当前异常发生的时候转发的路径。 Scope:指定ActionMessages实例存放的范围。 Type:指定需要处理异常类的名字,必须的。 Bundle:指定Resource Bundle。 4. < global-forwards>:用来声明全局转发,元素可以有一个或者多个元素组成, 用于把一个逻辑名映射到特定的URL,通过这种方法Action类或者

struts2国际化配置

前提条件:strut2的必须架包已经引入,struts2的配置文件全部配置完成 1.首先创建一个struts.properties在src目录下,服务器启动时候会自动加载该文件,在这个文件中写入struts.custom.i18n.resources=globalMessages,服务器会自动选择前缀为globalMessages资源文件。(或者你在你的struts.xml文件中添加服务器加载struts.xml的时候会加载国际化资源文件); 2.在src目录下创建资源文件英文globalMessages_en.properties 中文globalMessages_zh.properties。globalMessages_en.properties 文件内容为home=home globalMessages_zh.properties文件内容为home=¥u9996¥u9875 3.在页面端获得资源文件信息。<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> My JSP 'test.jsp' starting page struts2的国际化分三种情况 1.前台页面的国际化, 2.Action类中的国际化, 3.配置文件的国际化。 首先指定全局的国际化资源文件: 在配置文件struts.xml中引入 (注意位置)

相关文档
相关文档 最新文档