zoukankan      html  css  js  c++  java
  • struts2日常

    更新struuts2 的action后不能马上反应,要重启服务器才可以,加上
    <constant name="struts.devMode" value="true"/>
    开启开发模式即可随时更改action。

    struts2核心的内容就是将请求与视图分开

    namespace为空囊括了其他package处理不了的所有其他action

    struts2 每次访问都会new一个新的action对象,不会像struts1一样一直都是同一个对象,会造成线程不同步


    actionsupport已经封装好了一系列action方法,直接extends就可以了。记住这一个action编写方法就可以


    动态方法调用(DMI),可以不再action配置中加上method,直接在地址路径里actionname后加!加方法名就可以直接调用对应action的对应方法。
    也可以用通配符调用,在action的name中用*匹配所有,method用{1}匹配对应*,在result中用{1}或者{2}等匹配对应*。(约定优于配置必须提前约定好)
    首先匹配最精确的,最接近的

    action的三种实现方法,
    action的三种接受参数的方法:
    1.从action中定义好变量,写好getter和setter
    传值的时候是调用的这个两个防范,getter和setter方法名必须跟传入的匹配,变量名可以不匹配,但是没啥意义。
    2.使用预模型,将传入的参数封装到对象中,在类中写好setter和getter,在action中直接写好类的setter和getter就可以直接获取传入的参数。传入的参数与action中新建的类变量名意义,例如,action中新建private User user,传入了user.name和user.pass,就直接可以获取到这个类实例中的对应数据,类的初始化由struts搞定。
    DTO
    3.不常用。采用ModelDriver,交给模型处理。
    其中有一个getModel方法,采用泛型,将数据传给mode,也就是2中的预模型。然后就可以采用set和get了。
    (很明显的是MVC模式,struts2在control中比较核心)

    struts中的constan的属性等等,去哪里查?
    例如i18n等,devmode
    在struts中的doc文件夹中查找。

    接受参数中文处理:
    有中文,就尽量不要用get。
    将struts2.i18n.encoding默认值改为GBK应该就可以了

    数据校验:
    可以使用addFieldError方法和s:fieldError标签简单处理数据校验
    actionError表示action出错的一些信息,fleldError表示一些属性出错的信息
    addFieldError对同一个属性加多个错误,会在error中顺序产生对应的错误数组。
    s:debug标签可以查看一些运行时候的信息等。
    s:property 标签专门取value stack里面的属性
    <s:property value="name">就是取到了名称为name的值

    取得map类型的request,session,application
    1.在构造方法或者execute中取值。
    定义好
    Map request;
    Map session;
    Map application;
    request=(Map)ActionContext.getContext().get("request");
    session=ActionContext.getContext().getSession());
    application=ActionContext.getContext().getApplication();

    1.在前台可以用request.getAttribute()访问到,说明struts2给map类型的这三个对象和真正的httprequest,httpsession,httpapplication建立了对应的关联。
    2.也可以用#key类型访问,在s:bug中有说明

    ActionContext的值可以在s:debug中的stack context中看到

    访问web元素,request等等
    第二种方式(最常用)
    定义成Map<String ,object>泛型方式,就不会有警告了
    实现了requestAware,SessionAware,applicationAware接口
    要求提供setRequset(),setSession(),setApplication()方法。
    实现了这三个接口,就可以接受原始的request,session,application放到对应的map类型中
    这种设计思想成为
    IOC(控制反转,inverse of control),控制权交给他人,他人来完成
    也可以称为DI(依赖注入dependebcy injection):依赖别人注入的值
    第三种
    定义为HttpServletRequest,HttpServletSession,ServletContext类型
    用servletActionContext.getrequest获取就行,session与application同样
    第四种
    定义为HttpServletRequest,HttpServletSession,ServletContext类型
    实现ServletRequestAware接口,有一个setServletRequest()方法
    传入HttpServletRequest request,this.request=request;this.session=request.getsession();
    this.application=session.getServletContext();

    srruts.xml可以用include标签包含其他的xml文件,可以用来分模块

    可以再找不到action或者action错误的时候,设置default-action-ref设置默认的action。这样可以设置错误页面等等常用的提示页面

    result类型(type):
    1.dispatcher(默认)服务器跳转到结果页面,但是不能是action
    服务器端跳转
    2.redirect(跳转到视图)
    客户端跳转,
    3.chain(forward到一个action)
    可以到同一个包或者其他包,
    4.redirectAction 到另外一个action
    5.freemarker
    6.httpheader发一个http头信息
    7.stream 下载
    8.velocity 类似freemarker
    9.xslt 修饰
    10.plaintext 页面源码
    11.tiles 分隔页面为几块
    globalresults:
    加入有许多action有共同结果,可以用global-result类型设置result结果集。

    默认拦截器在struts—default.xml中已经默认配置了

    动态结果集(专门在struts配置文件中的ognl表达式),在action中的${}这个方式读取value stack里面的内容,用来动态确定action中设定的result结果
    带参数结果集,可以在result中加上?t=${}动态带上属性就可以
    一次forward(服务器端的)共享一个值栈,不用传参数
    客户端的话就需要传参数(redirect中)


    action中定义对象接受属性,只有传入有值才会构造这个对象实例。
    例如传入user.age=9,action中定义了user对象才会被action实例化(对象中必须有参数为空的构造方法才可以,要不然对象为null),
    如果不传入user对应的值,则user为null,当然自己手动实例化也可以有值
    总结:domain model可以传参,可以自己new,但是要保持空的构造方法

  • 相关阅读:
    JSP,TOMCAT,JD,mysql环境搭建和连接数据库
    jsp基础学习记录
    将d盘根目录下的troydll.dll插入到ID为4000的进程中
    WebSocket内部原理
    基于流(Comet Streaming)
    短轮询
    DjangoWebSocket
    01WebSocket是什么
    Python实现WebSocket
    WebSocket
  • 原文地址:https://www.cnblogs.com/adaonling/p/5243772.html
Copyright © 2011-2022 走看看