struts配置文件详解

来源:互联网 发布:淘宝网商业模式分析 编辑:程序博客网 时间:2024/06/05 04:46

解决在断网环境下,配置文件无提示的问题我们可以看到Struts.xml在断网的情况下,前面有一个叹号,这时,我们按alt+/ 没有提示,这是因为” http://struts.apache.org/dtds/struts-2.0.dtd”是一个网络地址,如果上网的话,IDE会自动帮我们下载此文件,如果断网就没有办法了,但是我们还是有解决方法的.首先在源码包里找到struts-2.0.dtd这个文件在MyEclipse中菜单栏中选择:windowPreferencesMyEclipseFiles and EditorsXmlxml Catalog在右边的下拉框中选择User Specified Entries点击Add按钮左边选中Catalog Entry右边的location中点击File System在弹出的对话框中将搜索到的文件全路径复制上去,并选中struts-2.0.dtd在key type下拉框中选择URIkey文本框中填写: http://struts.apache.org/dtds/struts-2.0.dtd ,点击OK即可. 这时我们可以看到Struts.xml文件中还有叹号,我们可以在Struts标签与package标签中打入一个回车后保存即可. 首先,我们先配置一个HelloWorld程序环境的搭建和前面讲的一模一样,导6个jar包,复制struts.xml文件到src目录下,改写web.xml文件,将struts整合到web工程中,这里就不再演示以下是代码:Chapter1Actionpackage chapter1.action; public class Chapter1Action {private String message; public String getMessage() {return message;} public String execute() {message = "我的第一个Struts2程序";return "success";}}  Struts.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd">  <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false"/> <constant name="struts.devMode" value="false"/> <constant name="struts.i18n.encoding" value="UTF-8"/> <constant name="struts.serve.static.browserCache" value="false"/>  <include file="chapter1.xml"/> </struts>  chapter1.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd">  <struts> <package name="chapter1" namespace="/chapter1" extends="struts-default"> <action name="HelloWorld" class="chapter1.action.Chapter1Action" method="execute"> <result name="success">/WEB-INF/JspPage/chapter1/HelloWorld.jsp</result> </action> </package> </struts>  HelloWorld.jsp <%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>HelloWorld</title> </head>  <body>${message} </body> </html> 

 

 

 

 

 问题一:大家可以看到这里用到了EL表达式,我们知道EL表达式只能取page,request,session,application四个范围之一里面的数据,但是我这里并没有将任何数据放入到四个范围中,为什么这里能够取出数据来呢?
 问题二: Chapter1Action是一个非常普通的类,它不是Servlet,为什么能够处理用户的请求呢?
 Struts2用于处理用户请求的Action,没有与Servlet API耦合,显示无法处理用户请求,而Struts2提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并调用Action的execute方法来处理用户的请求. 
 二、Struts.xml配置中包与action的介绍: 
<package name="chapter1" namespace="/chapter1" extends="struts-default"> <action name="HelloWorld" class="chapter1.action.Chapter1Action" method="execute"> <result name="success">/WEB-INF/JspPage/chapter1/HelloWorld.jsp</result> </action> </package> 1. Struts2框架中使用包来管理action,避免了Servlet在web.xml中难以管理的与维护的局面.包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的action,在实际应用中,我们应该把一组业务功能相关的action 放在同一个包下.2. 配置包时必须指定name属性,该name属性值可以任意取名,但必须唯一,如果其他包要继承该包,必须通过该属性进行引用,包的namespace属性用于定义该包的命名空间,命名空间作用为访问该包下的action路径的一部分,见示例.namespace属性可以不配置,如果不指定该属性,默认的命名空间为””3. 通常每个包都应该继承struts-default包,因为struts2很多核心功能都是拦截来实现的,如,从请求中把请求参数封闭到action,文件上传和数据验证等都是通过拦截器实现的,struts-default定义了这些拦截器和Result类型,可以这么说,当包继承了struts-default才能使用struts2提供的核心功能,struts-default包是在struts2-core-2.xx.jar文件中的struts-defalut.xml中定义,struts-default.xml也是struts2默认配置文件,struts2每次都会自动加载struts-default.xml文件.4.package还有一个abstract=”true”属性,指定此包为抽象包,和抽象类的概念差不多,说明此包只能被其他包继承,则它里面不允许包含action元素.
  <action name="HelloWorld" class="chapter1.action.Chapter1Action" method="execute"> <result name="success">/WEB-INF/JspPage/chapter1/HelloWorld.jsp</result> </action> 1.Action 元素method属性,默认值为method=”execute”,也就是当action接收到请求后,交给哪个方法去处理,默认的是交给execute方法去处理,当然,也可以交给其他方法,后面会讲解到.  <result name="success">/WEB-INF/JspPage/chapter1/HelloWorld.jsp</result> 2.result元素主要定义视图的跳转和返回的行为及类型,后面会详细介绍. 
 三、struts.xml文件的分离 
 从上一个项目实践中可以看到,我们的web.xml文件非常之大,到后来是越来越难的查找与维护,看得头都是大的,Struts2配置文件可以分离,很好的解决了此问题.通过主次配置文件的分离,可以加强团队间的合作,并且互不打扰彼此的配置文件,出了问题也知道责任在哪里.在实例开发中也是这样做的,通过一个主文件中,打开全局开关,引入其他子配置文件,如: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd">  <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false"/> <constant name="struts.devMode" value="false"/> <constant name="struts.i18n.encoding" value="UTF-8"/> <constant name="struts.serve.static.browserCache " value="false"/>  <include file="chapter1.xml"/> </struts>  
 常用开关的介绍 <constant name="struts.i18n.encoding" value="UTF-8"/>指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法  <constant name="struts.action.extension" value="do"/>该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts 2处理。 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。   <constant name="struts.serve.static.browserCache " value="false"/>设置浏览器是否缓存静态内容,默认值为true,开发阶段最好false  <constant name="struts.configuration.xml.reload" value="true"/>当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false,开发阶段最好true  <constant name="struts.devMode" value="true"/>开发模式下设为true,这样可以打印出更详细的错误信息  <constant name="struts.enable.DynamicMethodInvocation" value="false"/>动态方法调用,可以解决多个请求对应一个Servlet的问题,后面详细讲解,默认为true,关闭则设为false. 
  Action配置中的各项默认值 
