`
ITCheng
  • 浏览: 77262 次
  • 来自: 北京
社区版块
存档分类
最新评论

1.2自定义框架总结_使用xml判断对应的Action

 
阅读更多

1.2版本中分别加入了ActionManager,ActionMapping,ActionMappingManager

首先在ActionServlet中的Init方法中,我们调用ActionMappingManager

中的Init方法解析了xml文件,预先加载了Map中的值

然后在doPost方法中,通过fileName的值,拿到了Map中对应的对象

ActionMapping,通过ActionMapping对象中的actionName属性,

在ActionServlet中我们通过该值创建了对应的Action对象,随后调用

该对象的execute方法,整个流程结束.

ActionManager

public class ActionManager {
	public Action createAction(String actionName){
		try {
			return (Action) Class.forName(actionName).newInstance();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
}

 

ActionMapping

实际上就是一个有2个属性的对象,属性分别为name,actionName

分别对应xml文件中的name,class的2个值.

ActionMappingManager

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

public class ActionMappingManager {
	private Map<String,ActionMapping> actionMappings=new HashMap();
	public void init(String fileName){
		//解析器的创建
		SAXReader reader=new SAXReader();
		InputStream is=this.getClass().getResourceAsStream("/"+fileName);
		try {
			Document doc=reader.read(is);
			//获得根节点
			Element root=doc.getRootElement();
			Element actions=root.element("actions");
			List<Element> list=actions.elements("action");
			for(Element el:list){
				ActionMapping actionMapping=new ActionMapping();
				actionMapping.setName(el.attributeValue("name"));
				actionMapping.setActionName(el.attributeValue("class"));
				actionMappings.put(actionMapping.getName(), actionMapping);
			}
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public Map<String, ActionMapping> getActionMappings() {
		return actionMappings;
	}
	public void setActionMappings(Map<String, ActionMapping> actionMappings) {
		this.actionMappings = actionMappings;
	}
}

 

ActionServlet

package com.sun.framework;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

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

import com.sun.action.LoginAction;

import com.sun.framework.ActionMapping;

public class ActionServlet extends HttpServlet {

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doPost(request, response);
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	Map<String, ActionMapping> actionMappings;
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=gbk");
		String path=request.getRequestURI();
		String actionName=path.substring(path.lastIndexOf("/")+1,path.lastIndexOf("."));
		//通过actionName从map拿到对象
		ActionMapping actionMapping=actionMappings.get(actionName);
		//从对象中获得ActionName属性,并且通过create方法获得Action对象
		ActionManager actionManager=new ActionManager();
		Action action=actionManager.createAction(actionMapping.getActionName());
		//执行对应Action对象中的execute方法
		String resultView=action.execute(request, response);
		request.getRequestDispatcher(resultView).forward(request, response);
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init(ServletConfig config) throws ServletException {
		//拿到Servlet初始化参数的值
		String fileName=config.getInitParameter("config");
		ActionMappingManager actionMappingManager=new ActionMappingManager();
		//初始化map
		actionMappingManager.init(fileName);
		//拿到map
		actionMappings=actionMappingManager.getActionMappings();
		
	}

}

 

Struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<mystruts>
	<actions>
		<action name="login" class="com.sun.action.LoginAction" />
		<action name="register" class="com.sun.action.RegisterAction" />
	</actions>
</mystruts>

 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">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ActionServlet</servlet-name>
    <servlet-class>com.sun.framework.ActionServlet</servlet-class>
    <init-param>
    	<param-name>config</param-name>
 		<param-value>StrutsMvc.xml</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>ActionServlet</servlet-name>
    <url-pattern>*.cc</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

<init-param>为初始化参数

<load-on-startup>为设定该Servlet为第几个加载,即程序启动时加载.

分享到:
评论

相关推荐

    struts1.2框架验证实例

    Struts1.2框架是一个基于MVC(Model-View-Controller)设计模式的Java Web开发框架,它在Java社区中广泛使用,特别是在早期的Web应用开发中。本实例旨在帮助开发者理解并掌握如何在实际项目中运用Struts1.2进行表单...

    struts1.2 使用流程

    Struts1.2的使用流程涉及到了Web应用程序的结构定义、ActionForm的创建、JSP页面的编写、Action处理逻辑的实现、RequestProcessor的定制以及控制器配置等多个方面。通过遵循这一流程,开发者可以构建出结构清晰、...

    STRUTS1.2中文文档

    10. **Plug-in架构**:Struts1.2的插件架构允许开发者扩展框架功能,例如添加自定义拦截器(Interceptor)来实现额外的业务逻辑或安全控制。 11. **Struts标签库**:Struts1.2提供了丰富的标签库,如logic标签、...

    Struts1.2Action之处理多个业务

    在Struts1.2中,可以使用`&lt;global-exceptions&gt;`标签来定义全局的异常处理,当Action执行过程中抛出异常时,会自动转发到对应的错误页面,这对于统一处理异常情况和提高代码可维护性有很大帮助。 **六、总结** ...

    struts1.2+hibernate3.5+spring2.5框架搭建

    它定义了Action类来处理业务逻辑,并通过配置文件(struts-config.xml)来管理这些Action及其对应的视图。此外,Struts1.2还提供了拦截器机制,可以自定义拦截逻辑,如验证、日志等。 Hibernate3.5是对象关系映射...

    struts1.2源码研究

    Struts 1.2 是一款基于 Model-View-Controller(MVC)设计模式的开源Java Web框架,由Apache...通过深入理解Struts 1.2的源码,开发者可以更好地利用这个框架,解决实际项目中的问题,同时为自定义扩展和优化提供可能。

    struts1.2-jars.zip

    Struts1.2-jars.zip 是一个专门为...Struts1.2的使用不仅可以提高开发效率,还能增强代码的结构化和可维护性,但需要注意的是,Struts1.2已进入维护模式,对于新的项目,更推荐使用Struts2或Spring MVC等更新的框架。

    struts1.2-jars.rar 所有jar包

    Struts1.2 是一个基于MVC(Model-View-Controller)设计模式的Java ...在现代Web开发中,尽管Struts1.2已经相对过时,但了解其工作原理和使用方法,对于理解其他MVC框架,尤其是Spring家族的框架,仍然具有一定的帮助。

    struts1.2源代码及文档

    Struts1.2是Apache软件基金会的一个开源项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架。这个框架的主要目的是为了简化Web应用开发,提高开发效率,提供一套标准的方式来处理HTTP...

    struts 1.2 jar 包-驱动包

    拦截器是Struts 1.2的一个重要特性,它允许在Action调用前后插入自定义逻辑,如日志记录、权限检查等。 **8. 数据源集成** Struts 1.2可以方便地与各种数据源(如JNDI、Apache DBCP等)集成,提供数据库连接管理。 ...

    Struts1.2+Spring2.5+Hibernate3.2框架搭建(一)

    Struts1.2、Spring2.5和Hibernate3.2是经典的Java企业级开发框架组合,它们各自在应用程序的不同层次上发挥着重要作用。Struts1.2主要负责表现层(Presentation Layer),Spring2.5则作为核心容器处理依赖注入...

    BBS-- STRUTS1.2

    总结,STRUTS1.2作为曾经的Web开发主力框架,它的设计理念和组件模型对后续的MVC框架产生了深远影响。然而,随着技术的发展,新的框架如Spring MVC、Play Framework等逐渐取代了STRUTS1.2的地位。对于学习和理解MVC...

    Struts2.3.1.2源码

    XML配置文件(通常为struts.xml)用于全局配置,而注解则可以直接在Action类和方法上使用,简化配置过程。 4. **OGNL(Object-Graph Navigation Language)**: Struts2使用OGNL作为默认表达式语言,用于在Action和...

    struts1.2登陆小例子

    用户在表单中输入信息后,点击提交会触发POST请求,Struts1.2框架会根据配置文件找到对应的Action进行处理。如果登录成功,Action会将控制权传递给`success.jsp`显示欢迎信息;若登录失败,则可能会重定向到`error....

    struts-2.3.1.2

    1. **Action和Result**:在Struts 2中,业务逻辑主要由Action类实现,每个Action对应一个用户请求。Action处理完请求后,通过Result来决定如何展示响应。Result可以是重定向、转发到一个页面,或者渲染一个模板。 2...

    struts1.2jar 包

    Struts 1.2常常与Tiles框架结合使用,提供更灵活的页面布局。Tiles定义了模板和组件,可以复用和组合,简化视图层的构建。 7. **国际化与本地化**: Struts 1.2支持多语言,通过资源文件(如messages.properties...

    struts 1.2源代码

    在配置文件(struts-config.xml)中,我们指定每个Action的路径、对应的类以及可能的转发路径。 3. **ActionForm**:ActionForm是模型层与控制器层之间的桥梁,用于封装用户的输入数据。当用户提交表单时,这些数据...

    struts in action中文版1.2

    Struts的控制流可以从一个高层次的角度进行概述:当用户提交请求时,ActionServlet捕获请求,根据配置文件(struts-config.xml)找到对应的Action映射,然后调用相应的Action对象处理请求,并根据Action的返回值决定下...

    struts1.2核心源码

    Struts1.2是Apache软件基金会的Jakarta项目下的一个著名MVC框架,它极大地简化了Java Web应用程序的开发。这个框架的核心在于它的ActionServlet,它作为控制器协调用户请求和业务逻辑之间的交互。通过深入研究Struts...

    struts-2.3.1.2.zip

    2. **配置文件**:Struts 2的配置文件主要有两个,一个是`struts.xml`,这是框架的主要配置文件,用于配置Action、结果类型、拦截器等;另一个是`xwork.xml`,主要用于配置数据类型转换、异常处理等。 3. **...

Global site tag (gtag.js) - Google Analytics