上篇中谈到了Struts需要以下基础jar包,这里粗略补充一下各个jar包的作用:
Struts核心——拦截器
1.表面上看,拦截器帮助我们封装了很多功能。
2.拦截器优秀的设计——可插拔式设计。3.aop(面向切面编程)思想。
下面是struts.xml中的部分配置:
/index.jsp
将Action配置封装,就是可以在package中配置很多action。(和Java中的package不能混为一谈)
属性:
《1》name:给包起个名字,起标识作用,随便起,不能与其他包同名。
《2》namespace:给action的访问路径中定义一个命名空间。
《3》extends:继承一个指定包(必选)。
《4》abstract:包是否为抽象的,标识性属性,标识该包不能独立运行,专门被继承。
配置Action类。
属性:
《1》name:设定了Action访问资源名。
《2》class:Action的完整类名。
《3》method:指定调用Action中的哪个方法处理请求。
结果配置。
属性:
《1》name:标志结果处理的名称,与action方法的返回值对应。
《2》type:指定调用哪一个Result类来处理结果,默认使用转发。
《3》标签体:填写页面的相对路径
Struts2默认常量配置位置:
打开default.properties,可以看到如下的一些常量配置信息:
想要修改这些配置信息,有如下三种方式:
《1》在struts.xml中配置(重点):在struts标签下添加
《2》在src下新建一个struts.properties文件(了解):把需要修改的配置信息复制粘贴过来,修改。如下: struts.i18n.encoding=GBK
《3》在web.xml中配置(了解):在
struts.i18n.encoding
GBK
注:上述写的《1》《2》《3》顺序也是它们的加载顺序,后面加载的会覆盖前面加载的。
不过在真正的开发中只会在struts.xml配置即第《1》种。
《1》struts.i18n.encoding=UTF-8(国际化)——解决Post提交乱码
《2》struts.action.extension=action,,(指定访问action的后缀名)
《3》struts.devMode = false(指定Struts2 是否以开发模式运行,默认为false)
为true时:1.热加载主配置文件(不需要重启struts.xml即可生效)
2.提供更多的错误提示信息,方便开发时的调试
例,在src下的struts.xml中引入com.zl.action包中的struts.xml:
左图BookAction中有四种方法,根据用户不同的选择,这四种方法每一个方法都需要在struts.xml里注册一个action元素(右图),过于繁琐。在这种情况下,可以使用动态方法来配置。
有以下两种配置方法:
《1》在struts.xml中设置常量struts.enable.DynamicMethodInvocation的值为true
该常量表示配置动态方法调用是否开启,默认是关闭的,需要开启。
/success.jsp
在访问add方法时:
http://localhost:8080/IntercepterStruts2Demo/BookAction!add.action
在访问find方法时:
http://localhost:8080/IntercepterStruts2Demo/BookAction !find.action以此类推,这种方式显然很麻烦,所以一般用下面这种:
《2》*通配符方式:使用{1}取出第一个*通配的内容
(*前面的下划线可以是#或者没有或者别的,但一般都会用下划线)
/success.jsp
访问find()方法:
http://localhost:8080/IntercepterStruts2Demo/BookAction_find.action
/login.jsp
《1》
《2》
《3》
《4》
《1》创建一个类,可以是POJO。
POJO:表示不用继承任何父类,也不需要实现任何接口。
使struts2框架的代码侵入性更低。
《2》实现一个接口Action。
package com.zl.action;
import com.opensymphony.xwork2.Action;
public class ActionDemo implements Action{
@Override
public String execute() throws Exception {
return null;
}
}
里面必须要实现execute()方法,提供action方法的规范。为了方便,Action接口预置了一些字符串,可以在返回结果时使用。
《3》继承一个类ActionSupport。(推荐使用)
帮我们实现了Validateable、ValidationAware、TextProvider、LocalProvider这些接口,当我们需要用到这些接口的实现时,不需要自己来实现了。