其实学习struts等框架,不仅要知道怎么用,我们还应该多去看看框架的源码,知道为什么可以这样使用,凡事都知道为什么,以这样的态度学习,我们才能更加深一步的理解原理好实现方式,本类博客主要是个人学习总结。如有不足之处,请多多指教,以便我能更快的进步。!!!!

1、获取reqesut和response对象方法

Map request = (Map)ActionContext.getContext().get("request");
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse()

  

实现ServletRequestAware接口通过IOC机制注入Request对象
public class BaseAction<T> extends ActionSupport implements ModelDriven<T>,ServletRequestAware{

protected HttpServletRequest request

@Override
public void setServletRequest(HttpServletRequest arg0) {
this.request=arg0;
} }

2、前后台传值

这里主要是实现ModelDriven接口,代码如下:

public class BaseAction<T> extends ActionSupport implements ModelDriven<T> {
protected T model;
@Override
public T getModel() {
return model;
} }

如果页面中input标签的name和javabean中的属性一一对应,那么只需要这样,后台就可以把值注入到实体对象中。知道了是怎么使用的,但是我们还应该知道它的原理是什么!!!

实现ModelDriven就可以注入参数,主要是struts框架中有ModelDrivenInterceptor,打开源代码,可以在源代码中看到ModelDriven的拦截器和实现代码,继续阅读struts的源代码,在下面的一段源代码中,struts拦截器把参数放入值栈中。这样就可以实现参数的注入了。再想想前台和后台的传值方法,也就不难理解他的原理啦!!!

public class ModelDrivenInterceptor extends AbstractInterceptor {

    @Override
public String intercept(ActionInvocation invocation) throws Exception {
Object action = invocation.getAction(); if (action instanceof ModelDriven) {
ModelDriven modelDriven = (ModelDriven) action;
ValueStack stack = invocation.getStack();
Object model = modelDriven.getModel();
if (model != null) {
stack.push(model);
}
if (refreshModelBeforeResult) {
invocation.addPreResultListener(new RefreshModelBeforeResult(modelDriven, model));
}
}
return invocation.invoke();
}
}

3、PreResultListener 接口

在struts框架中,拦截器分为before、after和PreResultListener 拦截器。after拦截器是指在拦截器中定义的代码,它们存在于invocation.invoke()代码执行之前,顺序执行;after拦截,是指在拦截器中定义的代码,它们存在于invocation.invoke()代码执行之后;有的时候,before拦截和after拦截对我们来说还是满足不了我们的需求,因为我们需要在Action执行完之后,还没有回到视图时执行一些操作。这就可以在Action的方法中进行注册,使用ActionInvocation.addPreResulteListener(),代码使用如下:

     ActionInvocation actionInvocation = ActionContext.getContext().getActionInvocation();
actionInvocation.addPreResultListener(new PreResultListener(){
public void beforeResult(ActionInvocation action,String resultCode){
//TO-DO
}
});

  

SSH总结(一)的更多相关文章

  1. [linux]阿里云主机的免登陆安全SSH配置与思考

    公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...

  2. SSH实战 · 唯唯乐购项目(上)

    前台需求分析 一:用户模块 注册 前台JS校验 使用AJAX完成对用户名(邮箱)的异步校验 后台Struts2校验 验证码 发送激活邮件 将用户信息存入到数据库 激活 点击激活邮件中的链接完成激活 根 ...

  3. 记录一则Linux SSH的互信配置过程

    需求:四台Linux主机,IP地址为192.168.10.10/11/12/13,配置登录用户的互信 1.各节点ssh-keygen生成RSA密钥和公钥 ssh-keygen -q -t rsa -N ...

  4. SSH免手动输入密码和设置代理

    通过使用sshpass将密码写入命令里,直接执行,免去手动密码输入的步骤命令如下: sshpass -p password_abc ssh user_abc@ssh_host -p ssh_port ...

  5. github免输用户名/密码SSH登录的配置

    从github上获取的,自己整理了下,以备后用. Generating an SSH key mac windows SSH keys are a way to identify trusted co ...

  6. Linux 利用Google Authenticator实现ssh登录双因素认证

    1.介绍 双因素认证:双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产生的一 ...

  7. mac下生成ssh keys 并上传github仓储

    使用github仓储需要本机生成一个公钥key 添加到自己的git账户SSH keys中   mac 生成方法:   1. 打开终端 输入   ssh-keygen 然后系统提示输入文件保存位置等信息 ...

  8. Linux实战教学笔记05:远程SSH连接服务与基本排错(新手扫盲篇)

    第五节 远程SSH连接服务与基本排错 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 远程连接LInux系统管理 1.1 为什么要远程连接Linux系统 在实际的工作场景中,虚拟机界面或物理 ...

  9. 树莓派3B的食用方法-1(装系统 网线ssh连接)

    首先要有一个树莓派3B , 在某宝买就行, 这东西基本上找到假货都难,另外国产和英国也没什么差别,差不多哪个便宜买哪个就行. 不要买店家的套餐,一个是配的东西有些不需要,有的质量也不好. 提示:除了G ...

  10. linux启动SSH及开机自动启动

    本文地址 分享提纲: 1.查看是否启动 2. 设置自动启动 1.[查看是否启动] 启动SSH服务 “/etc/init.d/sshd start”.然后用netstat -antulp | grep ...

随机推荐

  1. 设计工具-MindManager(思维导图)

    1,百度百科 http://baike.baidu.com/view/30054.htm?from_id=7153629&type=syn&fromtitle=MindManager& ...

  2. CompileGLShader

    //-----------------------------------------------------------------------------// Purpose: Compiles ...

  3. http://jingyan.baidu.com/article/dca1fa6fa07000f1a44052f6.html

    http://jingyan.baidu.com/article/dca1fa6fa07000f1a44052f6.html

  4. pip install py-stringsimjoin error: INCLUDE environment variable is empty

    在用pip install py-stringsimjoin的时候报错error: INCLUDE environment variable is empty,后来在网上搜索下了说是需要下载安装VCF ...

  5. Ubuntu Tomcat

    启动80端口: 修改server.xml  Connector port=80 修改/etc/default/tomcat  AUTHBIND=yes 查看/etc/authbind/byport/下 ...

  6. HBase集群的安装部署

    HBase的安装是是建立在hadoop和zookeeper集群之上的 安装的步骤跟伪分布式差不多,只是修改了一些配置文件 解压缩.重命名.设置环境变量 把hbase-0.94.2-security.t ...

  7. window7下面安装pear.pchar--wamp环境

    准备工作: Wamp php版本:5.3.10 1.下载pear.phar 2.设置php路径的path环境变量 开始安装 1.以管理员身份运行cmd 2.进入pear.phar的所在目录 3.命令行 ...

  8. C#趣味程序---求两个数的最大公约数和最小公倍数

    using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Cons ...

  9. 使用 Apple Configurator 2 获取ipa文件

    如今很多人想要获取到App Store上的包却苦于无奈,先在要把App Store上的包载下来获取ipa,最直接的就是从手机设备上导出了,但是手机必须要9.0以下才可以导出,鄙人手中正好有公司的测试机 ...

  10. 【Java】Java_14 循环结构

    循环结构 当型:当P条件成立时(T),反复执行A,直到P为“假”时才停止循环. 直到型:先执行A, 再判断P,若为T,再执行A,如此反复,直到P为F. 1.While循环 while循环的基本格式和流 ...