struts2每日一记1
2013-01-23 23:41
411 查看
1.struts2是作用在表现的基于模型-视图-控制器模式的开源框架,即mvc框架;
2.struts为struts1注入了webwork的设计理念,统一了struts1和webwork框架,所以struts1和webwork将不再有新的版本推出。
3.mvc设计模式:mvc思想将应用分成3个基本部分,model,view,controllers这三个部分之间耦合性非常小,从而提高了应用的可扩展性和可维护性。
4.struts1框架的复习:struts的大致流程》》将其分成两个部分:1.服务器启动时,启动中央控制器(在web.xml中配置的ActioServlet)。
2.当浏览器端发送请求到服务器,struts1的中央控制器接收请求后根据struts-config.xml中寻找对应的映射关系。若找到就到action里执行相应的方法,去执行相应的逻辑操作,若找不到就返回错误信息到jsp页面。
5.struts2的框架 struts2的大致流程:浏览器发送请求(*.action),中央控制器(过滤器)接收请求,去配置文件(*.properties,*.xml)中找相应的配置和action,action会去器代 理 的action中找到相应的包,包中若定义了拦截器,则先通过拦截器到达到action,action通过调用相应的方法处理逻辑业务,然后通过层层拦截器返回给中央控制器,中央控制器将处理结果返回给view(jsp),通过处理够将其展现给浏览器的客户端。
下面开始sturts2的具体工作:1搭建struts2环境 a.加入struts2的jar,
上传文件
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
模板语言
freemarker-2.3.16.jar
分析、编辑和创建Java字节码的类库
javassist-3.7.ga.jar
核心库
ognl-3.0.jar
xwork-core-2.2.1.1.jar
struts2-core-2.2.1.1.jar
可选
使用Struts sx标签
struts2-dojo-plugin-2.1.8.jar
数据校验
commons-validator-1.3.1.jar
与Spring整合
struts2-spring-plugin-2.2.1.1.jar
2.web.xml配置struts2中央控制器(过滤器),可以从
struts2-blank.war\WEB-INF\web.xml下拷贝
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
c.
在src下定义struts.xml,可以从struts2-blank.war\WEB-INF\src\java\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>
</struts>
d.部署测试运用
2.第一个Struts应用程序,运行/hello.action,请求通过Action调转到jsp页面显示Hello World
在Struts2中定义Action来代替Serlvlet处理请求。思路相似,写法不同
a.编写hello.jsp
b.编写HelloWorldAction
public class HelloWorldAction {
public String execute() throws Exception {
return "success";
}
}
c.编写struts.xml
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="hello"
class="com.puckasoft.web.action.HelloWorldAction" method="execute">
<result name="success" type="dispatcher">/hello.jsp</result>
</action>
</package>
</struts>
当访问/hello时,Struts2调用HelloWorldAction类的execute方法处理请求。
Execute方法返回success字符串,Struts2根据success查找对应的路径/hello.jsp跳转
d.测试运用
3. Action的三种写法
a.POJO Actions - 任意的类都可以作为Action,甚至不需要实现任何接口,也不需要继承某个父类
public class HelloWorldAction {
public String execute() throws Exception {
return "success";
}
}
b.实现 com.opensymphony.xwork2.Action 接口,这种方式可以借助于Action接口中定义的方法来规范请求的处理,定义的常量来规范方法的返回值。
Action源码如下
package com.opensymphony.xwork2;
public interface Action {
public static final String SUCESS= "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws Exception;
}
public class HelloWorldAction2 implements Action {
public String execute() throws Exception {
return Action.SUCCESS;
}
}
c.继承 com.opensymphony.xwork2.ActionSupport 类。 ActionSupport类实现了Action接口,同时提供了国际化和校验的方法,这样可以大大简化Action的编写,在工作中,通常采用这种方式完成Action的定义。
ActionSupport源码如下
public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable {
public String execute() throws Exception {
return SUCCESS;
}//成功跳转的方法
public void valiadate() {
}//验证访问的方法
public void addFieldError(String fieldName, String errorMessage) {
...
}//文件出错方法
public Locale getLocale() {//国际化的方法,找到本地路径
...
}
public String getText(String aTextName) {//取国际化资源
...
}
}
public class HelloWorldAction3 extends ActionSupport {
}
struts2的Action非单例,每次用户请求到来以后都会产生一个新的实例,而struts1的Action 是单例的,在编写struts1的Action的时候务必要小心线程安全问题 , 而struts2中该问题不复存在
注:如何查看框架源码
点击Attach Source… 按钮,点击 External Folder ... 按钮,弹出文件对话框.选择源码存放的路径,再点击Apply按钮完成操作。
Struts2的源码在struts-2.2.1.1\src\core\src\main\java目录下
Webwork的源码在struts-2.2.1.1\src\xwork-core\src\main\java 目录下
4.配置文件介绍
在tomcat的config目录下有个全局web.xml ,对所有部署在tomcat中的webapp都有效。
在Struts2_01_Helloworld的WebRoot/WEB-INF目录下也有一个局部的web.xml,只对该工程有效。Struts2也有这样的设计。
Struts2配置文件:
struts-default.xml :struts2全局配置文件, struts2框架启动时会自动加载该文件
位置:struts2-core-2.2.1.1.jar/struts-default.xml
作用:定义bean和一个抽象的包。包中定义了返回类型、拦截器、拦截器栈、默认的拦截器和默认的Action
<struts>
<bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" />
. . .
<package name="struts-default" abstract="true">
<result-types>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
</result-types>
<interceptors>
<interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
<interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/>
<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
. . .
<interceptor-stack name="basicStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="multiselect"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
</interceptor-stack>
. . .
<interceptor-stack name="defaultStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="multiselect"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultStack"/>
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
</package>
</struts>
struts.xml : 用户自定义,
位置:src /struts.xml
作用:定义WebApp中的各种Action、返回结果、异常处理和拦截器信息
default.properties:Struts2全局常量文件,框架启动时会自动加载该文件
位置:struts2-core-2.2.1.1.jar/org/apache/struts2/default.properties
作用:定义系统配置信息
# struts.configuration=org.apache.struts2.config.DefaultConfiguration
# struts.locale=en_US
struts.i18n.encoding=UTF-8
# struts.objectFactory = spring
struts.objectFactory.spring.autoWire = name
struts.objectFactory.spring.useClassCache = true
struts.objectFactory.spring.autoWire.alwaysRespect = false
#struts.objectTypeDeterminer = tiger
#struts.objectTypeDeterminer = notiger
# struts.multipart.parser=cos
# struts.multipart.parser=pell
struts.multipart.parser=jakarta
# uses javax.servlet.context.tempdir by default
struts.multipart.saveDir=
struts.multipart.maxSize=2097152
# struts.custom.properties=application,org/apache/struts2/extension/custom
#struts.mapper.class=org.apache.struts2.dispatcher.mapper.DefaultActionMapper
struts.action.extension=action,,
struts.serve.static=true
struts.serve.static.browserCache=true
struts.enable.DynamicMethodInvocation = true
struts.enable.SlashesInActionNames = false
struts.tag.altSyntax=true
struts.devMode = false
struts.i18n.reload=false
struts.ui.theme=xhtml
struts.ui.templateDir=template
#sets the default template type. Either ftl, vm, or jsp
struts.ui.templateSuffix=ftl
struts.configuration.xml.reload=false
struts.velocity.configfile = velocity.properties
struts.velocity.contexts =
struts.velocity.toolboxlocation=
struts.url.http.port = 80
struts.url.https.port = 443
struts.url.includeParams = none
# struts.custom.i18n.resources=testmessages,testmessages2
struts.dispatcher.parametersWorkaround = false
#struts.freemarker.manager.classname=org.apache.struts2.views.freemarker.FreemarkerManager
struts.freemarker.templatesCache=false
struts.freemarker.beanwrapperCache=false
struts.freemarker.wrapper.altMap=true
struts.freemarker.mru.max.strong.size=100
struts.xslt.nocache=false
struts.mapper.alwaysSelectFullNamespace=false
struts.ognl.allowStaticMethodAccess=false
struts.el.throwExceptionOnFailure=false
struts.ognl.logMissingProperties=false
struts.ognl.enableExpressionCache=true
struts.properties: 用户自定义
位置:src/struts.properties
作用:覆盖系统配置信息
5.Action的访问路径与常量配置方法
Action的访问路径是由Action的名字,所在包的命名空间,和常量struts.action.extension共同决定的
struts.action.extension的默认值是action, ,
也就是说要访问配置文件中的Action 可以运行/helloworld 和 /helloworld.action
指定请求Action的后缀为do,action后,就只能通过/helloworld.do 和helloworld.action 访问Action了
常量配置:
Struts2常量可以在web.xml,struts.xml,struts.properties等多处配置
以配置Action访问路径的后缀为例子
a.在struts.xml中配置
格式
<constant name="参数名" value="参数值">
代码
<constant name="struts.action.extension" value="do"></constant>
b.在struts.properties中配置
格式
参数名=参数值
代码
struts.action.extension=action
c.在web.xml中的StrutsPrepareAndExecuteFilter中配置
格式
<init-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</init-param>
代码
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<param-name>struts.action.extension</param-name>
<param-value>do,action,,</param-value>
</init-param>
</filter>
不推荐在web.xml中配置,比较繁琐,可读性差
struts.xml和struts.properties选择一种即可
练习:比较三种配置方法谁的优先级最高
加载顺序如下:
1.struts2-core-2.2.1.1.jar/struts-default.xml(最最低)
2.struts2-core-2.2.1.1.jar/org/apache/struts2/default.properties(最低)
3.%class_path%/struts.xml(低)
4.%class_path%/struts.properties
5.web.xml(高)
练习:配置开发模式,struts.devMode的默认值是false,改成true时可以热启动web服务器
配置字符集编码为Utf-8
<constant name="struts.devMode" value="true"></constant>
<constant name="struts.i18n.encoding" value="GBK"></constant>
6.struts.xml配置文件详解
Package标签
在struts.xml 配置业务逻辑控制器, Action 必须要配置在package中,package的概念跟程序中包的概念类似。
功能:
解决了Action命名冲突
将功能类似的Action放到同一个包中,易于维护和管理。
配置格式:
<package name="" namespace="" extends=" " >
属性:
name属性(必选) : 包的名字,最好根据业务功能模块命名,如果其他包要继承该包,必须通过该属性进行引用
namespace属性(可选,默认为空字符串) : 定义该包的命名空间,命名空间作为访问该包下的Action的路径的一部分
abstract属性(可选) : 定义该包是否抽象,抽象时不能包含action。
extends属性(可选) : 定义父包,可继承父包的Action,拦截器和拦截器栈。通常继承struts-default包, 因为它 定义了一些拦截器和跳转类型。这些拦截器实现了 诸如将请求中把请求参数封装到action、文件上传和数据验证等等核心功能。
struts-default包定义在struts2-core-2.2.1.1.jar/struts-default.xml中
Action标签
配置格式:
<action name=" " class=" " method=" ">
属性:
name属性(必填):action的名字
class属性(选填,默认值为ActionSupport类):action的类名
method属性(选填,默认值为execute):action的方法名
Result标签
配置格式
<result name=" " type=" "> </result>
name属性(选填,默认值为success):result名字,和Action的execute方法的返回对应
type属性(选填,默认值为dispatcher):result类型,dispatcher为服务器内部跳转
简化Struts配置
<action name="hello">
<result>/hello.jsp</result>
</action>
2.struts为struts1注入了webwork的设计理念,统一了struts1和webwork框架,所以struts1和webwork将不再有新的版本推出。
3.mvc设计模式:mvc思想将应用分成3个基本部分,model,view,controllers这三个部分之间耦合性非常小,从而提高了应用的可扩展性和可维护性。
4.struts1框架的复习:struts的大致流程》》将其分成两个部分:1.服务器启动时,启动中央控制器(在web.xml中配置的ActioServlet)。
2.当浏览器端发送请求到服务器,struts1的中央控制器接收请求后根据struts-config.xml中寻找对应的映射关系。若找到就到action里执行相应的方法,去执行相应的逻辑操作,若找不到就返回错误信息到jsp页面。
5.struts2的框架 struts2的大致流程:浏览器发送请求(*.action),中央控制器(过滤器)接收请求,去配置文件(*.properties,*.xml)中找相应的配置和action,action会去器代 理 的action中找到相应的包,包中若定义了拦截器,则先通过拦截器到达到action,action通过调用相应的方法处理逻辑业务,然后通过层层拦截器返回给中央控制器,中央控制器将处理结果返回给view(jsp),通过处理够将其展现给浏览器的客户端。
下面开始sturts2的具体工作:1搭建struts2环境 a.加入struts2的jar,
上传文件
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
模板语言
freemarker-2.3.16.jar
分析、编辑和创建Java字节码的类库
javassist-3.7.ga.jar
核心库
ognl-3.0.jar
xwork-core-2.2.1.1.jar
struts2-core-2.2.1.1.jar
可选
使用Struts sx标签
struts2-dojo-plugin-2.1.8.jar
数据校验
commons-validator-1.3.1.jar
与Spring整合
struts2-spring-plugin-2.2.1.1.jar
2.web.xml配置struts2中央控制器(过滤器),可以从
struts2-blank.war\WEB-INF\web.xml下拷贝
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
c.
在src下定义struts.xml,可以从struts2-blank.war\WEB-INF\src\java\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>
</struts>
d.部署测试运用
2.第一个Struts应用程序,运行/hello.action,请求通过Action调转到jsp页面显示Hello World
在Struts2中定义Action来代替Serlvlet处理请求。思路相似,写法不同
编写Servlet类继承HttpServlet | 编写Action 继承Action | 编写Action |
重写services方法处理请求 | 定义execute方法 | 定义任何方法处理请求 |
在services方法内跳转 | 在struts-config.xml中定义跳转 | 在struts.xml中定义跳转 |
在web.xml中注册servlet | 在struts-config.xml中注册action | 在struts.xml中注册action |
b.编写HelloWorldAction
public class HelloWorldAction {
public String execute() throws Exception {
return "success";
}
}
c.编写struts.xml
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="hello"
class="com.puckasoft.web.action.HelloWorldAction" method="execute">
<result name="success" type="dispatcher">/hello.jsp</result>
</action>
</package>
</struts>
当访问/hello时,Struts2调用HelloWorldAction类的execute方法处理请求。
Execute方法返回success字符串,Struts2根据success查找对应的路径/hello.jsp跳转
d.测试运用
3. Action的三种写法
a.POJO Actions - 任意的类都可以作为Action,甚至不需要实现任何接口,也不需要继承某个父类
public class HelloWorldAction {
public String execute() throws Exception {
return "success";
}
}
b.实现 com.opensymphony.xwork2.Action 接口,这种方式可以借助于Action接口中定义的方法来规范请求的处理,定义的常量来规范方法的返回值。
Action源码如下
package com.opensymphony.xwork2;
public interface Action {
public static final String SUCESS= "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws Exception;
}
public class HelloWorldAction2 implements Action {
public String execute() throws Exception {
return Action.SUCCESS;
}
}
c.继承 com.opensymphony.xwork2.ActionSupport 类。 ActionSupport类实现了Action接口,同时提供了国际化和校验的方法,这样可以大大简化Action的编写,在工作中,通常采用这种方式完成Action的定义。
ActionSupport源码如下
public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable {
public String execute() throws Exception {
return SUCCESS;
}//成功跳转的方法
public void valiadate() {
}//验证访问的方法
public void addFieldError(String fieldName, String errorMessage) {
...
}//文件出错方法
public Locale getLocale() {//国际化的方法,找到本地路径
...
}
public String getText(String aTextName) {//取国际化资源
...
}
}
public class HelloWorldAction3 extends ActionSupport {
}
struts2的Action非单例,每次用户请求到来以后都会产生一个新的实例,而struts1的Action 是单例的,在编写struts1的Action的时候务必要小心线程安全问题 , 而struts2中该问题不复存在
注:如何查看框架源码
点击Attach Source… 按钮,点击 External Folder ... 按钮,弹出文件对话框.选择源码存放的路径,再点击Apply按钮完成操作。
Struts2的源码在struts-2.2.1.1\src\core\src\main\java目录下
Webwork的源码在struts-2.2.1.1\src\xwork-core\src\main\java 目录下
4.配置文件介绍
在tomcat的config目录下有个全局web.xml ,对所有部署在tomcat中的webapp都有效。
在Struts2_01_Helloworld的WebRoot/WEB-INF目录下也有一个局部的web.xml,只对该工程有效。Struts2也有这样的设计。
Struts2配置文件:
struts-default.xml :struts2全局配置文件, struts2框架启动时会自动加载该文件
位置:struts2-core-2.2.1.1.jar/struts-default.xml
作用:定义bean和一个抽象的包。包中定义了返回类型、拦截器、拦截器栈、默认的拦截器和默认的Action
<struts>
<bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" />
. . .
<package name="struts-default" abstract="true">
<result-types>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
</result-types>
<interceptors>
<interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
<interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/>
<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
. . .
<interceptor-stack name="basicStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="multiselect"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
</interceptor-stack>
. . .
<interceptor-stack name="defaultStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="multiselect"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultStack"/>
<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
</package>
</struts>
struts.xml : 用户自定义,
位置:src /struts.xml
作用:定义WebApp中的各种Action、返回结果、异常处理和拦截器信息
default.properties:Struts2全局常量文件,框架启动时会自动加载该文件
位置:struts2-core-2.2.1.1.jar/org/apache/struts2/default.properties
作用:定义系统配置信息
# struts.configuration=org.apache.struts2.config.DefaultConfiguration
# struts.locale=en_US
struts.i18n.encoding=UTF-8
# struts.objectFactory = spring
struts.objectFactory.spring.autoWire = name
struts.objectFactory.spring.useClassCache = true
struts.objectFactory.spring.autoWire.alwaysRespect = false
#struts.objectTypeDeterminer = tiger
#struts.objectTypeDeterminer = notiger
# struts.multipart.parser=cos
# struts.multipart.parser=pell
struts.multipart.parser=jakarta
# uses javax.servlet.context.tempdir by default
struts.multipart.saveDir=
struts.multipart.maxSize=2097152
# struts.custom.properties=application,org/apache/struts2/extension/custom
#struts.mapper.class=org.apache.struts2.dispatcher.mapper.DefaultActionMapper
struts.action.extension=action,,
struts.serve.static=true
struts.serve.static.browserCache=true
struts.enable.DynamicMethodInvocation = true
struts.enable.SlashesInActionNames = false
struts.tag.altSyntax=true
struts.devMode = false
struts.i18n.reload=false
struts.ui.theme=xhtml
struts.ui.templateDir=template
#sets the default template type. Either ftl, vm, or jsp
struts.ui.templateSuffix=ftl
struts.configuration.xml.reload=false
struts.velocity.configfile = velocity.properties
struts.velocity.contexts =
struts.velocity.toolboxlocation=
struts.url.http.port = 80
struts.url.https.port = 443
struts.url.includeParams = none
# struts.custom.i18n.resources=testmessages,testmessages2
struts.dispatcher.parametersWorkaround = false
#struts.freemarker.manager.classname=org.apache.struts2.views.freemarker.FreemarkerManager
struts.freemarker.templatesCache=false
struts.freemarker.beanwrapperCache=false
struts.freemarker.wrapper.altMap=true
struts.freemarker.mru.max.strong.size=100
struts.xslt.nocache=false
struts.mapper.alwaysSelectFullNamespace=false
struts.ognl.allowStaticMethodAccess=false
struts.el.throwExceptionOnFailure=false
struts.ognl.logMissingProperties=false
struts.ognl.enableExpressionCache=true
struts.properties: 用户自定义
位置:src/struts.properties
作用:覆盖系统配置信息
5.Action的访问路径与常量配置方法
Action的访问路径是由Action的名字,所在包的命名空间,和常量struts.action.extension共同决定的
struts.action.extension的默认值是action, ,
也就是说要访问配置文件中的Action 可以运行/helloworld 和 /helloworld.action
指定请求Action的后缀为do,action后,就只能通过/helloworld.do 和helloworld.action 访问Action了
常量配置:
Struts2常量可以在web.xml,struts.xml,struts.properties等多处配置
以配置Action访问路径的后缀为例子
a.在struts.xml中配置
格式
<constant name="参数名" value="参数值">
代码
<constant name="struts.action.extension" value="do"></constant>
b.在struts.properties中配置
格式
参数名=参数值
代码
struts.action.extension=action
c.在web.xml中的StrutsPrepareAndExecuteFilter中配置
格式
<init-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</init-param>
代码
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<param-name>struts.action.extension</param-name>
<param-value>do,action,,</param-value>
</init-param>
</filter>
不推荐在web.xml中配置,比较繁琐,可读性差
struts.xml和struts.properties选择一种即可
练习:比较三种配置方法谁的优先级最高
加载顺序如下:
1.struts2-core-2.2.1.1.jar/struts-default.xml(最最低)
2.struts2-core-2.2.1.1.jar/org/apache/struts2/default.properties(最低)
3.%class_path%/struts.xml(低)
4.%class_path%/struts.properties
5.web.xml(高)
练习:配置开发模式,struts.devMode的默认值是false,改成true时可以热启动web服务器
配置字符集编码为Utf-8
<constant name="struts.devMode" value="true"></constant>
<constant name="struts.i18n.encoding" value="GBK"></constant>
6.struts.xml配置文件详解
Package标签
在struts.xml 配置业务逻辑控制器, Action 必须要配置在package中,package的概念跟程序中包的概念类似。
功能:
解决了Action命名冲突
将功能类似的Action放到同一个包中,易于维护和管理。
配置格式:
<package name="" namespace="" extends=" " >
属性:
name属性(必选) : 包的名字,最好根据业务功能模块命名,如果其他包要继承该包,必须通过该属性进行引用
namespace属性(可选,默认为空字符串) : 定义该包的命名空间,命名空间作为访问该包下的Action的路径的一部分
abstract属性(可选) : 定义该包是否抽象,抽象时不能包含action。
extends属性(可选) : 定义父包,可继承父包的Action,拦截器和拦截器栈。通常继承struts-default包, 因为它 定义了一些拦截器和跳转类型。这些拦截器实现了 诸如将请求中把请求参数封装到action、文件上传和数据验证等等核心功能。
struts-default包定义在struts2-core-2.2.1.1.jar/struts-default.xml中
Action标签
配置格式:
<action name=" " class=" " method=" ">
属性:
name属性(必填):action的名字
class属性(选填,默认值为ActionSupport类):action的类名
method属性(选填,默认值为execute):action的方法名
Result标签
配置格式
<result name=" " type=" "> </result>
name属性(选填,默认值为success):result名字,和Action的execute方法的返回对应
type属性(选填,默认值为dispatcher):result类型,dispatcher为服务器内部跳转
简化Struts配置
<action name="hello">
<result>/hello.jsp</result>
</action>
相关文章推荐
- struts2每日一记2
- 每日一记。encodeURIComponent()
- 每日一记:2017.10.18
- 2013.4.23每日一记
- 每日一记----虚函数表
- 每日一记======>Linux下查找字符串命令的使用
- 每日一记--2014.9.15
- 每日一记--2014.10.11
- 2017-06-12 每日一记 Linux的root密码修改
- 【每日一记】设计模式——解释器模式
- iOS 每日一记-------简单的地百度地图的使用 简单地定位
- 每日一记-初识WebService
- sql server 每日一记之 with as delete from where in (select)
- Linux每日一记(2014-6-3)
- 设计模式学习-每日一记(1.简单工厂模式)
- 设计模式学习-每日一记(7.适配器模式)
- 设计模式学习-每日一记(17.解释器模式)
- 每日一记--2014.9.22
- 每日五题(struts2)
- 每日一记:2017.7.10