Java 创建过滤器 解析xml文件

时间:2023-03-08 15:23:13
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>

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

Java 创建过滤器 解析xml文件

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