
n -->
<result type='redirect-action'>Menu</result>
</action><action>
<result>/example/{1}.jsp</result>
</action>
</package>
以上表示当execute方法返回input的字符串时,跳转到/example/Login.jsp。定义rusult元素时,可以指定两个属性:type和name。其中name指定了execute方法返回的字符串,而type指定转向的资源类型,此处转向的资源可以是JSP,也可以是FreeMarker等,甚至是另一个Action。加载子配置文件
Struts2框架的核心配置文件就是struts.xml配置文件,该文件主要负责管理Struts2框架的业务控制器Action。
在默认情况下,Struts2框架将自动加载放在WEB-INF/classes路径下的struts.xml文件。为了避免随着应用规模的增加,而导致的struts.xml文件过于庞大,臃肿,从而是该文件的可读性下降。我们可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含其他配置文件。
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE struts PUBLIC
'-//Apache Software Foundation//DTD Struts Configuration2.0//EN'
'http://struts.apache.org/dtds/struts-2.0.dtd'>
<!--根元素-->
<struts>
<constantvalue='false' />
<constant value='false' />
<!--通过include元素导入其他元素-->
<include file='example.xml'/>
</struts>
通过这种方式,Struts2提供了一种模块化的方式来管理struts.xml配置文件。
使用package可以将逻辑上相关的一组Action,Result,Interceptor等组件分为一组,Package有些像对象,可以继承其他的Package,也可以被其他package继承,甚至可以定义抽象的Package。
Package的可以使用的属性: 属性
是否必须
说明
name 是 Package的表示,为了让其他的package引用
extends 否 从哪个package继承行为
namespace 否 参考Namespace配置说明
abstract 否
定义这个package为抽象的,这个package中不需要定义action
xlive.dll是微软的一个游戏平台动态链接库,一般放在系统目录c:/windows/system32下,同时在游戏的根目录下也会有一个xlive.dll文件. xlive.dll放在哪 由于一般我们电脑系统中都有xlive.dll文件,只有可能被病毒破坏或者不小心错误的删除了该文件我们才需要去重新下载xlive.dll文件,并放在其原来对应的位置,那么xlive.dll文件放在哪呢。1)include里边,要把dx9的目录放在下边,因为dx的头文件里本身引用了很多系统自带的头文件里定义的东西,如果放在前边的话,会出winnt.h(222) error c2146这种错误--其实说白了,这种错误的产生原因就是:include宏只是简单的文本替换,“先替换的文本”引用了“后替换文本”中定义的关键字,编译器解析token的时候就各种报错。同时要按照配置将testlog.java放在指定包下,否则myeclipse会在(等同于)src文件夹下自动分配一个default package放java文件,这样java文件没有按照指定的log4j.properties配置书写,就会导致没法显示log4j信息但是能通过测试的情况。
Namespace将action分成逻辑上的不同模块,每一个模块有自己独立的前缀。
使用namespace可以有效的避免action重名的冲突,例如每一个package都可以有自己独立的Menu和Helpaction,

头字段描述authorization客户端的认证信息.cseq请求序列号.session会话 id (返回自服务端的 setup 应答).content-length内容的长度.content-type内容的媒体类型.user-agent关于创建这个请求的客户端的信息.require查询是否支持指定的选项,不支持的选项会在 unsupported 头中列出.3.2 response 语法语法:rtsp/1.0
“/”表示根namespace,所有直接在应用程序上下文环境下的请求(Context)都在这个package中查找。
“”表示默认namespace,当所有的namespace中都找不到的时候就在这个namespace中寻找。
例如,有如下配置:
CODE:
<package>
<actionsuccess' type='dispatcher'>
greeting.jsp
</result>
</action>
<action>
</action>
</package>
<package namespace='/'>
<action>
<resulttype='dispatcher'>moo.jsp</result>
</action>
</package>
<package namespace='/barspace'>
<action>
</action>
</package>1 如果请求为/barspace/bar.action
查找namespace:/barspace,如果找到bar则执行对应的actionstruts.xml配置详解,否则将会查找默认的namespace,在上面的例子中,在barspace中存在名字为bar的action,所以这个action将会被执行,如果返回结果为successstruts.xml配置详解,则画面将定为到bar2.jsp
2 如果请求为/moo.action
(2). 而使用iterator()返回结果时,在每次调用iterator.next()返回对象并使用对象时,hibernate才调用查询将对应的对象初始化,对于大数据量时,每调用一次查询都会花费较多的时间。调用该方法成功时返回同样为读取文件的实际字节数,错误则返回-1,错误代码存放入errno中可以查询帮助定位错误原因。aop嘛,少不了拦截器,先创建一个实现了methodinterceptor接口的,用来拦截service/dao的方法调用,拦截到方法后,搜索该方法的结果在cache中是否存在,如果存在,返回cache中的缓存结果,如果不存在,返回查询的结果,并将结果缓存到cache中。
Action配置
首先客户发送一个请求,servlet是调用service()方法对请求进行响应,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doget,dopost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。struts2框架获取*.action请求后,将根据*.action请求的前面部分决定调用那个业务逻辑组件,例如:对于login.action请求,struts2调用名为login的action来处理该请求。jdk1.6 提供了一个简单的http server api,据此我们可以构建自己的嵌入式http server,它支持http和https协议,提供了http1.1的部分实现,没有被实现的那部分可以通过扩展已有的http server api来实现,程序员自己实现httphandler接口,httpserver会调用httphandler实现类的回调方法来处理客户端请求,在这里,我们把一个http请求和它的响应称为一个交换,包装成httpexchange类,httpserver负责将httpexchange传给httphandler实现类的回调方法.。
一个Action配置示例:
CODE:
<action>
<result type='redirect-action'>Menu</result>
<result>/tutorial/Logon.jsp</result>

</action>每一个Action可以配置多个result,多个ExceptionHandler,多个Intercepter,但是只能有一个name,这个name和package的namespace来唯一区别一个Action。
每当struts2框架接受到一个请求的时候,它会去掉Host,Application和后缀等信息,得到Action的名字,例如如下的请求将得到Welcome这个Action。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-113633-1.html
1