Struts2教程3:struts.xml常用配置解析

 我来答
世纪网络17
2022-10-11 · TA获得超过5924个赞
知道小有建树答主
回答量:2426
采纳率:100%
帮助的人:139万
展开全部

   使用<include>标签重用配置文件

  在Struts 中提供了一个默认的struts xml文件 但如果package action interceptors等配置比较多时 都放到一个struts xml文件不太容易维护 因此 就需要将struts xml文件分成多个配置文件 然后在struts xml文件中使用<include>标签引用这些配置文件 这样做的优点如下

  结构更清晰 更容易维护配置信息

  配置文件可以复用 如果在多个Web程序中都使用类似或相同的配置文件 那么可以使用<include>标签来引用这些配置文件 这样可以减少工作量

  假设有一个配置文件 文件名为newstruts xml 代码如下

   <?xmlversion= encoding= UTF ?><!DOCTYPEstrutsPUBLIC //ApacheSofareFoundation//DTDStrutsConfiguration //EN dtd ><struts><packagename= demo extends= struts default ><actionname= submit  class= action MoreSubmitAction ><resultname= save >/result jsp</result><resultname= print >/result jsp</result></action></package></struts>

  则struts xml引用newstruts xml文件的代码如下

  

  <?xmlversion= encoding= UTF ?><!DOCTYPEstrutsPUBLIC //ApacheSofareFoundation//DTDStrutsConfiguration //EN dtd ><struts><includefile= newstruts xml /><packagename= test extends= struts default >……</package></struts>

  大家要注意一下 用<include>引用的xml文件也必须是完成的struts 的配置 实际上<include>在引用时是单独解析的xml文件 而不是将被引用的文件插入到struts xml文件中

   action的别名

  在默认情况下 Struts 会调用动作类的execute方法 但有些时候 我们需要在一个动作类中处理不同的动作 也就是用户请求不同的动作时 执行动作类中的不同的方法 为了达到这个目的 可以在<action>标签中通过method方法指定要指行的动作类的方法名 并且需要为不同的动作起不同的名子(也称为别名) 如下面代码所示

  

  <?xmlversion= encoding= UTF ?><!DOCTYPEstrutsPUBLIC  //ApacheSofareFoundation//DTDStrutsConfiguration //EN   dtd ><struts><packagename= demo extends= struts default ><actionname= test  class= action MyAction >……</action><actionname= my  class= action MyAction method= my >……</action></package></struts>

  上面代码的两个动作的class属性都指向同一个类 name为这个类起了两个动作别名 test和my 在动作my中 使用了method属性指定要要运行的方法名为my

  在MyAction类中必须要有my方法 代码如下

  

  packageaction;import opensymphony xwork ActionSupport;publicclassMyActionextendsActionSupport{……publicStringexecute()throwsException{//处理test动作的代码}publicStringmy()throwsException{ //处理my动作的代码}……}

  除了在struts xml中配置别名 还可以通过请求参数来描述指定动作(并不需要在struts xml中配置) 请求参数的格式如下

  //localhost /contextPath/actionName!method action

  关于通过请求指定动作的详细内容 请参阅笔者写的《Struts 教程 处理一个form多个submit》

   为action指定参数

  在struts 中还可以为action指定一个或多个参数 大家还记着struts x是如何设置的action参数不? 在struts x中可以使用<action>标签的parameter属性为其指定一个action参数 如果要指定多个 就只能通过逗号( )或其他的分隔符将不同的参数隔开 而在struts 中可以通过<param>标签指定任意多个参数 代码如下

  

  <actionname= submit  class= action MyAction ><paramname= param >value </param><paramname= param >value </param><resultname= save >/result jsp</result> ……</action>

  当然 在action中读这些参数也非常简单 只需要象获取请求参数一样在action类中定义相应的setter方法即可(一般不用定义getter方法) 如下面的代码将读取param 和param 参数的值

   packageaction;import opensymphony xwork ActionSupport;publicclassMyActionextendsActionSupport{privateStringparam ;privateStringparam ;publicStringexecute()throwsException{System out println(param +param );}publicvoidsetParam (Stringparam ){this param =param ;}publicvoidsetParam (Stringparam ){this param =param ;}……}

  当struts 在调用execute之前 param 和param 的值就已经是相应参数的值了 因此 在execute方法中可以直接使用param 和param

   选择result类型

  在默认时 标签的type属性值是 dispatcher (实际上就是转发 forward) 开发人员可以根据自己的需要指定不同的类型 如redirect stream等 如下面代码所示

  

  <result name= save type= redirect >  /result jsp</result>

  这此result type可以在struts core jar包或struts 源代码中的struts default xml文件中找到 在这个文件中找到<result types>标签 所有的result type都在里面定义了 代码如下

  

  <result types> <result typename= chain class= opensymphony xwork ActionChainResult /> <result typename= dispatcher class= apache struts dispatcher ServletDispatcherResult default= true /> <result typename= freemarker class= apache struts views freemarker FreemarkerResult /> <result typename= header class= apache struts dispatcher HttpHeaderResult /> <result typename= redirect class= apache struts dispatcher ServletRedirectResult /> <result typename= redirectAction class= apache struts dispatcher ServletActionRedirectResult /> <result typename= stream class= apache struts dispatcher StreamResult /> <result typename= velocity class= apache struts dispatcher VelocityResult /> <result typename= xslt class= apache struts views xslt XSLTResult /> <result typename= plainText class= apache struts dispatcher PlainTextResult /> <! DeprecatednameformscheduledforremovalinStruts ThecamelCaseversionsarepreferred Seeww > <result typename= redirect action class= apache struts dispatcher ServletActionRedirectResult /> <result typename= plaintext class= apache struts dispatcher PlainTextResult /></result types>

   全局result

  有很多时候一个<result>初很多<action>使用 这时可以使用<global results>标签来定义全局的<result> 代码如下

  

  <struts><packagename= demo extends= struts default ><global results><resultname= print >/result jsp</result></global results><actionname= submit class= action MoreSubmitAction > ……</action><actionname= my class= action MoreSubmitAction method= my >……</action></package></struts>

lishixinzhi/Article/program/Java/ky/201311/27860

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式