今天写了一个过滤器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. Python: 常用list, string处理功能

    #1. keep strings in double quote as one word when split string to words #e.g. str = ‘a b "is si ...

  2. ccc 函数中写函数

    attackOnTarget: function (atkDir, targetPos) { var self = this; let deg = cc.radiansToDegrees(cc.pAn ...

  3. HTTP请求头详解

    http://blog.csdn.net/kfanning/article/details/6062118 HTTP由两部分组成:请求和响应.当你在Web浏览器中输入一个URL时,浏览 器将根据你的要 ...

  4. input type=checkbox checked disabled

    input type=checkbox checked disabled 禁用无法提交!

  5. 20145304 Java第三周学习报告

    20145304 <Java程序设计>第三周学习总结 教材学习内容总结 1.定义类: 类定义时使用class关键词,建立实例要使用new关键词. 代码如下: /*定义类 书上例子 衣服的型 ...

  6. topcoder SRM 618 DIV2 MovingRooksDiv2

    一开始Y1,Y2两个参数看不懂,再看一遍题目后才知道,vector<int>索引代表是行数,值代表的是列 此题数据量不大,直接深度搜索即可 注意这里深度搜索的访问标识不是以前的索引和元素, ...

  7. Codeforces Round #245 (Div. 2) B - Balls Game

    暴利搜索即可 #include <iostream> #include <vector> #include <iostream> using namespace s ...

  8. ACM 蛇形填数

    蛇形填数 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为:10 11 12 19 16 1 ...

  9. NOIP 2005 青蛙过河

    做题记录:2016-08-10 21:58:09 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都 ...

  10. 【POJ】3974 Palindrome

    http://poj.org/problem?id=3974 题意:求s的最长回文串.(|s|<=1000000) #include <cstdio> #include <cs ...