一、首先关于Struts2框架:
①特点:
1、通用性
2、可扩展性
struts2可以自定义类型转换器(尚待深入)、自定义拦截器。
3、非侵入式
不会污染其他模块
②配置
1、Web工程的web.xml文件配置filter拦截器(拦截*.action请求)
2、struts.xml首先要关联约束文档
detailpage.jsp
标签package的作用是定义一个功能模块,其name属性作为标识是必填项,便于其他package引用,extends是继承了默认的配置。namespace也采用了默认配置,如果采用自定义名称空间,则访问这个package中定义的action时,必须在路径中加上名称空间值。
action对应着请求,class属性指定处理请求的类,method属性为处理请求的具体方法,result则对应响应,注意其name属性值。
③Action类
类中的set方法是注入请求参数,get方法作用是在jsp文件中利用EL表达式取出数据显示出来。当然,在标签action中指定了method的属性值为save,这个save就是Action类中处理请求的具体方法,此方法有固定的格式:
1)public 权限
2)String返回值类型
3) 没有参数
二、值栈
Struts2中的request对象不是Servlet容器创建的request对象了。
public class StrutsRequestWrapper extends HttpServletRequestWrapper{
public Object getAttribute(String key){
if(key==null){
throw new NullPointerException("You must specify a key value");
}
if(){
return super.getAttribute(key);
}
ActionContext ctx=ActionContext.getContext();
Object attribute=super.getAttribute(key);
if(ctx!=null&&attribute==null){
boolean alreadyIn=isTrue((Boolean)ctx.get(REQUEST_WRAPPER_GET_ATTRIBUTE));
if(!alreadyIn&&!key.contains("#")){
try{
ctx.put(REQUEST_WRAPPER_GET_ATTRIBUTE, Boolean.TRUE);
ValueStack stack=ctx.getValueStack();
if(stack!=null){
attribute=stack.findValue(key);
}catch(Exception e){
...
}finally{
ctx.put(REQUEST_WRAPPER_GET_ATTRIBUTE, Boolean.FALSE);
}
}
}
}
return attribute;
}
}
它修改了getAttribute()方法,但除了request之外,获取的response和ServletContext对象依然是原生的,太晚了,明天继续,希望自己能坚持下来