您的位置:首页 > 编程语言 > Java开发

struts2的一些用法(一):struts2的配置

2008-12-13 14:02 344 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: