在http://blog.csdn.net/qq_21231581/article/details/51838812中我们完成了Struts2框架的准备工作,并且顺利演示了一个小栗子,本篇文章我会继续了解Struts2的常用配置,好了开始吧:
1.Struts.xml文件的基本内容
1.全局属性
2.用户请求与action响应之间的关系
3.action可能用到的参数和结果
4.各种拦截器的配置
2.action类中访问servlet的API(request,response,session等)
方式1.ActionContext(推荐使用)
ActionContext.getContext()可获得该对象,同时其有方法如:
1、public Object get(Object key):取得HttpServletRequest中key的值;
2、void put(String key,Object value):设置HttpServletRequest中key的值为value;
3、public Map getApplication():获取封装了ServletContext的Map对象;
4、void setApplication(Map application):设置ServletContext实例;
5、Map getParameters():类似于HttpServletRequest中的getParametersMap方法;
6、public Map getSession():获取封装了HttpSession的Map对象;
7、void setSession(Map session):直接传入一个Map实例,将该Map实例里的key-value对转换为session的属性名和属性值;;
方式2.实现Aware接口(不推荐使用)
方式3.ServletActionContext(推荐使用),有如下静态方法
1.getPageContext();
2.getRequest() ;
3.getResponse();
4.getServletContext()。
3.动态方法调用
步骤一:在Action类中创建相关的动态方法,形如:
public class DemoSupport extends ActionSupport {
@Override
public String execute() throws Exception {
System.out.println("Hello struts2!");
return this.SUCCESS;
}
public String loadAll() {
System.out.println("Hello Dynamic Method!");
return "loadAll";
}
}
步骤二:创建与该方法相对应的视图,即JSP界面
我已经创建名为loadAll.jsp文件
步骤三:在struts.xml文件中相应配置
配置方法有三种:
方法一:在action节点中直接配置一个result节点,形如:
<!-- 这是第一种动态方法调用方式
class:对应的Action类路径
method:对应创建的方法名
<span style="font-size:14px;"><span style="font-size:14px;"><span style="font-size:14px;"><span style="font-size:14px;"><span style="font-size:14px;"></span></span></span></span></span><pre name="code" class="html"> name:url中访问Action的路径名
--><action name="load" class="Action.DemoSupport" method="loadAll"><!-- 对应的JSP视图 --><result>/loadAll.jsp</result></action>
弊端:一个action类中动态方法多的话比较繁琐
方法二:感叹号配置使用(不推荐),有兴趣的可百度,在此不做赘述。
方法三:通配符配置使用(官方推荐)“_*”
<action name="demo_*" method="{1}" class="Action.DemoSupport">
<result>/result.jsp</result>
<!--name值与相应的动态方法返回结果相一致 -->
<result name="loadAll">/loadAll.jsp</result>
</action>
说明:action节点的name属性中的“*”对应method的{1},如果有第二的“*”则对应的{2},以此类推
url为http://.../demo_loadAll.action,则loadAll.JSP就会显示在浏览器界面
4.指定多个配置文件(Struts.xml分解)
步骤一:新建一个与struts.xml相同结构的xml文件
步骤二:在struts.xml中如下配置
<include file="sys.xml"></include>
由此,一些配置即可写入到同目录下(在其他目录下创建则补全相对路径)的sys.xml
5.默认action设置
6.修改action的后缀名
首先,得保证web.xml中struts的map-partern是/*(之前我被这个玩了一小会儿)
之后,在struts.xml中的struts节点下添加如下
<!-- value即后缀,默认为action,若设置为空则如下,其他的话直接写入配置 -->
<constant name="struts.action.extension" value=","
7.Action类接收参数
方法一:使用Action的属性接收参数:在Action类中定义属性,创建getter/setter:形如:
public class DemoSupport extends ActionSupport {
private String username = "";
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
......
public String loadAll() {
System.out.println(this.username);
System.out.println("Hello Dynamic Method!");
return "loadAll";
}
}
但是这个方法不适合用在参数较多的地方
方法二:使用DomainModel接收参数:
将较多的字段封装成Bean,之后在Action中新建一个该成员对象,并给出getter/setter
并且,在JSP中需要加上成员对象名去写参数:
<form action="sys/login.action" method="post">
<input type="text" name="user.username">
<input type="password" name="user.password">
<input type="submit" value="submit">
</form>
接收使用参数使用对象的getter/setter方法三:使用ModelDriven接收参数:
将较多的字段封装成Bean,之后在Action中新建一个该成员对象
将对应的Action类实现ModelDriven接口给出对象Bean的泛型,实现其getModel方法
public class DemoSupport extends ActionSupport implements ModelDriven<User>{
private User user;
...
@Override
public User getModel() {
return user;
}
}
接收使用参数使用对象的getter/setter