模拟Struts2框架Action的实现
1.具体项目结构如下:
aaarticlea/png;base64,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" alt="" />
2.配置web.xml
<filter>
<filter-name>ActionFilter</filter-name>
<!-- 过滤器具体实现类 -->
<filter-class>com.gxxy.action.web.filter.ActionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ActionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.actions.xml
<actions>
<action name="list" class="com.gxxy.action.oa.web.ListAction" method="list">
<target name="listing" type="forword" >/WEB-INF/index.jsp</target>
</action>
</actions>
4.Filter具体实现类
--->加载actions.xml配置文件
/**
* 加载配置文件 actions.xml
*
* @return
*/
private Document getDoucment() {
//注意:Document 为org.w3c.dom.Document包中的;
Document doucment = null;
InputStream resourceAsStream = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("actions.xml");
try {
doucment = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(resourceAsStream);
} catch (Exception e) {
e.printStackTrace();
}
return doucment;
}
-->当过滤器初始化的时候,加载出actions.xml里的内容
/**
* 初始化
*/
private Map<String, ActionConfig> map = new HashMap<>();
public void init(FilterConfig arg0) throws ServletException {
Document document = getDoucment();
NodeList elementsByTagName = document.getElementsByTagName("action");
//循环取出action标签中的内容
for (int i = 0; i < elementsByTagName.getLength(); i++) {
// 解析action元素
Element action = (Element) elementsByTagName.item(i);
String name = action.getAttribute("name");
String cls = action.getAttribute("class");
String method = action.getAttribute("method");
//将action中加载出的name,class,method 放到ActionConfig对象中
ActionConfig acticonfig = new ActionConfig(name, method, cls);
//将Action对象添加到map中,key为action中的name
map.put(name, acticonfig);
// 解析target元素
NodeList target = document.getElementsByTagName("target");
Map<String, TargetConfig> tarmap = new HashMap<>();
//循环取出target标签中的内容
for (int j = 0; j < target.getLength(); j++) {
Element tar = (Element) target.item(j);
String tarname = tar.getAttribute("name");
String type = tar.getAttribute("type");
String textContent = tar.getTextContent();
//将action中target加载出的name,type及文本内容放到TargetConfig对象中
TargetConfig tarconfig = new TargetConfig(tarname, type, textContent);
//将tarconfig对象添加到tarmap中,key为target中的tarname;
tarmap.put(tarname, tarconfig);
}
acticonfig.setTar(tarmap);
}
}
-->具体的doFilter的实现
public void doFilter(ServletRequest request, ServletResponse response, FilterChain arg2)
throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
ActionContext.request = req;
ActionContext.response = resp;
//获取到请求的URI
String url = req.getRequestURI();
//将取到的URI用"/"分隔开
String[] urls = url.split("/");
//得到请求路径里"/"最后的元素
String cmd = urls[urls.length - 1];
/*
* if ("list".equals(cmd)) { ListAction listAction = new ListAction();
* listAction.list(); }
*/
//public boolean containsKey(Object key)如果此映射包含对于指定键的映射关系,则返回 true。
//如果请求的内容在map中
if(map.containsKey(cmd)){
ActionConfig actionConfig = map.get(cmd);
try {
//通过反射根据类的全限定名称找到这个类
Class class1 = Class.forName(actionConfig.getCls());
//实例化这个类
Object interfaces = class1.newInstance();
//根据配置里的方法名通过反射找到类中的那个方法
Method method = class1.getMethod(actionConfig.getMethod());
//String invoke为具体实现方法里面的返回值
String invoke = (String) method.invoke(interfaces);
//调用Action中的Target map属性
Map<String, TargetConfig> tarmap = actionConfig.getTar();
//如果方法的返回值在target标签中有
if(tarmap.containsKey(invoke)){
TargetConfig targetConfig = tarmap.get(invoke);
//取出type
String type = targetConfig.getType();
//取出标签的文本内容
String target = targetConfig.getTarget();
//如果type是"forward",那么请求转发,否则重定向
if("forword".equals(type)){
req.getRequestDispatcher(target).forward(req, resp);
}else{
resp.sendRedirect(target);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
5.config包为Action对象和target对象包
--->ActinConfig对象的字段:
public class ActionConfig {
//action中的name
private String name;
//action中的方法
private String method;
//action中的class
private String cls;
//action中的target标签
private Map<String,TargetConfig> tar;
--->TargetConfig对象的字段
public class TargetConfig {
//target标签中的name
private String name;
//target标签中的type
private String type;
//target标签中的文本内容
private String target;
6.context包中ActionContext的具体实现
public class ActionContext {
public static HttpServletRequest request;
public static HttpServletResponse response; }
模拟Struts2框架Action的实现的更多相关文章
- JavaWeb_(Struts2框架)Action中struts-default下result的各种转发类型
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- struts2框架-----Action
控制器Action Action对象是struts2框架的核心,每个URL映射到特定的Action,其提供处理来自用户的请求所需要的处理逻辑.Action有两个重要的功能,即将数据从请求传递到视图和协 ...
- Struts2框架action层学习心得体会
在struts2框架中,当action处理完之后,就应该向用户返回结果信息,该任务被分为两部分:结果类型和结果本身. 结果类型提供了返回给用户信息类型的实现细节.结果类型通常在Struts2中就已预定 ...
- Struts2框架action路径问题心得----》页面url请求怎么找action
Struts2 页面url请求怎么找action Struts2 页面url请求如何找action 1.我们使用最原始的方法去查找action,不同注解. struts.xml文件先配置 <!- ...
- JavaWeb_(Struts2框架)Struts创建Action的三种方式
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- Spring框架+Struts2框架第一次整合
1:Spring框架和Struts2框架如何整合??? Spring 负责对象创建 Struts2 用Action处理请求 2:Spring与Struts2框架整合的关键点: 让struts2框架ac ...
- JavaWeb_(Struts2框架)拦截器interceptor
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- JavaWeb_(Struts2框架)Ognl小案例查询帖子
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
- JavaWeb_(Struts2框架)参数传递之接收参数与传递参数
此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...
随机推荐
- jQuery插件Flot实战Demo
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- cookie记忆换肤功能实战Demo
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- Struts2文件的下载
1.下载登录页面download.jsp 1: <%@ page language="java" contentType="text/html; charset=U ...
- Qt入门之基础篇(1):Qt4及Qt5的下载与安装
转载请注明出处:CN_Simo. 导语: Qt是一个跨平台的C++图形界面应用程序框架.它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序.Qt很容易扩展,并且 ...
- SSM框架注解整合
一.web应用环境 1.ServletContext 对于一个web应用,其部署在web容器(比如:tomcat)中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext, ...
- PHP面向对象(OOP)----分页类
> 同验证码类,分页也是在个人博客,论坛等网站中不可缺少的方式,通过分页可以在一个界面展示固定条数的数据,而不至于将所有数据全部罗列到一起,实现分页的原理其实就是对数据库查询输出加了一个limi ...
- 二维码 iOS
一:生成二维码 1.根据一个字符串生成一个二维码 根据 #import <CoreImage/CoreImage.h>这个框架写的 在按钮的点击事件写 @interface ViewCo ...
- 封装keyframes插件
模仿jquery,使用简单,自动添加浏览器前缀 var keyframes = new SHBKerframes(); keyframes.define([{ name:'myAnimate', 0% ...
- ACM 海贼王之伟大航路(深搜剪枝)
"我是要成为海贼王的男人!" 路飞他们伟大航路行程的起点是罗格镇,终点是拉夫德鲁(那里藏匿着"唯一的大秘宝"--ONE PIECE).而航程中间,则是各式各样的 ...
- object c入门
无意间看到Object C编写的程序,感觉蛮有意思的,记载下来,慢慢品味,也许会有用得上的时候.吼吼~~ 大部分有一点其他平台开发基础的初学者看到XCode,第一感想是磨拳擦掌,看到 Interfac ...