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框架是一个基于MVC(Model-View-Controller)设计模式的Java Web开发框架,它在Java社区中广泛使用,特别是在早期的Web应用开发中。本实例旨在帮助开发者理解并掌握如何在实际项目中运用Struts1.2进行表单...
Struts1.2的使用流程涉及到了Web应用程序的结构定义、ActionForm的创建、JSP页面的编写、Action处理逻辑的实现、RequestProcessor的定制以及控制器配置等多个方面。通过遵循这一流程,开发者可以构建出结构清晰、...
10. **Plug-in架构**:Struts1.2的插件架构允许开发者扩展框架功能,例如添加自定义拦截器(Interceptor)来实现额外的业务逻辑或安全控制。 11. **Struts标签库**:Struts1.2提供了丰富的标签库,如logic标签、...
在Struts1.2中,可以使用`<global-exceptions>`标签来定义全局的异常处理,当Action执行过程中抛出异常时,会自动转发到对应的错误页面,这对于统一处理异常情况和提高代码可维护性有很大帮助。 **六、总结** ...
它定义了Action类来处理业务逻辑,并通过配置文件(struts-config.xml)来管理这些Action及其对应的视图。此外,Struts1.2还提供了拦截器机制,可以自定义拦截逻辑,如验证、日志等。 Hibernate3.5是对象关系映射...
Struts 1.2 是一款基于 Model-View-Controller(MVC)设计模式的开源Java Web框架,由Apache...通过深入理解Struts 1.2的源码,开发者可以更好地利用这个框架,解决实际项目中的问题,同时为自定义扩展和优化提供可能。
Struts1.2-jars.zip 是一个专门为...Struts1.2的使用不仅可以提高开发效率,还能增强代码的结构化和可维护性,但需要注意的是,Struts1.2已进入维护模式,对于新的项目,更推荐使用Struts2或Spring MVC等更新的框架。
Struts1.2 是一个基于MVC(Model-View-Controller)设计模式的Java ...在现代Web开发中,尽管Struts1.2已经相对过时,但了解其工作原理和使用方法,对于理解其他MVC框架,尤其是Spring家族的框架,仍然具有一定的帮助。
Struts1.2是Apache软件基金会的一个开源项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架。这个框架的主要目的是为了简化Web应用开发,提高开发效率,提供一套标准的方式来处理HTTP...
拦截器是Struts 1.2的一个重要特性,它允许在Action调用前后插入自定义逻辑,如日志记录、权限检查等。 **8. 数据源集成** Struts 1.2可以方便地与各种数据源(如JNDI、Apache DBCP等)集成,提供数据库连接管理。 ...
Struts1.2、Spring2.5和Hibernate3.2是经典的Java企业级开发框架组合,它们各自在应用程序的不同层次上发挥着重要作用。Struts1.2主要负责表现层(Presentation Layer),Spring2.5则作为核心容器处理依赖注入...
总结,STRUTS1.2作为曾经的Web开发主力框架,它的设计理念和组件模型对后续的MVC框架产生了深远影响。然而,随着技术的发展,新的框架如Spring MVC、Play Framework等逐渐取代了STRUTS1.2的地位。对于学习和理解MVC...
XML配置文件(通常为struts.xml)用于全局配置,而注解则可以直接在Action类和方法上使用,简化配置过程。 4. **OGNL(Object-Graph Navigation Language)**: Struts2使用OGNL作为默认表达式语言,用于在Action和...
用户在表单中输入信息后,点击提交会触发POST请求,Struts1.2框架会根据配置文件找到对应的Action进行处理。如果登录成功,Action会将控制权传递给`success.jsp`显示欢迎信息;若登录失败,则可能会重定向到`error....
1. **Action和Result**:在Struts 2中,业务逻辑主要由Action类实现,每个Action对应一个用户请求。Action处理完请求后,通过Result来决定如何展示响应。Result可以是重定向、转发到一个页面,或者渲染一个模板。 2...
Struts 1.2常常与Tiles框架结合使用,提供更灵活的页面布局。Tiles定义了模板和组件,可以复用和组合,简化视图层的构建。 7. **国际化与本地化**: Struts 1.2支持多语言,通过资源文件(如messages.properties...
在配置文件(struts-config.xml)中,我们指定每个Action的路径、对应的类以及可能的转发路径。 3. **ActionForm**:ActionForm是模型层与控制器层之间的桥梁,用于封装用户的输入数据。当用户提交表单时,这些数据...
Struts的控制流可以从一个高层次的角度进行概述:当用户提交请求时,ActionServlet捕获请求,根据配置文件(struts-config.xml)找到对应的Action映射,然后调用相应的Action对象处理请求,并根据Action的返回值决定下...
Struts1.2是Apache软件基金会的Jakarta项目下的一个著名MVC框架,它极大地简化了Java Web应用程序的开发。这个框架的核心在于它的ActionServlet,它作为控制器协调用户请求和业务逻辑之间的交互。通过深入研究Struts...
2. **配置文件**:Struts 2的配置文件主要有两个,一个是`struts.xml`,这是框架的主要配置文件,用于配置Action、结果类型、拦截器等;另一个是`xwork.xml`,主要用于配置数据类型转换、异常处理等。 3. **...