zoukankan      html  css  js  c++  java
  • Java 创建过滤器 解析xml文件

    今天写了一个过滤器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 JDBC (一)
    java 线程(七)等待与唤醒
    java 线程(六)死锁
    java 线程(五)线程安全 Lock接口
    java 线程(四)线程安全 同步方法
    查询计算机启动了多长时间的工具
    查询计算机启动了多长时间的工具
    百度同步盘无法登陆,报错155010,对策
    百度同步盘无法登陆,报错155010,对策
    锁屏工具,解决三星S7迷你锁屏后不能通过指纹解锁的问题
  • 原文地址:https://www.cnblogs.com/1246447850qqcom/p/4802898.html
Copyright © 2011-2022 走看看