一 strucs是实现了基于JavaEEWeb应用的MVC设计模式的应用框架;
MVC这个词必须好好解释一下
M:model(模型) V: view(视图) C: Controller(控制器)
特点:
功能:获取参数
调用Model处理
响应内容到客户端
以下是一个关于struts2的xml文件详解
<struts>
<!-- 是否支持动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<!-- 卡发模式:true表示卡发阶段 -->
<constant name="struts.devMode" value="true" />
<!-- 包:
name="default" 包名
namespace="/" 访问路径 这"/"表示现对路径
extends="struts-default" 继承自struts-default
-->
<package name="default" namespace="/" extends="struts-default">
<!-- 配置控制器,在没有配置class属性的时候,当前这个hello这个action是有struts提供的默认的
控制器,它只有一个方法execute(),返回"success;
-->
<action name="index">
<result name="success">/hello.jsp</result>
</action>
<action name="first" class="com.yc.web.action.FirstAction">
<result name="hello">/hello.jsp</result>
<result name="bye">/bye.jsp</result>
</action>
</package>
</struts>
二 对于struts的返回值(Action的创建)
(1)自己自定义返回值
(2)实现Action接口
如 Action.SUCCESS;Action.NONE
在struts.xml可以直接用success 或 none 来接收
(3)继承ActionSupport (ActionSupport实现Action接口)
如 Action.SUCCESS;Action.NONE
在struts.xml可以直接用success 或 none 来接收
三 对于struts的三种传参方式
强调:生命周期: 构造方法-》setXXX()/getXXX()方法 -> execute()方法
(1)以参数的形式传参
传的部分:
<input type=“xx" name="参数名">
接的部分
在Action中直接提供参数的set方法
(2)以对象的形式进行传参
传的部分:
<input type=“xx" name="对象名.参数名">
接的部分
a.创建这个接收参数的注入类
b.在Action中定义这个类属性,并提供get和set两个方法
(3) 以struts提供的ModelDriven进行传参
传的部分:
<input type="xx" name="参数名">
接的部分:
class XXXAction implements ModelDriven{
public Object getModel(){
return 对象名;
}
}
四 struts的作用域(对象的操作)
1 使用RequestAware,SessionAware,ApplicationAware接口,来注入三个Map
2 通过ServletActionContext取HttpServletRequest对象
还有就是以map的形式去表示上面的两种方式
eg:
//获取标准的j2ee作用域对象
private Map<String,Object> request;
private Map<String,Object> application;
private Map<String,Object> session;
public StudentAction(){
request=(Map<String,Object>)ActionContext.getContext().get("request");
session=ActionContext.getContext().getSession();
application=ActionContext.getContext().getApplication();
}
public String execute(){
//将这个学生保存到request,session,application
request.put("student",student);
session.put("student", student);
application.put("student", student);
return Action.SUCCESS;
}
通过ServletRequestAware接口,来注入HttpServletRequest对象接口
eg:
request=ServletActionContext.getRequest();
response=ServletActionContext.getResponse();
session=request.getSession();
application=session.getServletContext();
五 通配符的表示
eg:
<action name="student_*" class="com.yc.web.actions.StudentAction" method="{1}"></action>
*表示0个或多个,有点类似于正则表达式
总结:struts 是多实例的,会每次都创建一次,所以类似DBhelp的属性设为全局就没问题
而Servlet的创建是单实例的