模仿struts

StrutsCode文件

 

package com.util;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class StrutsCode {

@Test
public String code(String name){
try {
//获取配置文件
InputStream is = this.getClass().getClassLoader().getResourceAsStream("struts.xml");
//获取dom工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//获取解析器
DocumentBuilder builder = factory.newDocumentBuilder();
//获取xml的文件流
Document document = builder.parse(is);
//获取跟节点
Element element = document.getDocumentElement();
//获取子节点
NodeList son = element.getElementsByTagName("action");
for (int i = 0; i < son.getLength(); i++) {
Element el = (Element) son.item(i);
if(name.equals(el.getAttribute("name"))){
//通过反射获取类
Class cl = Class.forName(el.getAttribute("class"));
//实例化对象
Object obj = cl.newInstance();
//获取对象的方法
Method me = cl.getDeclaredMethod(el.getAttribute("method"));
//运行方法得到返回值
String result = (String) me.invoke(obj);
//获取子节点
NodeList elSon = el.getElementsByTagName("result");
for (int j = 0; j < elSon.getLength(); j++) {
Element elel = (Element) elSon.item(j);
if(result.equals(elel.getAttribute("name"))){
//获取节点内容
return elel.getTextContent();
}
}
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return "";
}
}

 

 

StrutsFilter文件

 

package com.util;


import java.io.IOException;

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;


public class StrutsFilter implements javax.servlet.Filter {

public void destroy() {

}

public void doFilter(ServletRequest req, ServletResponse res,
FilterChain arg2) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
//uri就是获取到的连接地址!
String uri = request.getRequestURI();
String[] method = uri.split("/");
String name = method[method.length-1];
System.out.println(name);
if(name.length()>0){
String result = new StrutsCode().code(name);
request.getRequestDispatcher(result.trim()).forward(request, response);
}
}

public void init(FilterConfig arg0) throws ServletException {

}

}

 

 

action文件

 

package com.action;

public class StrutsDom {


public String login(){
System.out.println("登录成功");
return "success";
}

public String add(){
System.out.println("注册成功");
return "success";
}

}

 

struts.xml

 

<struts>
<package>
<action name="login" class="com.action.StrutsDom" method="login">
<result name="success">
/index.jsp
</result>
</action>
</package>

<package>
<action name="add" class="com.action.StrutsDom" method="add">
<result name="success">
/add.jsp
</result>
</action>
</package>
</struts>

 

web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">



<filter>
<filter-name>struts2</filter-name>
<filter-class>com.util.StrutsFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

posted @ 2016-06-12 15:39  方少520  阅读(107)  评论(0编辑  收藏  举报