今天写了一个过滤器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. iOS学习32之UIKit框架-可视化编程-XIB

    1. Interface Builder 可视化编程 1> 概述 GUI : 图形用户界面(Graphical User Interface, 简称GUI, 又称图形化界面) 是指采用图形方式显 ...

  2. Ext中Grid重新load设置URL

    一.前言    Extjs中grid网格有时候需要重新加载,加载的时候对应不同的URL,什么情况出现:有需要我们在添加附件的时候,添加完成了附件,需要把另一个show添加的数据重新加载到grid中,而 ...

  3. Andriod开发技巧——Fragment的懒加载

    我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个 fragment都需要去加载数据,或从本地加载,或从网络加载,那么 ...

  4. sed 格式化输出df -h

    df -h|sed '1d;/ /!N;s/\n//;s/ \+/ /;' 1d——————删除第一行 / /!N——————没有空格的行执行N 例子中没有空格的行 /dev/mapper/vg_ds ...

  5. 关于netstat

    netstat 命令是 linux 下一个非常有用的命令,顾名思义,其作用是查询当前的网络状态. 以最常用的查询 TCP 连接状态为例 netstat -an|awk '/tcp/ {print $6 ...

  6. IOS学习笔记25—HTTP操作之ASIHTTPRequest

    IOS学习笔记25—HTTP操作之ASIHTTPRequest 分类: iOS2012-08-12 10:04 7734人阅读 评论(3) 收藏 举报 iosios5网络wrapper框架新浪微博 A ...

  7. Nginx_查看并发连接数

    通过查看Nginx的并发连接,我们可以更清除的知道网站的负载情况.Nginx并发查看有两种方法(之所以这么说,是因为笔者只知道两种),一种是通过 web界面,一种是通过命令,web查看要比命令查看显示 ...

  8. Linux_MySql安装

    1.卸载原始mysql-lib sudo rpm -e --nodeps mysql-libs-xx 2.yum安装mysql-server sudo yum -y install mysql -se ...

  9. 简单的自定义Adapter

    import android.content.Context; import android.view.LayoutInflater; import android.view.View; import ...

  10. 常用JS表单验证方法

    /*输入:str返回:如果全是空返回true,否则返回false*/function isNull(str) {if (str == "") return true;var reg ...