`
chusiyou
  • 浏览: 5426 次
  • 性别: Icon_minigender_1
  • 来自: 奥格瑞玛
社区版块
存档分类
最新评论

模拟Struts功能----ActionServlet

    博客分类:
  • java
阅读更多
由于这段时间学习struts,对struts原理有一些了解,为了巩固自己的学习,所以自己手写了模拟struts功能的这样一个框架,写的不好还忘大家见谅....但是我可以拍拍胸脯的给大家说...这绝对是自己原创,写的不好还忘大家纠正,希望大家能一起学习...

以下是ActionServlet源码

package com.chusiyou.struts.core;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class ActionServlet extends HttpServlet {
// private HashMap<String, String> formBeans = new HashMap<String,
// String>();
// private List<ActionMappings> actions = new ArrayList<ActionMappings>();
// private String actionName;

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(req, resp);
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
// 得到请求的路径
// String str1 = request.getServlet().getInitParameter("XXXX");
String str1 = request.getRealPath("WEB-INF/struts.config.xml");
HashMap<String, String> formBeans = new HashMap<String, String>();
List<ActionMappings> actions = new ArrayList<ActionMappings>();
String actionName = null;
this.readConfiguration(str1, formBeans, actions);
String name = request.getServletPath();
String str = name.substring(0, name.lastIndexOf("."));
System.out.println("请求的路径为:" + str);
ActionForm actionForm = null;
ActionMappings actionMappings = null;
Iterator<ActionMappings> iter = actions.iterator();
while (iter.hasNext()) {
ActionMappings action = iter.next();
if (action.getPath().equals(str)) {
for (String beanName : formBeans.keySet()) {
//判断当前的action 是否配置了name属性
if (action.getName() != null) {
if (action.getName().equals(beanName)) {
//填充formBean并且把它放进session范围之中
FormFullUtil.full(request, formBeans.get(beanName),
beanName);
//得到FormBean
actionForm = (ActionForm) request.getSession()
.getAttribute(beanName);

}
}
}
actionName = action.getType();
actionMappings = action;
}
}
try {
//得到要调用对象的字节码
Class clazz = Class.forName(actionName);

Action action = (Action) clazz.newInstance();
//得到execute方法的字节码
Method method = action.getClass().getMethod("execute",
ActionMapping.class, ActionForm.class,
HttpServletRequest.class, HttpServletResponse.class);
//调用action 的execute方法
ActionForward actionForward = (ActionForward) method.invoke(action,
new ActionMapping(request, response, actionMappings),
actionForm, request, response);
} catch (Exception e) {
e.printStackTrace();
}
}

// 读取struts配置文件
private void readConfiguration(String configurationName,
HashMap<String, String> formBeans, List<ActionMappings> actions) {
SAXReader ready = new SAXReader();

// 获得解析的XML文档对象
try {
Document doc = ready.read(configurationName);
Element root = doc.getRootElement();
Element rootBean = root.element("form-beans");
for (Iterator i = rootBean.elementIterator("form-bean"); i
.hasNext();) {
Element beanNode = (Element) i.next();
//将循环到的formBean放进map集合
formBeans.put(beanNode.attributeValue("name"), beanNode
.attributeValue("type"));
}
Element rootAction = root.element("action-mappings");
for (Iterator i = rootAction.elementIterator("action"); i.hasNext();) {
Element actionNode = (Element) i.next();
ActionMappings action = new ActionMappings();
//得到path
action.setPath(actionNode.attributeValue("path"));
//得到name
action.setName(actionNode.attributeValue("name"));
//得到type
action.setType(actionNode.attributeValue("type"));
//判断该action是否有forward节点
if (actionNode.isTextOnly()) {

} else {
for (Iterator j = actionNode.elementIterator("forward"); j
.hasNext();) {
Element forwardNode = (Element) j.next();
action.getForwards().put(
forwardNode.attributeValue("name"),
forwardNode.attributeValue("path"));
}
}

actions.add(action);

}

} catch (Exception e) {
e.printStackTrace();
}
}

}
0
0
分享到:
评论

相关推荐

    struts-2.3.30-all所有jar包

    tiles-request-servlet-wildcard-1.0.1.jar, tiles-request-velocity-1.0.1.jar, tiles-servlet-2.2.2.jar, tiles-template-2.2.2.jar, tiles-velocity-3.0.1.jar, velocity-1.6.4.jar, velocity-tools-1.3.jar, ...

    struts-2.5.2-all所有jar包

    tiles-request-servlet-1.0.6.jar, tiles-servlet-3.0.5.jar, tiles-template-3.0.5.jar, validation-api-1.1.0.Final.jar, velocity-1.7.jar, xmlpull-1.1.3.1.jar, xpp3_min-1.1.4c.jar, xstream-1.4.8.jar

    sentinel-web-servlet-1.8.0-API文档-中英对照版.zip

    赠送jar包:sentinel-web-servlet-1.8.0.jar; 赠送原API文档:sentinel-web-servlet-1.8.0-javadoc.jar; 赠送源代码:sentinel-web-servlet-1.8.0-sources.jar; 赠送Maven依赖信息文件:sentinel-web-servlet-...

    struts-2.5.10-all所有jar包

    request-api-1.0.6.jar,tiles-request-freemarker-1.0.6.jar,tiles-request-jsp-1.0.6.jar,tiles-request-servlet-1.0.6.jar,tiles-servlet-3.0.7.jar,tiles-template-3.0.7.jar,validation-api-1.1.0.Final.jar,...

    jersey-container-servlet-core-2.22.2-API文档-中文版.zip

    赠送jar包:jersey-container-servlet-core-2.22.2.jar; 赠送原API文档:jersey-container-servlet-core-2.22.2-javadoc.jar; 赠送源代码:jersey-container-servlet-core-2.22.2-sources.jar; 赠送Maven依赖信息...

    jcaptcha-integration-simple-servlet-sample.jar

    jcaptcha-integration-simple-servlet-sample.jar 验证码, jcaptcha组件,验证码项目

    jakarta-servletapi-5.rar

    jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar

    jakarta.servlet-api-4.0.4-API文档-中文版.zip

    赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....

    java-servlet-连接mysql-数据库.docx

    java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-...

    解决struts2下载异常的jar包 struts2-sunspoter-stream-1.0.jar

    at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:108) at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:770) at org.apache.struts2....

    sentinel-web-servlet-1.8.0-API文档-中文版.zip

    赠送jar包:sentinel-web-servlet-1.8.0.jar 赠送原API文档:sentinel-web-servlet-1.8.0-javadoc.jar 赠送源代码:sentinel-web-servlet-1.8.0-sources.jar 包含翻译后的API文档:sentinel-web-servlet-1.8.0-...

    jersey-container-servlet-core-2.22.2-API文档-中英对照版.zip

    赠送jar包:jersey-container-servlet-core-2.22.2.jar; 赠送原API文档:jersey-container-servlet-core-2.22.2-javadoc.jar; 赠送源代码:jersey-container-servlet-core-2.22.2-sources.jar; 赠送Maven依赖信息...

    servlet模拟struts1工作原理

    使用servlet模拟struts1的工作原理,解析xml,处理请求,自动封装数据

    javax.servlet-api-3.0.1.jar中文文档.zip

    javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...

    javax.servlet-api-4.0.0-API文档-中文版.zip

    赠送jar包:javax.servlet-api-4.0.0.jar; 赠送原API文档:javax.servlet-api-4.0.0-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.0-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.0.pom; ...

    jersey-servlet-1.19-API文档-中文版.zip

    赠送jar包:jersey-servlet-1.19.jar; 赠送原API文档:jersey-servlet-1.19-javadoc.jar; 赠送源代码:jersey-servlet-1.19-sources.jar; 赠送Maven依赖信息文件:jersey-servlet-1.19.pom; 包含翻译后的API文档...

    jakarta.servlet-api-4.0.4-API文档-中英对照版.zip

    赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....

    javax.servlet-api-4.0.1-API文档-中英对照版.zip

    赠送jar包:javax.servlet-api-4.0.1.jar; 赠送原API文档:javax.servlet-api-4.0.1-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.1-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.1.pom; ...

    tomcat-servlet-3.0-api-7.0.76-15.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    undertow-servlet-2.2.14.Final-API文档-中英对照版.zip

    赠送jar包:undertow-servlet-2.2.14.Final.jar; 赠送原API文档:undertow-servlet-2.2.14.Final-javadoc.jar; 赠送源代码:undertow-servlet-2.2.14.Final-sources.jar; 赠送Maven依赖信息文件:undertow-...

Global site tag (gtag.js) - Google Analytics