struts 笔记

1、struts.xml:常见标签

<!-- 开发模式 不需要重新启动 -->

<constantname="struts.devMode" value="true" />

<!-- 解决中文问题-->

<constantname="struts.i18n.encoding" value="GBK" />

   <!-- namespace不写,默认为 namespace="",表示在当前工程中任意路径只要存在index就访问该action -->

    <package name="front"namespace="/front" extends="struts-default">

   <!-- 默认class="com.opensymphony.xwork2.ActionSupport"-->

        <actionname="namespace">          

            <!-- 默认:type="dispatcher" 服务器跳转到结果页面-->

            <resultname="success">/Namespace.jsp</result>

        </action>

        <action name="index"class="com.donglin.struts2.front.action.IndexAction2">

            <resultname="success">/ActionIntroduction.jsp</result>

        </action>

    </package>

<!-- 通配符配置:-->  

    <package name="actions"extends="struts-default" namespace="/actions">

        <action name="Student*"class="com.donglin.struts2.front.action.StudentAction"method="{1}">

           <result>/Student{1}_success.jsp</result>

        </action>       

        <action name="*_*"class="com.donglin.struts2.front.action.{1}Action"method="{2}">

           <result>/{1}_{2}_success.jsp</result>

            <!-- {0}_success.jsp -->

        </action>

    </package>

 

2、提交方式:

<formname="f" action="" method="post">

用户名:<input type="text" name="name"/>

密码:<input type="text" name="password"/>  <br/>

<inputtype="button" value="submit1"οnclick="javascript:document.f.action='login/login1';document.f.submit();"/>

<inputtype="button" value="submit2"οnclick="javascript:document.f.action='login/login2';document.f.submit();"/>

 

3、常用取得request,session,application 的方式:

importjava.util.Map;

importorg.apache.struts2.interceptor.ApplicationAware;

importorg.apache.struts2.interceptor.RequestAware;

importorg.apache.struts2.interceptor.SessionAware;

importcom.opensymphony.xwork2.ActionSupport;

 

publicclass LoginAction2 extends ActionSupport implements RequestAware,SessionAware,ApplicationAware {

privateMap<String, Object> request;

privateMap<String, Object> session;

privateMap<String, Object> application;

//DIdependency injection

//IoCinverse of control

publicString execute() {

request.put("r1","r1");

session.put("s1", "s1");                                                                                            

application.put("a1","a1");

returnSUCCESS;

}

@Override

publicvoid setRequest(Map<String, Object> request) {

this.request= request;

}

@Override

publicvoid setSession(Map<String, Object> session) {

this.session= session;

}

@Override

publicvoid setApplication(Map<String, Object> application) {

this.application= application;

}

}

4、Result

1)常用四种类型:

a)dispatcher(默认相当于forward,客户端发起一次请求在服务器端来回跳转,不需要传递参数即可获取;用的是同一个value stack)

b)redirect(相当于重新发起一次请求,如果想要获取上一次参数,需要重新传递)

c)chain(了解)

d)redirectAction(了解)

2)全集结果集

a)global-results(同一个包中共享结果页面)   |  extends(如果需要另一个包中的全局页面需要用extends继承,与java继承类似)

<global-results>

<resultname="mainpage">/main.jsp</result>

</global-results>

<packagename="admin" namespace="/admin"extends="user">

3)动态结果(了解)

a)在action保存一个属性(r),存储具体的结果location

@Override

publicString execute() throws Exception {

if(type== 1) r="/user_success.jsp";

elseif (type == 2) r="/user_error.jsp";

return"success";

}

4)传递参数

a)客户端跳转需要传递                             

b)${}表达式(不是EL),从value stack 取值

5、OGNL

  1. Object Graph Navigation Language(对象图导航语言)
  2. 后台获取参数,user.xxx只有传,才会构造;想初始化domain model,可以自己new,也可以传递参数(必须有空(参数为空)的构造方法)。
  3. 什么时候在stack中有两个action? Chain

6、定义自己的:theme

  1. css(覆盖struts2原来的css)
  2. 覆盖单个文件
  3. 定义自己的theme
  4. 实战: <constant name="struts.ui.theme" value="simple" />
    1. 把所有主题定义为theme  
    2. filederror特殊处理
    3. 自己控制其他标签的展现

6、声明式异常

  1. 在Action中进行异常映射
  2. 在package中进行全局异常映射
  3. 使用继承公用异常映射
  4. Struts2中异常处理由拦截器实现(观察struts-default.xml),实际上struts2大部分功能由拦截器实现。

7、权限安全框架

  1. Spring security

8、ValidationClientAjax


9Struts2-Architecture


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值