今天写了一个过滤器demo,现在是解析actions.xml文件,得到action中的业务规则;不需要导入任何jar包

ActionFilter过滤器类:

package accp.com.xh.utils;
import java.io.IOException;
import java.io.InputStream;
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 javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
* 创建过滤器
* 前端控制器 接收所有参数;设置编码的格式;做登陆的控制拦截;分发请求
* @author xiaohua
*
*/
public class ActionFilter implements Filter{ /**
* tomcat启动时执行,只会执行一次;
* 解析配置的规则文件 :actions.xml
*/
@Override
public void init(FilterConfig config) throws ServletException {
try {
//得到action.xml文件
InputStream is = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("actions.xml");
//解析xml文件
Document document = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().parse(is);
//获取action标签元素:<action name="pro_.*" class="XXXXXAction">
NodeList nodeList = document.getElementsByTagName("action");
for(int i = 0 ;i<nodeList.getLength();i++){
//解析action标签元素
Element actionElement = (Element)nodeList.item(i);
String actionName = actionElement.getAttribute("name");
String actionClass = actionElement.getAttribute("class");
System.out.println("actionName属性:"+actionName);
System.out.println("actionClass属性:"+actionClass);
//获取result 标签元素
//<result name="reload" type="redirect">product</result>
NodeList resultList = actionElement.getElementsByTagName("result");
for(int j=0;j<resultList.getLength();j++){
Element resultEl =(Element) resultList.item(j);
String resultName = resultEl.getAttribute("name");//得到action.xml中的result name属性
String resultType = resultEl.getAttribute("type");
System.out.println("name属性:"+resultName);
System.out.println("type属性:"+resultType);
} }
} catch (Exception e) {
throw new RuntimeException("解析action.xml文件出错:"+e.getMessage());
}
} /**
* 每次请求都会执行的过滤器 ;
* 根据请求的URL 找出对应处理的XXXaction,判断哪个方法处理
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req =(HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
// resp.sendRedirect("");
} /**
* 正常停止tomcat的时候执行,只会执行一次;
* 销毁资源的操作,
*/
@Override
public void destroy() { } }

actions.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 定义业务规则 -->
<actions>
<action name="pro_.*" class="XXXXXAction">
<result name="list">/WEB-INF/view/list.jsp</result>
<result name="edit" type="redirect">/WEB-INF/view/edit.jsp</result>
<result name="reload" type="redirect">product</result>
</action>
</actions>

启动服务器时输出得到的元素值:

当然别忘记了在web.xml中配置映射指定到ActionFilter类中去;这样启动服务时才会有所输出。

Java 创建过滤器 解析xml文件的更多相关文章

  1. 使用dom4j创建和解析xml文件

    使用dom4j创建和解析xml文件 在项目开发中,我们经常会遇到xml文件的创建和解析从别人接口得到的xml文件,而我们最常使用的组件是dom4j. 下面我就以代码来讲解一下如何使用dom4j来创建x ...

  2. Java是如何解析xml文件的(DOM)

    Java解析xml文件 在Java程序中读取xml文件的过程也称为"解析xml文件": 解析的目的: 获取 节点名和节点值 获取 属性名.属性值. 四中解析方式: DOM SAX ...

  3. JAVA使用SAX解析XML文件

    在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...

  4. java使用dom4j解析xml文件

    关于xml的知识,及作用什么的就不说了,直接解释如何使用dom4j解析.假如有如下xml: dom4j解析xml其实很简单,只要你有点java基础,知道xml文件.结合下面的xml文件和java代码, ...

  5. PHP使用SimpleElement创建和解析xml文件

    <!-- 使用SimpleXMLElement生成xml文件 --><?php//生成一个xml文件 //xml字符串$_xml = <<<_xml<?xml ...

  6. java使用document解析xml文件

    准备工作: 1创建java工程 2创建xml文档. 完成后看下面代码: import org.w3c.dom.*; import javax.xml.parsers.DocumentBuilder; ...

  7. 使用libxml2创建和解析xml文件

    毕业设计需要用到xml文件来组织和存放数据, 对于Linux环境下,有libxml2可供使用. 经过一段时间查询文档和网站, 基本掌握创建xml文档和解析xml的操作, 简单做一下记录. 创建xml ...

  8. PHP使用 DOMDocument创建和解析xml文件

    <!-- DOMDocument生成XML文件 --><?php//声明一个DOMDocument对象$_doc=new DOMDocument('1.0', 'utf-8'); / ...

  9. java 使用SAX解析xml 文件

    http://www.cnblogs.com/allenzheng/archive/2012/12/01/2797196.html 为了学习方便,忘博主勿究

随机推荐

  1. Visual Studio: 暂时?绕过 fatal error C1083: Cannot open precompiled header file

    可以使用右键点击项目工程中的该cpp文件,选择setting,在c/c++栏,选择PreCompiled headers,然后设置第一选项,选择不使用预编译头.

  2. session过期问题

    php中session过期时间设置及回收机制详解: 修改php中的session过期时间可以修改php配置文件php.ini中的session.gc_maxlifetime即可. 当php每发出一次请 ...

  3. BZOJ3172[Tjoi2013]单词 题解

    题目大意: 求一些字符串在一段文章中出现的次数. 思路: AC自动机的经典应用,建完自动机直接将队列里的元素调Fail指针记录即可. 代码: #include<cstdio> #inclu ...

  4. android 百度地图 通过剪裁图片添加 Marker

    初始化百度地图: private void initViews() { mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mM ...

  5. chrome快捷键,让开发更快捷:

    9:18 2015/12/9chrome快捷键,让开发更快捷:部分:按住 Ctrl 键,然后点击链接 从后台在新标签页中打开链接,但您仍停留在当 前标签页中 按住 Ctrl+Shift 键,然后点击链 ...

  6. POJ 1321 简单dfs

    1.POJ 1321  棋盘问题 2.总结: 题意:给定棋盘上放k个棋子,要求同行同列都不重. #include<iostream> #include<cstring> #in ...

  7. 配置安装CocoPods后进行 项目基本配置

    配置安装CocoPods后进行 项目基本配置总结 1)终端在文件根目录下输入 $ touch Podfile 创建一个空白的Podfile文件 2)然后在使用编辑器打开Podfile文件进行需要配置的 ...

  8. NHibernate 基本配置 (第一篇)

    使用NHibernate最重要的一步就是配置,如果连NHibernate都还没有跑的起来,谈何学习.今天就来详解一下NHibernate的配置. 一.NHibernate基本配置 NHibernate ...

  9. 最长递增子序列 O(NlogN)算法

    转自:点击打开链接 最长递增子序列,Longest Increasing Subsequence 下面我们简记为 LIS. 排序+LCS算法 以及 DP算法就忽略了,这两个太容易理解了. 假设存在一个 ...

  10. [CareerCup] 17.14 Unconcatenate Words 断词

    17.14 Oh, no! You have just completed a lengthy document when you have an unfortunate Find/Replace m ...