- 浏览: 6351900 次
- 性别:
- 来自: 一片神奇的土地
文章分类
- 全部博客 (745)
- JQuery (25)
- JS (33)
- 数据库 (59)
- Java基础 (56)
- JSON (8)
- XML (8)
- ireport (7)
- 设计模式 (10)
- 心情 (14)
- freemarker (1)
- 问题 (15)
- powerdesigner (2)
- CSS (15)
- DWR (4)
- tomcat (16)
- Hibernate (12)
- Oracle (7)
- Struts (7)
- Spring (34)
- JSP (23)
- 需学习 (64)
- 工具类库 (63)
- Maven (14)
- 笔试题 (34)
- 源码学习 (31)
- 多线程 (39)
- Android (32)
- 缓存 (20)
- SpringMVC (14)
- jQueryEasyUi (12)
- webservice-RPC (13)
- ant (1)
- ASP.NET (10)
- 正则表达式 (3)
- Linux (15)
- JBoss (1)
- EJB (3)
- UML (2)
- JMS (3)
- Flex (8)
- JSTL (2)
- 批处理 (5)
- JVM (16)
- 【工具】 (16)
- 数据结构 (29)
- HTTP/TCP/Socket (18)
- 微信 (1)
- tomcat源码学习 (15)
- Python (30)
- 主机 (2)
- 设计与架构 (19)
- thrift-RPC (2)
- nginx (6)
- 微信小程序 (0)
- 分布式+集群 (12)
- IO (1)
- 消息队列 (4)
- 存储过程 (8)
- redis (9)
- zookeeper (5)
- 海量数据 (5)
最新评论
-
360pluse:
技术更新,战术升级!Python爬虫案例实战从零开始一站通网盘 ...
Python爬虫实战:Scrapy豆瓣电影爬取 -
18335864773:
推荐用 pageoffice 组件生成 word 文件。
JAVA生成WORD工具类 -
jjhe369:
LISTD_ONE 写道起始地址为163.135.0.1 结束 ...
IP地址与CIDR -
baojunhu99:
private final int POOL_SIZE = 5 ...
使用CompletionService获取多线程返回值 -
LovingBaby:
胡说,javascript 运行时是单线程的,event lo ...
Ajax请求是否可以实现同步
DispatchAction用于分发的Action,主要的好处是把一些功能类似的Action放到一个Action中,通过传入的不同参数来觉得执行哪个操作.
是一个抽象类,它实现了父类(Action)的execute()方法,所以它的子类就不用来实现这个方法了,只需要专注与实际操作的方法
DispatchAction就是在struts-config中用parameter参数配置一个表单字段名,这个字段的值就是最终替代execute被调用的方法. 例如parameter="method"而request.getParameter("method")="save",其中"save"就是MethodName。struts的请求将根据parameter被分发到"save"或者"edit"或者什么。但是有一点,save()或者edit()等方法的声明和execute必须一模一样。
即:
<action path="/admin/user" name="userForm" scope="request" parameter="method" validate="false">
<forward name="list" path="/admin/userList.jsp"/>
</action>
其中parameter="method" 设置了用来指定响应方法名的url参数名为method,即/admin/user.do?method=list 将调用UserAction的public ActionForward list(....) 函数。
public ActionForward unspecified(....) 函数可以指定不带method方法时的默认方法。
也就是说 当你使用 DispatchAction 定义action的时候,如果没有指定method 方法,那么action 自动匹配到 unspecified 这个函数。
public class UpdateBookingOrderAction extends BaseDispathAction { @Override public String query(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SystemException { } @Override public String update(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SystemException { } }
public abstract class BaseDispathAction extends DispatchAction { private static Log log = LogFactory.getLog(BaseDispathAction.class); @Override protected ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SystemException { ActionForward actionForward = this.doInit("proccess", mapping, form, request, response); return actionForward; } public ActionForward query(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SystemException { ActionForward actionForward = this.doInit("query", mapping, form, request, response); return actionForward; } public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SystemException { ActionForward actionForward = this.doInit("add", mapping, form, request, response); return actionForward; } public ActionForward read(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SystemException { ActionForward actionForward = this.doInit("read", mapping, form, request, response); return actionForward; } public ActionForward doInit(String type, ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SystemException { HttpSession session = request.getSession(); String id = session.getId(); String remoteAddr = request.getRemoteAddr(); String clientInfo = remoteAddr + "(" + id + ")"; String strGotoPage = "success"; try { if (type.equalsIgnoreCase("add")) { session.setAttribute("querystatus", "Add"); strGotoPage = add(form, request, response); } else if (type.equalsIgnoreCase("update")) { session.setAttribute("querystatus", "Edit"); strGotoPage = update(form, request, response); } else if (type.equalsIgnoreCase("addnew")) { session.setAttribute("querystatus", "Add"); strGotoPage = addnew(form, request, response); } else if (type.equalsIgnoreCase("delete")) { session.setAttribute("querystatus", "Delete"); strGotoPage = delete(form, request, response); } else if (type.equalsIgnoreCase("query")) { session.setAttribute("querystatus", "Query"); strGotoPage = query(form, request, response); } else if (type.equalsIgnoreCase("read")) { session.setAttribute("querystatus", "Edit"); strGotoPage = read(form, request, response); } else {// process session.setAttribute("querystatus", "Query"); strGotoPage = process(form, request, response); } } catch (Exception e) { log.error(e); e.printStackTrace(); throw new SystemException(e.getMessage()); } ActionForward actionForward = mapping.findForward(strGotoPage); if (null != actionForward) { log.warn(clientInfo + "====> " + actionForward.getName() + ":" + actionForward.getPath()); } return actionForward; } public abstract String process(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SystemException; public abstract String query(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SystemException; public abstract String add(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SystemException; public abstract String addnew(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SystemException; public abstract String read(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SystemException; public abstract String update(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SystemException; public abstract String delete(ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SystemException; }
JSP调用:
document.forms[0].action = "../updateBooking.do?method=updateStatus; document.forms[0].submit();
或者:
public class ZonesAction extends BaseAction { @Override public String process(ActionForm form, HttpServletRequest request) throws Exception { } } public abstract class BaseAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { HttpSession session = request.getSession(); String id = session.getId(); String remoteAddr = request.getRemoteAddr(); String clientInfo = remoteAddr + "(" + id + ")"; log = LogFactory.getLog(this.getClass()); String strGotoPage; try { strGotoPage = process(form,request); } catch (Exception e) { log.error(e); e.printStackTrace(); throw e; } ActionForward actionForward = mapping.findForward(strGotoPage); log.warn(clientInfo +"====> "+ actionForward.getName() + ":" + actionForward.getPath()); return actionForward; } public abstract String process(ActionForm form, HttpServletRequest request)throws Exception; }
DispatchAction, LookupDispatchAction, MappingDispatchAction深入分析
http://qmug.iteye.com/blog/215456
发表评论
-
strust_spring_hibernate的优缺点
2014-10-08 09:41 2753struts框架具有组件的模块化,灵活性和重用性的优点,同时 ... -
[转]Struts1和Struts2的区别和对比
2012-04-24 12:15 1525Action 类: • Struts1要求Action类继承一 ... -
[转]struts2的action中获得request response session几种方法【基础】
2012-04-24 11:54 1861来源:http://blog.csdn.net/yaerfen ... -
[转]Struts1和Struts2 action的线程安全
2012-04-24 11:21 2072来源: http://cardyn.iteye.com/bl ... -
struct原理
2012-04-23 14:34 6630一、谈到Struts,就 ... -
struts中用到的复选框和查询技巧
2011-03-09 11:06 123实现效果:1、选中复选框时,其后文本框显示,没选中时,隐藏 ... -
struts1中DynaActionForm的使用
2011-03-02 17:15 109我们都知道了DispatchAction的使用方法, ... -
jdbcTemplate.getAllUser
2010-12-22 11:30 871. public List<TaoBaoStore ... -
Struts2学习笔记!
2010-11-06 12:52 2291Struts原理简介:http://blog.csdn.n ...
相关推荐
在此文件中,可以通过包含struts-default.xml来继承默认配置,并在此基础上进行自定义设置。struts.xml文件用于定义Action、拦截器等核心组件,是框架运行的关键。 #### 实践Struts2.0的魅力 完成以上步骤后,即可...
在Eclipse中配置Struts2项目是一个涉及到多个步骤和技术组件的过程。本文将详细介绍如何在Eclipse集成开发环境中配置Struts2项目,同时考虑到JDK1.4的兼容性。Struts2是一个流行的Java web框架,它提供了MVC设计模式...
在这个基础框架的配置中,我们可能还需要考虑以下方面: 1. **Spring的AOP配置**:利用Spring的AOP,我们可以实现全局事务管理和日志记录等功能,只需在配置文件中声明相应的切面。 2. **数据源配置**:为了连接...
在MyEclipse中,可以通过向项目中添加Struts Capabilities来快速设置Struts框架,包括配置struts-config.xml文件、创建Action类等。 **Hibernate**则是一个对象关系映射(ORM)框架,它简化了数据库操作,将Java...
在这个“Struts+Hibernate项目”中,用户登录功能是基础,这通常涉及到用户验证和权限控制。开发者可能使用Struts的ActionForm收集用户输入,然后通过Hibernate查询数据库进行身份验证。数据的显示可能涉及到多个...
理解并掌握这些步骤是Java EE开发中必不可少的一部分,它为你后续深入学习Struts2和构建复杂Web应用打下基础。在实际开发中,你可能还需要了解更多关于Struts2的特性,如拦截器、插件、国际化、异常处理等内容。
配置Struts2环境的过程中,合理规划项目文件夹结构是基础。以下是推荐的文件夹结构示例: ``` test |— WEB-INF ||— classes(struts.xml、LoginAction.java等Java类) ||— lib(包含struts2-core-2.3.1.2.jar、...
### Struts环境配置详解 #### 一、Struts在Eclipse中的配置...通过以上步骤,你可以成功地在Eclipse环境中搭建Struts开发框架,并配置好与SQL Server 2000数据库的连接,为Java Web应用程序的开发奠定了坚实的基础。
在"struts2项目"中,CRUD操作是Web应用的基础。这通常涉及以下步骤: 1. **创建(Create)**:用户填写表单数据,通过jQuery发送Ajax请求到Struts2 Action,Action处理数据并保存到数据库,然后返回响应信息。 2. *...
在Java Web开发中,Maven和...这只是一个基础的配置,实际应用中可能需要进一步配置拦截器、全局结果、异常处理等高级特性,以满足复杂的业务需求。记得始终关注框架的更新和最佳实践,确保代码的安全性和可维护性。
总的来说,"Struts2项目实例"涵盖了Java web开发中的关键环节,从Action设计、数据库操作、视图展现到框架配置,为我们提供了一个学习和实践Struts2的好起点。通过分析和理解这个实例,开发者可以更好地掌握Struts2...
本项目源码提供了一个基础的Struts2应用程序实例,对于初学者来说,这是一个很好的学习资源,可以深入理解Struts2的工作原理和架构。 Struts2的核心组件包括: 1. **Action类**:Action类是业务逻辑的载体,它是...
- 在Eclipse中,右键点击项目 -> Build Path -> Configure Build Path -> Libraries -> Add JARs 或 Add External JARs,将下载的Struts2库导入到项目的类路径中。 2. **创建Struts2配置文件** - 在WebContent...
- **使用拦截器**:在Action配置中通过`<interceptor-ref>`引用拦截器栈或单独的拦截器。 ```xml ``` 6. **常量配置** - **struts.properties或struts.xml**:定义全局常量,如字符编码、错误...
了解了这些基础知识后,你可以根据自己的需求在`struts.xml`或其他配置文件中添加、修改或删除Action,配置拦截器,以及设置常量,从而定制Struts 2的行为。同时,你还可以参考博客中的详细内容,获取更深入的理解和...
在这个项目中,开发者可能已经配置好了Struts2的动作(Action)和结果页面,Spring的Bean配置,以及Hibernate的数据访问层。文件"ssh_2"可能代表了另一个版本或不同实现的SSH项目。 学习和实践这两个框架,开发者...
项目中的文件可能包括Action类、JSP页面、配置文件(如struts.xml)、测试用例等。Action类通常会处理业务逻辑并返回结果;JSP页面则负责展示视图,通常通过Struts2的标签库简化视图层的开发;配置文件定义了Action...
理解并熟练掌握Struts配置文件的各个元素是开发高效、稳定Struts应用的基础。通过精心设计和维护配置文件,我们可以实现更灵活的控制流、更好的数据管理以及更优雅的错误处理。在实际项目中,还需要结合实际需求和...