这是利用action模仿请求Servelet(单例)

作用:

1.减少web.xml代码量

2.将servelet中的代码转移到action中,只需要在action中定义业务逻辑则可。

1.定义一个过滤器

package com.struts2.filter;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.struts2.action.Action;
import com.struts2.action.HelloWorldAction;
import com.struts2.utils.ServletUtils;public class DispatchFilter implements Filter {private HttpServletRequest request;private HttpServletResponse response;@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain arg2) throws IOException, ServletException {/*** 1.先获取HttpServletRequest,HttpServletResponse* 2.获取HelloWorldAction.action中的HelloWorldAction* 3.利用java的反射机制进行调用*/this.request=(HttpServletRequest) request;this.response=(HttpServletResponse) response;String requestURI = this.request.getRequestURI();System.out.println(requestURI);String actionName = ServletUtils.convert(requestURI);//利用java的反射机制调用该方法try {//利用java反射机制创建一个新的HelloWorldAction对象HelloWorldAction action = (HelloWorldAction) Class.forName("com.struts2.action."+actionName).newInstance();String forward = action.execute(this.request, this.response);/*** 2种跳转方法*  *重定向*    request里的参数不起作用*    this.response.sendRedirect(jsp页面)*  *转发*    放在  request中的值可以取出来*    this.request.getRequestDispatcher("index.jsp").forward(this.request, this.response);*  */this.request.getRequestDispatcher("index.jsp").forward(this.request, this.response);} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}@Overridepublic void init(FilterConfig arg0) throws ServletException {}}

 

web.xml中配置为:

  <filter><filter-name>DispatchFilter</filter-name><filter-class>com.struts2.filter.DispatchFilter</filter-class></filter><filter-mapping><filter-name>DispatchFilter</filter-name><url-pattern>*.action</url-pattern></filter-mapping>

当接受到一个请求后

    <a href="HelloWorldAction.action">请求一个action</a>

  当过滤器接受到一个请求以后,进行过滤

1.先取出请求uri.

2.根据java反射机制取出action

package com.struts2.action;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class HelloWorldAction implements Action {@Overridepublic String execute(HttpServletRequest request,HttpServletResponse response) {System.out.println("Hello World Struts2");return "index.jsp";}}

3.取出action以后,就可以执行action中的方法

4.利用request/response转发

/*** 2种跳转方法*  *重定向*      request里的参数不起作用*    this.response.sendRedirect(jsp页面)*  *转发*    放在  request中的值可以取出来*    this.request.getRequestDispatcher("index.jsp").forward(this.request, this.response);*  */this.request.getRequestDispatcher("index.jsp").forward(this.request, this.response); // 这句话的意思是,上面返回了一个字符串"index.jsp",那么这里就是去寻找这个index.jsp,并将request和response放进去。

 

转载于:https://www.cnblogs.com/callyblog/p/7481847.html

Struts2 Servelet重构相关推荐

  1. jQuery学习之:Validation表单验证插件

    http://polaris.blog.51cto.com/1146394/258781/ 最近由于公司决定使用AJAX + Struts2来重构项目,让我仔细研究一下这两个,然后集中给同事讲讲,让每 ...

  2. idea创建Struts2 项目并运行

    Struts2的框架已经是很老的框架了 但是有老的项目使用的还是SSH架构,而且很难重构 所以还是需要了解一下的 New-Project 选择Web Application – Struts2 有三种 ...

  3. struts2拦截器的实现原理及源码剖析

    拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理.同时,拦截器也可以让你将通用的 ...

  4. 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式

    现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2,Spring,Hibernate.似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和 ...

  5. struts2+kindeditor4.0.5的上传图片的实现

    今天开始用kindeditor,主要是因为kindeditor界面干净,API齐全.但上传图片的时候遇到各种问题,我就来个各种解决.kindeditor中jsp的demo是用纯jsp实现,如果你的项目 ...

  6. kindeditor图片上传 struts2实现

    一.kindeditor以及struts2部署搭建不再赘述,如须要请參考kindeditor用法 Struts2框架搭建 二.kindeditor图片上传所依赖jar包在kindeditor\jsp\ ...

  7. Struts2 表单和非表单标签

    学习内容 Struts 2表单标签 Struts 2非表单标签 能力目标 熟练使用Struts 2表单标签开发表单 熟练使用Struts 2非表单标签 本章简介 上一章讲述了ognl和Struts2标 ...

  8. java之struts2的action的创建方式

    首先action是用来处理请求的, 这里struts2中的action的3中创建方式. 1.无侵入性的创建方式. 无侵入性:使用第三方的框架,不直接继承或实现第三方提供的类或者接口就说是无侵入性的. ...

  9. Struts2的简单使用

    一.准备工作及实例 1.解压struts-2.1.6-all.zip apps目录:struts2自带的例子程序 docs目录:官方文档. lib 目录:存放所有jar文件. Src 目录:源文件存放 ...

最新文章

  1. java 中和_java中的和=是什么意思
  2. 实战解读增长黑客在 B 端业务中的应用
  3. 获取某个地址的utxo的三种方法
  4. 抓取epsg.io的内容
  5. vss中项目与服务器断开绑定之后进行重新绑定得方法
  6. 我常用的15 款开发工具!
  7. Leetcode 304.二维区域和检索-矩阵不可变
  8. Veritas Backup Exec 21.3 Multilingual (Windows)
  9. MAC下的SVN工具
  10. 计算两个日期之间,相差多少天C语言详解
  11. Matlab获取线粒体序列及核苷酸初步分析
  12. 数字藏品文博周将至,拙政园主题数字藏品全网首发
  13. QQ动态表情包如何制作, 制作软件哪个好
  14. 【沐风老师】3dMax Gyroid Minimal Surface 极小曲面建模详细教程
  15. babel-预设和插件
  16. 可编程数据平面(论文阅读)
  17. NKOJ 4247 老蒋的数列(乱搞)
  18. 成都百知教育跨境电商人物专访| Shopee大卖“朔风”
  19. 百人计划 图形1.4 PC手机图形API介绍
  20. vue实现Cnode具体有axios分页请求 | filters(过滤器)解决时间转秒前 分钟前 小时前 月前 年前

热门文章

  1. 小目标神器!TPH-YOLOv5:将Transformer预测加载Yolov5!
  2. 人脸检测,微软提出用RNN代替CNN
  3. Github | 微软-计算机视觉最佳实践、代码示例和相关文档
  4. 我喜欢阅读和计算机英语,关于自考中的计算机专业
  5. jav中什么是组织java程序_Java程序的执行过程中用到一套JDK工具,其中javaprof.exe是指()。A.Java调试器B.Java剖析工具C.Jav...
  6. 深度强化学习-DDPG算法原理和实现
  7. 数据结构(十四)归并排序
  8. 部编版是什么版本_教材部编版和人教版的区别
  9. android 读取xlsx文件,android怎么解析表格.xlsx文件
  10. 2019年信息安全工程师备考技巧