# $Id: Action.java 502296 2007-02-01 17:33:39Z niallp $
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
### START SNIPPET: complete_file
### Struts default properties
###(can be overridden by a struts.properties file in the root of the classpath)
### Struts的默认属性
###(可以通过在classpath根目录下新建一个struts.properties文件来重载此文件中的属性)
###
### Specifies the Configuration used to configure Struts
### one could extend org.apache.struts2.config.Configuration
### to build one's customize way of getting the configurations parameters into Struts
### 指定用于struts的配置类
### 一个继承于 org.apache.struts2.config.Configuration 的类
### 建立一个自定义的方式获得Struts的配置参数
# struts.configuration=org.apache.struts2.config.DefaultConfiguration
### This can be used to set your default locale and encoding scheme
### 这可以用来设置您的默认区域设置和编码方案
# struts.locale=en_US
struts.i18n.encoding=UTF-8
### if specified, the default object factory can be overridden here
### Note: short-hand notation is supported in some cases, such as "spring"
### Alternatively, you can provide a com.opensymphony.xwork2.ObjectFactory subclass name here
### 如果指定的话,在这里默认对象的工厂类可以被重载
### Note: 在某些情况下可以支持缩写, 例如 "spring"
### 另外,您也可以在这里提供一个com.opensymphony.xwork2.objectfactory的子类名
# struts.objectFactory = spring
### specifies the autoWiring logic when using the SpringObjectFactory.
### valid values are: name, type, auto, and constructor (name is the default)
### 指定自动装配的方式,当使用springobjectfactory 。
### 有效值有: name, type, auto, and constructor (name 是默认值)
struts.objectFactory.spring.autoWire = name
### indicates to the struts-spring integration if Class instances should be cached
### this should, until a future Spring release makes it possible, be left as true
### unless you know exactly what you are doing!
### valid values are: true, false (true is the default)
### spring是否使用自身的cache
struts.objectFactory.spring.useClassCache = true
### if specified, the default object type determiner can be overridden here
### Note: short-hand notation is supported in some cases, such as "tiger" or "notiger"
### Alternatively, you can provide a com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation name here
### Note: By default, com.opensymphony.xwork2.util.DefaultObjectTypeDeterminer is used which handles type detection
### using generics. com.opensymphony.xwork2.util.GenericsObjectTypeDeterminer was deprecated since XWork 2, it's
### functions are integrated in DefaultObjectTypeDeterminer now.
### To disable tiger support use the "notiger" property value here.
#struts.objectTypeDeterminer = tiger
#struts.objectTypeDeterminer = notiger
### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data
# 专为multipart请求信息使用的org.apache.struts2.dispatcher.multipart.MultiPartRequest解析器接口(文件上传用)
# struts.multipart.parser=cos
# struts.multipart.parser=pell
struts.multipart.parser=jakarta
# uses javax.servlet.context.tempdir by default
#设置存储上传文件的目录夹
struts.multipart.saveDir=
#multipart请求信息的最大尺寸(文件上传用)
struts.multipart.maxSize=2097152
### Load custom property files (does not override struts.properties!)
### 加载附加的配置文件的位置(不重载struts.properties文件中的属性)
# struts.custom.properties=application,org/apache/struts2/extension/custom
### How request URLs are mapped to and from actions
### 如何将请求的URL映射到action类和从action类映射到URL
#struts.mapper.class=org.apache.struts2.dispatcher.mapper.DefaultActionMapper
### Used by the DefaultActionMapper
### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
### 用URL扩展名来确定是否这个请求是被用作Struts action,其实也就是设置 action的后缀如login.do的'do'
### 你可以提供一个逗号分隔的列表,例如:struts.action.extension=action,jnlp,do
struts.action.extension=action
### Used by FilterDispatcher
### If true then Struts serves static content from inside its jar.
### If false then the static content must be available at <context_path>/struts
struts.serve.static=true
### Used by FilterDispatcher
### This is good for development where one wants changes to the static content be
### fetch on each request.
### NOTE: This will only have effect if struts.serve.static=true
### If true -> Struts will write out header for static contents such that they will
### be cached by web browsers (using Date, Cache-Content, Pragma, Expires)
### headers).
### If false -> Struts will write out header for static contents such that they are
### NOT to be cached by web browser (using Cache-Content, Pragma, Expires
### headers)
struts.serve.static.browserCache=true
### Set this to false if you wish to disable implicit dynamic method invocation
### via the URL request. This includes URLs like foo!bar.action, as well as params
### like method:bar (but not action:foo).
### An alternative to implicit dynamic method invocation is to use wildcard
### mappings, such as <action name="*/*" method="{2}" class="actions.{1}">
### 是否允许动态方法调用
struts.enable.DynamicMethodInvocation = true
### Set this to true if you wish to allow slashes in your action names. If false,
### Actions names cannot have slashes, and will be accessible via any directory
### prefix. This is the traditional behavior expected of WebWork applications.
### Setting to true is useful when you want to use wildcards and store values
### in the URL, to be extracted by wildcard patterns, such as
### <action name="*/*" method="{2}" class="actions.{1}"> to match "/foo/edit" or
### "/foo/save".
### 这个属性设为true以后,action的名字中就可以使用斜杠了。
### Struts2的默认设置是不允许action的名字中出现斜杠的,需要用package来分割命名空间。
struts.enable.SlashesInActionNames = false
### use alternative syntax that requires %{} in most places
### to evaluate expressions for String attributes for tags
### 是否可以用替代的语法替代tags
struts.tag.altSyntax=true
### when set to true, Struts will act much more friendly for developers. This
### includes:
### - struts.i18n.reload = true
### - struts.configuration.xml.reload = true
### - raising various debug or ignorable problems to errors
### For example: normally a request to foo.action?someUnknownField=true should
### be ignored (given that any value can come from the web and it
### should not be trusted). However, during development, it may be
### useful to know when these errors are happening and be told of
### them right away.
### 是否为struts开发模式
struts.devMode = false
### when set to true, resource bundles will be reloaded on _every_ request.
### this is good during development, but should never be used in production
### 是否自动加载国际化信息
struts.i18n.reload=false
### Standard UI theme
### Change this to reflect which path should be used for JSP control tag templates by default
# 默认的UI template主题
struts.ui.theme=xhtml
# UI templates的目录夹
struts.ui.templateDir=template
#sets the default template type. Either ftl, vm, or jsp
#设置默认模板类型. ftl, vm, jsp三个中的一个
struts.ui.templateSuffix=ftl
### Configuration reloading
### This will cause the configuration to reload struts.xml when it is changed
### 是否自动加载xml配置
### 这将导致配置重新载入struts.xml当它被改变
struts.configuration.xml.reload=false
### Location of velocity.properties file. defaults to velocity.properties
struts.velocity.configfile = velocity.properties
### Comma separated list of VelocityContext classnames to chain to the StrutsVelocityContext
struts.velocity.contexts =
### Location of the velocity toolbox
struts.velocity.toolboxlocation=
### used to build URLs, such as the UrlTag
struts.url.http.port = 80
struts.url.https.port = 443
### possible values are: none, get or all
struts.url.includeParams = get
### Load custom default resource bundles
### 加载附加的国际化属性文件(不包含.properties后缀)
# struts.custom.i18n.resources=testmessages,testmessages2
### workaround for some app servers that don't handle HttpServletRequest.getParameterMap()
### often used for WebLogic, Orion, and OC4J
struts.dispatcher.parametersWorkaround = false
### configure the Freemarker Manager class to be used
### Allows user to plug-in customised Freemarker Manager if necessary
### MUST extends off org.apache.struts2.views.freemarker.FreemarkerManager
#struts.freemarker.manager.classname=org.apache.struts2.views.freemarker.FreemarkerManager
### Enables caching of FreeMarker templates
### Has the same effect as copying the templates under WEB_APP/templates
### 是否缓存freemarker模版
struts.freemarker.templatesCache=false
### See the StrutsBeanWrapper javadocs for more information
struts.freemarker.wrapper.altMap=true
### configure the XSLTResult class to use stylesheet caching.
### Set to true for developers and false for production.
### 是否缓存XSLT模版
struts.xslt.nocache=false
### A list of configuration files automatically loaded by Struts
### struts自动加载的配置文件列表
struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml
### Whether to always select the namespace to be everything before the last slash or not
###
struts.mapper.alwaysSelectFullNamespace=false
### END SNIPPET: complete_file
根据以下线索,确定“谁养猫?”
1,红房子在蓝房子的右边、白房子的左边(不一定紧邻)。
2,黄房子的主人来自香港,而且他的房子不在最左边。
3,爱吃比萨饼的人住在爱喝矿泉水的人的隔壁。
4,来自北京的人爱喝茅台,住在来自上海的人的隔壁。
5,吸希尔顿香烟的人住在养马的人的右边隔壁。
6,爱喝啤酒的人也爱吃鸡。
7,绿房子的人养狗。
8,爱吃面条的人住在养蛇的人的隔壁。
9,来自天津的人的邻居(紧邻)一个爱吃牛肉,另一个来自成都。
10,养鱼的人住在最右边的房子里。
11,吸万宝路香烟的人住在吸希尔顿香烟的人和吸“555”香烟的人的中间(紧邻)。
12,红房子的人爱喝茶。
13,爱喝葡萄酒的人住在爱吃豆腐的人的右边隔壁。
14,吸红塔山香烟的人既不住在吸健牌香烟的人的隔壁,也不与来自上海的人相邻。
15,来自上海的人住在左数第二间房子里。
16,爱喝矿泉水的人住在最中间的房子里。
17,爱吃面条的人也爱喝葡萄酒。
18,吸“555”香烟的人比吸希尔顿香烟的人住得靠右。
01 02 03 04 05
------------------------------------------------------------------------
北京人 上海人 香港人 天津人 成都人
③(4)(16) ①(15) [⑩+1] ⑨ ⑩
------------------------------------------------------------------------
吸健牌香烟 吸希尔顿香烟 吸万宝路香烟 吸“555”香烟 吸红塔山香烟
② ② ② ② ②
------------------------------------------------------------------------
喝茅台 葡萄酒 喝矿泉水 茶 啤酒
③(4)(16) [⑦+1] ①(16) [⑧+2] [⑧+1]
------------------------------------------------------------------------
养马 狗 蛇 猫 养鱼
③(②)(5) [⑧+6] [⑦+1] (*) ①(10)
------------------------------------------------------------------------
蓝房子 绿房子 黄房子 红房子 白房子
④ [⑧+5] [⑩+2] [⑧+3] [⑧+4]
------------------------------------------------------------------------
豆腐 面条 牛肉 比萨 鸡
⑦ ⑦ ⑥ ⑦ ⑧
------------------------------------------------------------------------
①
②(11)(18)+(14)(15)
③(4)(16)
③(5)(②)
④(1红白不在最左)(2黄不在最左)(③+7绿不在最左)
⑤(6吃鸡不在中间)(3+16比萨不在中间)(16+17面条不在中间)-->只有豆腐牛肉可能在中间
[_?⑥_]假设豆腐在中间-->[_?⑦_](16+17面条在04位)
-->[_?⑧_]([_?⑦+3比萨在02位)
-->[_?⑨_](③+6鸡不在01位)
-->[_?⑩_]([_?⑥_]+[_?⑦_]+[_?⑧_]+[_?⑨_]牛肉在01位)
-->
-->([_?⑩_]+9+15矛盾了)
⑥(⑤+[_?⑥_])
⑦(③+6鸡不在01位)(16+17豆腐面条相连)(3)
⑧(⑥+⑦)
⑨(⑥+9+15)
⑩(⑨+15)
国外开发者博客中有一篇有趣的文章,将程序员按水平像软件版本号那样划分为不同的版本。相对于在招聘时分为初级,中级,高级程序员,直接表明需要某种语言N版本的程序员或许更方便直接。根据作者的观点,可将WEB开发者大致分为以下几个版本:
Alpha:阅读过一些专业书籍,大多数能用Dreamweaver或者FrontPage帮朋友制作一些Web页面。但在他们熟练掌握HTML代码以前,你大概不会雇佣他们成为职业的WEB制作人员。
Beta:已经比较擅长整合站点页面了,在HTML技巧方面也有一定造诣,但还是用Tables来制作页面,不了解CSS,在面对动态页面或数据库连接时还是底气不足。
Pre Version 1 (0.1):比Beta版的开发者水平要高。熟悉HTML,开始了解CSS是如何运作的,懂一点JavaScript,但还是基于业余水准,逐步开始关心动态站点搭建和数据库连接的知识。这个版本的WEB开发人员还远不能成为雇主眼中的香饽饽。
1.0: 能够基本把控整个站点开发,针对每个问题尽可能的找到最直接的解决办法。但对可测性,可扩展性以及在不同(层)框架下如何选择最合适的WEB设计工具尚无概念。这个版本的WEB开发者有良好的技术基础,需要有进一步的帮助和指导。
2.0:懂面向对象的编程语言,理解分层开发的必要性,关注代码分离,对问题寻找更完美的解决方法,偶然也会考虑设计模式的问题,但对此仍然概念不清。属于优秀的初级开发者,能完成较松散的代码开发(相对大型严谨的站点开发而言),在面对较复杂问题寻找解决办法时需要周边人的帮助。
3.0:开始较为深入的理解面向对象编程和设计模式,了解他们的用途,当看到好的设计模式时能看透其本质,逐步关注分层的架构解决办法和可测试性。理解不同的开发语言并能说出他们的异同(例如各自的优势)。属于优秀的中级别开发者,雇主也确信他们最终能找到问题的解决办法,这个版本的人可以给1.0和2.0的开发者以指导。但他们对架构的理解仍然不够清晰,值得一提的是,只要给予一些指导,他们能很快理解并熟记做出的决定,以及选定方案的优势所在。
4.0:理解模式,重视用户的反馈。着手研究方法论,架构设计和软件开发的最佳入口。头脑中已经形成了超越开发语言,技术架构的整体方案,可根据需求解构程序。能从理论的角度,不同模式如何融合成最佳形态,将多种X-驱动的模式应用到不同的方案中。是精通多语言的高手,理解不同系统和方法论的细微差别,属于高级程序员。这个级别的人能够轻易的辅导2.0和3.0的程序员,将他们推向更高的级别。
5.0:从系统的角度考虑问题。对各种系统结构有深入研究,能对整个代码架构中的问题进行改进。在团队粘合性以及代码安全性方面有杰出贡献。对1.0到4.0版本的开发人员出现的问题能及时察觉,让整个团队保持积极性且保持兴奋的状态创建软件解决办法。举例来说,他们总是对新的技术和信息保持饥渴状态,试图用最简便的方案解决开发任务。在整个IT团队中获得信任,属于高级程序员和架构师。
那么,您属于哪个版本的程序员呢?