struts2提供给我们更为灵活的设计,他的很多东西都是可以手动配置的,下面介绍下他的一些长用的 constant作用和配置
struts.serve.static.browserCache 该属性设置浏览器是否缓存静态内容。当应用处于开发阶段时,我们希望每次请求都获得服务器的最新响应,则可设置该属性为false。
struts.enable.DynamicMethodInvocation 该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false。
struts.enable.SlashesInActionNames 该属性设置Struts 2是否允许在Action名中使用斜线,该属性的默认值是false。如果开发者希望允许在Action名中使用斜线,则可设置该属性为true。
struts.tag.altSyntax 该属性指定是否允许在Struts 2标签中使用表达式语法,因为通常都需要在标签中使用表达式语法,故此属性应该设置为true,该属性的默认值是true。
struts.devMode该属性设置Struts 2应用是否使用开发模式。如果设置该属性为true,则可以在应用出错时显示更多、更友好的出错提示。该属性只接受true和flase两个值,该属性的 默认值是false。通常,应用在开发阶段,将该属性设置为true,当进入产品发布阶段后,则该属性设置为false。
struts.i18n.reload该属性设置是否每次HTTP请求到达时,系统都重新加载资源文件。该属性默认值是false。在开发阶段将该属性设置为true会更有利于开发,但在产品发布阶段应将该属性设置为false。
提示 开发阶段将该属性设置了true,将可以在每次请求时都重新加载国际化资源文件,从而可以让开发者看到实时开发效果;产品发布阶段应该将该属性设置为false,是为了提供响应性能,每次请求都需要重新加载资源文件会大大降低应用的性能。
struts.ui.theme该属性指定视图标签默认的视图主题,该属性的默认值是xhtml。
struts.ui.templateDir该属性指定视图主题所需要模板文件的位置,该属性的默认值是template,即默认加载template路径下的模板文件。
struts.ui.templateSuffix该属性指定模板文件的后缀,该属性的默认属性值是ftl。该属性还允许使用ftl、vm或jsp,分别对应FreeMarker、Velocity和JSP模板。
struts.configuration.xml.reload该属性设置当struts.xml文件改变后,系统是否自动重新加载该文件。该属性的默认值是false。
struts.velocity.configfile该属性指定Velocity框架所需的velocity.properties文件的位置。该属性的默认值为velocity.properties。
struts.velocity.contexts该属性指定Velocity框架的Context位置,如果该框架有多个Context,则多个Context之间以英文逗号(,)隔开。
struts.velocity.toolboxlocation该属性指定Velocity框架的toolbox的位置。
struts.url.http.port该属性指定Web应用所在的监听端口。该属性通常没有太大的用户,只是当Struts 2需要生成URL时(例如Url标签),该属性才提供Web应用的默认端口。
struts.url.https.port该属性类似于struts.url.http.port属性的作用,区别是该属性指定的是Web应用的加密服务端口。
struts.url.includeParams该属性指定Struts 2生成URL时是否包含请求参数。该属性接受none、get和all三个属性值,分别对应于不包含、仅包含GET类型请求参数和包含全部请求参数。
struts.custom.i18n.resources该属性指定Struts 2应用所需要的国际化资源文件,如果有多份国际化资源文件,则多个资源文件的文件名以英文逗号(,)隔开。
struts.dispatcher.parametersWorkaround 对于某些Java EE服务器,不支持HttpServlet Request调用getParameterMap()方法,此时可以设置该属性值为true来解决该问题。该属性的默认值是false。对于 WebLogic、Orion和OC4J服务器,通常应该设置该属性为true。
struts.freemarker.manager.classname 该属性指定Struts 2使用的FreeMarker管理器。该属性的默认值是 org.apache.struts2.views.freemarker.FreemarkerManager,这是Struts 2内建的FreeMarker管理器。
struts.freemarker.wrapper.altMap该属性只支持true和false两个属性值,默认值是true。通常无需修改该属性值。
struts.xslt.nocache 该属性指定XSLT Result是否使用样式表缓存。当应用处于开发阶段时,该属性通常被设置为true;当应用处于产品使用阶段时,该属性通常被设置为false。
struts.configuration.files 该属性指定Struts 2框架默认加载的配置文件,如果需要指定默认加载多个配置文件,则多个配置文件的文件名之间以英文逗号(,)隔开。该属性的默认值为struts- default.xml,struts-plugin.xml,struts.xml,看到该属性值,读者应该明白为什么Struts 2框架默认加载struts.xml文件了。
()
struts2是通过增强(advice),来执行方法的;
个人猜测是:通过struts.xml,配置出增强的,容器加载的时候,他自动如Ioc一般,自动创建类,以及将表单
数据注入到action实现类的方法里,然后再利用反射自动运行execute方法;
当然在execute方法之前会织入一些框架的拦截器;
1.struts.xml格式:
- <struts>
- <package name="struts2" extends="struts-default" namespace ="/book" >
- //一种格式,name是随意起的,namespace是命名空间^_^,嘿嘿,命名空间;
- <default -action-ref name="lost" />
- //如果没有找到对应的此name的值;
- <action name="login" class ="com.wang.action.LoginAction" method="add" >
- //name,对应表单递交action; class是表明action的实现类 ,method是相当于配置动态Action的方法;
- <result name="success" >/success.jsp</result>
- //通过action类返回的是字符串,与name匹配,调转到某个页面;
- </action>
- <action name="lost" >
- <result>/lost.jsp</result>
- </action>
- </package>
- </struts>
介绍struts的各种属性的配置:
constant:<constant name="" value="" />
他是等于在struts.properties中配置struts2的那些核心属性;
include:<include file="struts-XXX.xml" />
包含,包含其他的struts-XXX.xml文件配置;
struts2能够在配置文件书写EL表达式,他可以使得配置文件更加灵活,例如:
- <struts>
- <package name="struts" extends ="struts-default" >
- <action name="login" class ="action.Action" >
- <result name="succee" >/${name}.jsp</result>
- //可以由jsp界面控制转向页面;
- </action>
- </package >
- </struts>
解读<result >属性type:
dispatcher 转发
参数: location 具体的jsp界面;
redirect 重定向
chain action链
只是简单的写一些常用的type,其他的病不是很常用到,至少在下并没有使用到;
解读: <constant>
属性 name :
struts.i18n.encoding 编码 value-"GBK"
struts.i18n.reload 每次是否重新加载国际化资源文件 value-true/false
struts.configuration.xml.reload 每次修改struts.xml,服务器重新加载; value-true/false
struts.serve.static.browserCache 设置是否缓存静态页面; value-true/false
struts.devMode 是否是开发模式,可以得到更到调试信息 value-true/false;
2.execute方法配置:
调用ActionContext的方法:
ActionContext.getContext(); 返回一个ActionContext对象;
ActionContext.getContext().getSession() 返回一个Session对象的Map;
ActionContext.getContext().getApplication() 返回一个servlet的Application对象;
ActionContext.getContext().getParameters() 相当于httpParameters对象的getParameterMap();
调用ServletActionContext的方法:
ServletActionContext.getRequest() 返回一个request对象;
ServletActionContext.getRequest() 返回一个respose对象;
ServletActionContext.getServletContext() 返回一个ServletContext对象;
普通bean上添加execute方法;
- public String execute() throws Exception {
- System.out .print(this .getName());
- Map voPut= ActionContext.getContext().getSession();
- //ActionContext,方法是储存到web对象中方法
- voPut.put("user" , this );
- return "success" ;
- }
底层是将bean的所有属性封装到ValueStack的对象中,然后将ValueStack封装在request中;
- <%
- ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack" );
- String name = (String[])vs.findValue("name" );
- %>
数据印证:
bean继承ActionSupport类,并重写他的validate方法以及在配置文件中添加input属性;
xml:
- <result name="input" >/index.jsp</result>
bean:
- public void validate() {
- if (name==null ||name.equals("" )) {
- this .addFieldError("name" , "用户名不能为空" );
- //添加页面的错误信息(textfield的名字,错误信息),
- }
- }
3.web.xml的配置:
- <!-- 定义Struts2的FilterDispathcer的Filter -->
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class >org.apache.struts2.dispatcher.FilterDispatcher</filter-class >
- </filter>
- <!-- FilterDispatcher用来初始化struts2并且处理所有的WEB请求。 -->
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
4.标签:
- <%@taglib prefix="s" uri="/struts-tags" %>
5.struts2类中似于struts1的写法,将POJO完全的变成ActionForm,然后Action独立,继承ModelDriven方法;
POJO类的写法,咱就省略了,写了也没啥意思,还占地方,没办法的事情;action的写法
- public class Actions implements ModelDriven<User> {
- //ModelDriven接口是提供POJO与Action的连接
- private User user = new User();
- //必须初始化;
- public String execute() {
- System.out .print(user.getName());
- return "succee" ;
- }
- public User getModel() {
- return user;
- }
- }