DispatchAction:灵活的多业务操作解构

需积分: 9 9 下载量 135 浏览量 更新于2024-07-13 收藏 975KB PPT 举报
在Struts框架中,"Dispatch的运行原理-structs1.高级应用"深入探讨了如何利用DispatchAction来提高代码的灵活性和效率。DispatchAction是Struts框架中的一种高级特性,它允许开发者在一个Action类中处理多种业务逻辑,而无需创建多个单独的Action类来对应不同的操作。它的核心在于一个名为"parameter"的配置参数,当接收到请求时,根据这个参数的值,Struts会动态地调用Action中的相应方法来响应。 首先,理解Struts MVC架构是关键。Struts提供了一套完整的组件,包括视图层的FormBeans(封装用户数据)、控制器层的ActionServlet和ActionBeans,以及模型层(通常包含业务逻辑和数据访问)。当用户发送请求时,ActionServlet会根据请求的URL解析并调用对应的ActionBean,同时将用户数据填充到FormBean中。 DispatchAction的引入是为了应对多业务操作场景,比如在一个页面上实现增删改查、上报和处理等不同功能。通过继承DispatchAction,开发者可以在配置时指定一个或多个处理方法,这些方法会被根据传入的parameter参数自动匹配。例如,四个按钮的click事件可能对应四个不同的运算方法(doSubmit(opr)),每个方法接收不同的opr参数值,如加法、减法等。 在实际开发中,错误处理是一个重要环节。虽然在后台可以通过调试追踪错误,但用户体验往往需要友好的错误提示。在Struts中,遇到错误时,应该避免直接抛出异常,而是通过自定义错误消息或者重定向到专门处理错误的页面,提供清晰易懂的提示给用户,如提示输入必须为数字,而非显示技术性的异常堆栈。 在演示部分,提到的一个具体例子是当用户尝试除以零时,程序应该给出友好的错误提示,而不是直接抛出异常。这涉及到前端与后端的交互,可能需要使用如native2ascii这样的工具将中文转换为Unicode编码,以便在浏览器中以用户可读的方式显示错误信息。 DispatchAction的使用显著提升了代码的复用性和可维护性,使得开发者能更好地组织和管理复杂的业务逻辑,同时也提高了用户体验,避免了不必要的技术细节暴露。在Struts框架中,合理运用DispatchAction能够帮助开发者构建更加高效、易于维护的企业级应用程序。

ava.io.EOFException: null at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1345) ~[tomcat-embed-core-9.0.45.jar!/:?] at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1255) ~[tomcat-embed-core-9.0.45.jar!/:?] at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:75) ~[tomcat-embed-websocket-9.0.45.jar!/:?] at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:183) ~[tomcat-embed-websocket-9.0.45.jar!/:?] at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:162) ~[tomcat-embed-websocket-9.0.45.jar!/:?] at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:156) [tomcat-embed-websocket-9.0.45.jar!/:?] at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) [tomcat-embed-core-9.0.45.jar!/:?] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:59) [tomcat-embed-core-9.0.45.jar!/:?] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.45.jar!/:?] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) [tomcat-embed-core-9.0.45.jar!/:?] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.45.jar!/:?] at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_121] at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_121] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.45.jar!/:?] at java.lang.Thread.run(Unknown Source) [?:1.8.0_121]

2023-07-13 上传