0.5h
v1: 讲解了目录
v2 :简历web project
v3 :配置,copy struts3源码中的例子,blank
v4:简单配置,得到输出的/hello.action 、/hello 输出相同
v5:习惯
0.5h
v6
1,定义开发模式,对project进行修改之后不用重新deploy, 在web.xml
下面是4个开发模式常用配置的简介--- <!-- 开启使用开发模式,详细错误提示 --> <!-- <constant name="struts.devMode" value="true"/>--> <!-- 指定每次请求到达,重新加载资源文件 --> <!-- <constant name="struts.i18n.reload" value="true"/>--> <!-- 指定每次配置文件更改后,自动重新加载 --> <!-- <constant name="struts.configuration.xml.reload" value="true"/>--> <!-- 指定XSLT Result使用样式表缓存 --> <!-- <constant name="struts.xslt.nocache" value="true"/>-->
2、建立jar文件对于的源码,以及doc文件(API文档)ruts.devMode" value="true"/>-->
v7 web.xml 自动补齐功能的配置
v8 运行机制
v9 运行机制,可以参考图Struts2.jude
v10
拷贝项目注意事项;
import项目的注意事项
v11
具体视图的返回可以由用户自己定义的Action来决定
具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容
具体Action的实现可以是一个普通的java类,里面有public String execute方法即可
或者实现Action接口
不过最常用的是从ActionSupport继承,好处在于可以直接使用Struts2封装好的方法
v12
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
index.jsp
虽然可以用redirect方式解决,但redirect方式并非必要。
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextRoot方式来拿到webapp的路径)
或者使用myeclipse经常用的,指定basePath
v13
Action执行的时候并不一定要执行execute方法
可以在配置文件中配置Action的时候用method=来指定执行哪个方法 也可以在url地址中动态指定(动态方法调用DMI)(推荐)
添加用户 <a href="<%=context %>/user/userAdd">添加用户</a>添加用户 <a href="<%=context %>/user/user!add">添加用户</a>
前者会产生太多的action,所以不推荐使用
http://localhost:8080/Struts2_0500_ActionMethod/user/userAdd
<package name="user" extends="struts-default" namespace="/user"> <action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add"> <result>/user_add_success.jsp</result> </action>
http://localhost:8080/Struts2_0500_ActionMethod/user/user!add <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> <result>/user_add_success.jsp</result> </action> </package>
v14
使用通配符,将配置量降到最低
添加学生 删除学生
不过,一定要遵守"约定优于配置"的原则
添加老师 删除老师 添加课程 删除课程
<package name="actions" extends="struts-default" namespace="/actions">
<!-- 可以将add和delete简化为下面一个action--> <action name="Student*" class="com.bjsxt.struts2.action.StudentAction" method="{1}"> <result>/Student{1}_success.jsp</result> </action> <action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}"> <result>/{1}_{2}_success.jsp</result> <!-- {0}_success.jsp --> </action> </package>
v15 http://blog.csdn.net/mengxiangyue/article/details/7438679
我们就可以在页面中直接使用这样的方法传递参数了:<a href="user/user!add?name=a&age=8">。这里使用的连接的方式,我们也可以改成使用表单。使用这样的方式,struts会自动将传递过来的参数值赋值给对应的属性。
v16 ModelDriven,用得较少,但体现出基本的MVC模式。
v17
action 属性,domian model, dto, modelDriven,三种接受参数的方法。
其中第二种最多使用。
讲解了查看struts docs.
v18
版本问题
v19
简单数据验证
public String add() {
if(name == null || !name.equals("admin")) {
this.addFieldError("name", "name is error");//加入value stack;
this.addFieldError("name", "name is too long");
return ERROR;
}
return SUCCESS;
}
取值方法
<s:property value="errors.name[0]"/>
关于property :http://hamlzf.iteye.com/blog/1669490
有关于值栈的问题:Struts ValueStack Debug
v20
<default-action-ref name="index"></default-action-ref> <action name="index"> <result>/default.jsp</result> </action>简单数据验证
v21为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts 2对HttpServletRequest、HttpSession和ServletContext进行了封装,构造了三个Map对象来替代这三种对象,在Action中,直接使用HttpServletRequest、HttpSession和ServletContext对应的Map对象来保存和读取数据。
所以,在struts中的HttpservletRequest 的map值会复制到JSP中的httpRequst
V22取得Map类型request,session,application,真实类型 HttpServletRequest, HttpSession, ServletContext的引用: <ol> <li>前三者:依赖于容器</li> <li>前三者:IOC</li> (只用这种) <li>后三者:依赖于容器</li> <li>后三者:IOC</li> </ol>v23v24 默认action ,可以用为设置为默认主页
<default-action-ref name="index"></default-action-ref> <action name="index"> <result>/default.jsp</result> </action>
v25
action总结
v26 小补充
v27 result type
<action name="r1"> <result type="dispatcher">/r1.jsp</result>服务器端跳转</action><action name="r2">
<result type="redirect">/r2.jsp</result>客户端跳转
</action>
<action name="r3">
<result type="chain">r1</result>
</action>
<action name="r4">
<result type="redirectAction">r2</result>
</action>v28 result type 补充
http://blog.csdn.net/calvex880714/article/details/8958019