一 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接口,来注入三个Map2 通过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的创建是单实例的