请看下面的代码 <action name="Login"> <result>/WEB-INF/JspPage/chapter1/Login.jsp</result> </action> 我们发现,当我们请求的路径为http://localhost:8080/Struts2/chapter1/Login时,同样可以实现页面的跳转,这是怎么回事呢? 如果没有为action指定class,默认是ActionSupport类 <action name="Login"> 相当于  <action name="Login" class="com.opensymphony.xwork2.ActionSupport"> 如果没有为action指定method,默认执行action中的execute()方法 <action name="Login">相当于 <action name="Login" class="com.opensymphony.xwork2.ActionSupport" method="execute"> 如果没有指定result的name属性,默认值为success. <result>相当于 <result name="success"> 提出一个问题ActionSupport这个类到底是个什么类呢?首先要肯定的一点是他是一个具有execute方法的类,并且execute方法返回”success”字符串,因为只有这样,前面的运行结果才能说的通. ActionSupport还实现了很多其他的结果,提供了许多定制的功能. ActionSupport类的作用 struts2不要求我们自己设计的action类继承任何的struts基类或struts接口,但是我们为了方便实现我们自己的action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throws Exception方法。因为此类中实现了很多的实用借口,提供了很多默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发。  Struts2中通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并且为属性提供对应的getter和setter方法。课堂笔记默认值class="" ActionSupportmethod="" executename="" “success” Action接口里提供了一些常量及execute方法,通常我们自己写的Action可以实现这个接口, ActionSupport已经实现了这个接口,并且还实现了验证,国际化等功能的接口,所以我们自己写的Action类通常会继承ActionSupport这个类来达到启用验证框架,国际化,自动转换等功能的目的.
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 狗狗间歇性抽搐怎么办 鼻子干燥有点痛怎么办 泰迪狗鼻子烂了怎么办 小狗鼻子干脱皮怎么办 鼻子短怎么办除了手术 狗得了狗瘟怎么办 泰迪感染细小怎么办 痔疮术后肛门痒怎么办 肛门脓肿流血了怎么办 检查肛门拉屎了怎么办 怀孕期间肛门湿疹怎么办 头晕检查说没事怎么办 慢性咽喉炎引起的咳嗽怎么办 咽炎引起的咳嗽怎么办? 补牙换药后疼痛怎么办 深度伤口换药疼痛怎么办 孕妇肛门有蛲虫怎么办 孕妇上火拉血怎么办 孕期内检出血怎么办 顺产肛门脱肛了怎么办 怀孕痔疮老脱出怎么办 顺产后浑身酸疼怎么办 爬山后肌肉酸疼怎么办 手上打针胳膊疼怎么办 狗 打针后疼痛怎么办 流产后浑身酸疼怎么办 屋子里潮湿有味怎么办 墙潮湿发霉有味怎么办 当兵体检没有过怎么办 航空面试有纹身怎么办 儿童眼睛外斜视怎么办 大疆imu异常怎么办 新生儿血液回流不好怎么办 灌肠温度高了怎么办 炎症引起的咳嗽怎么办 90岁老人肠梗阻怎么办 84岁老人肠梗阻怎么办 婴儿开塞露后大便肚子疼怎么办 孕早期用开塞露肚子疼怎么办 冰点脱毛后刺痛怎么办 医院建不上档怎么办