- 浏览: 103423 次
- 性别:
- 来自: 武汉
最新评论
-
wubing2789:
楼主,修改位置错了,应该在
%Tomcat_home%/con ...
配置Tomcat 中文字符集问题 -
zpoop:
...
build模式 -
咖啡舞者:
部分同意,部分不同意
“
从毕业开始到毕业后至少5年内,踏踏实 ...
资深程序员给新人程序员的八点建议 -
laorer:
技术不是主要的,但是重要的,对不.
刚出来,虽然说不要把心思放 ...
资深程序员给新人程序员的八点建议 -
stormnic:
谢谢前辈的经验!
我快毕业了。我要多看几遍!
资深程序员给新人程序员的八点建议
在struts 中遇到大业务量时 一般用dispatcherAction在一个类里集成多个method,但是这样的对于一些预先处理需求的就不能实现了,于是自己动手改造下
/** * action的预处理和收尾处理类 每个项目必须实现自己的ControlAction,在ControlAction中作些统一的预处理和收尾处理 * 所有Action都继承自ControlAction * * @author rff */ public class ControlAction extends BaseControlAction { /** * 预处理代码 2007-03-15 加入session判断,校验某用户是否有访问该action的权限 */ protected void sessionInit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); try { List actionList = null; String url = request.getServletPath().substring(1, request.getServletPath().length()); if (url != null && !url.equals("menuAction.do") && !url.equals("loginAction.do") && !"indexAction.do".equals(url)) { AssignRuleBo bo = new AssignRuleBo(); AssignRule rule = new AssignRule(); FunctionModule func = new FunctionModule(); String strMothod = request.getParameter("method"); if (strMothod.indexOf('&') > 0) strMothod = strMothod.substring(0, strMothod.indexOf('&')); url = url + "?method=" + strMothod; // func.setUrl(request.getServletPath().substring(1,request.getServletPath().length())); func.setUrl(url); func.setIsMenu(0); FunctionModuleDao fundao = new FunctionModuleDao(); List funclist = fundao.list(func); if (funclist != null && funclist.size() > 0) { func = (FunctionModule) funclist.get(0); } FunctionModule tempfunc = new FunctionModule(); tempfunc.setParentFunctionId(func.getFunctionId()); /*rule.setFunction(tempfunc); User user = new User(); user.setUserId((Integer) request.getSession().getAttribute( "userId")); rule.setUserId(user.getUserId()); actionList = bo.queryAll(rule); // 本功能父功能的下功能 tempfunc.setParentFunctionId(func.getParentFunctionId()); rule.setFunction(tempfunc); actionList.addAll(bo.queryAll(rule));*/ //if(session.getAttribute("actionList")!=null){ PurviewDao pDao =new PurviewDao(); actionList =pDao.getButtonRuleList((Integer)session.getAttribute("userId")); session.setAttribute("actionList", actionList); //} } } catch (Exception e) { e.printStackTrace(); } } /** * 预处理代码 2006-04-04 加入session判断,校验某用户是否有访问该action的权限 * * protected boolean onInit(ActionMapping mapping, ActionForm form, * HttpServletRequest request, HttpServletResponse response) { * * boolean ifRole=false; //boolean ifRole=true; try{ HttpSession * session=request.getSession(); * * String url=request.getRequestURI(); String strMethodName = * request.getParameter("method"); * * String link=url+"?method="+strMethodName; * * ArrayList actionSet= (ArrayList)session.getAttribute("userActions"); * * if(actionSet!=null&&actionSet.contains(link)){ ifRole=true; } * * * }catch(Exception e){ e.printStackTrace(); } * * return ifRole; } */ /** * 预处理代码 重复提交判断,校验该次提交是否为重复提交 */ protected boolean onInit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { boolean submitRole = true; /* * ArrayList saveTokenList=AtomRoleCheck.getTokenList()[0]; ArrayList * checkTokenList=AtomRoleCheck.getTokenList()[1]; * * try{ * * String url=request.getRequestURI(); String strMethodName = * request.getParameter("method"); * * if (saveTokenList.contains(strMethodName)) { saveToken(request); } * else if (checkTokenList.contains(strMethodName)) { if * (!isTokenValid(request, true)) {//表单重复提交 * * resetToken(request); * * System.err.println("重复提交!"); submitRole=false; } * } * * * * }catch(Exception e){ e.printStackTrace(); } */ return submitRole; } /** * 收尾处理代码 */ protected String onFinal(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, String forward) { return forward; } }
/** * 控制分发类 * 继承自org.apache.struts.action.Action,在ControlAction预处理通过之后执行 * @author xt */ public abstract class BaseControlAction extends Action { /** * 控制方法执行 */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String forward = null; HttpSession session=request.getSession(); try { String url=request.getServletPath().substring(1,request.getServletPath().length()); Integer userId=(Integer)session.getAttribute("userId")==null?null:(Integer)session.getAttribute("userId"); if(url!=null && !"loginAction.do".equals(url) && (userId==null || "".equals(userId.toString())) ) { forward="login"; } else { sessionInit(mapping,form,request,response); if(onInit(mapping,form,request,response)){//预处理失败就不执行 Class cls = getClass(); String strMethodName = request.getParameter("method"); Method methods[] = cls.getDeclaredMethods(); for (int i=0;i<methods.length;i++) { if (methods[i].getName().equals(strMethodName)) { int intArguments=methods[i].getParameterTypes().length; Object arglist[] = new Object[intArguments]; if(intArguments==2){ arglist[0] = request; arglist[1] = form; }else{ arglist[0] = mapping; arglist[1] = form; arglist[2] = request; arglist[3] = response; } forward = (String)methods[i].invoke(cls.newInstance(),arglist); } } }else{ forward="submitRepeat"; } forward = onFinal(mapping,form,request,response,forward);//收尾处理 } }catch(Exception e) { e.printStackTrace(); } return mapping.findForward(forward); } /** * 预处理,项目中可以在这里实现一些统一的处理,像权限校验、重复提交校验等 * @param mapping * @param form * @param request * @param response * @return 预处理成功或失败 */ protected abstract boolean onInit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response); /** * 收尾处理,根据项目要求将action的处理结果再加工一次 * @param mapping * @param form * @param request * @param response * @param forward action处理后的forward * @return 处理后的forward */ protected abstract String onFinal(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, String forward); protected abstract void sessionInit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response); }
发表评论
-
jQuery选择器总结
2013-06-06 22:34 775jQuery 的选择器可谓之强大无比,这里简单地总结一下常 ... -
jxl导出excel数据工具类
2013-06-06 10:42 1518package com.yihaodian.tms.fra ... -
最近的主题
2013-05-06 09:09 693oracle 3种连接查询方式 nl smt hash joi ... -
浅谈HTTP中Get与Post的区别
2013-03-04 15:37 0Http定义了与服务器交互的不同方法,最基本的方法有4种,分别 ... -
eclipse中开启断言
2013-03-04 15:16 826eclipse中开启断言 选择菜单:Run ---> ... -
一个软件渐进非常好的例子
2013-02-19 14:27 716来自http://www.heguangming.co ... -
struts2 c:if 标签
2011-12-22 14:13 1043<s:set name="x" ... -
struts2 <s:iterator> status属性
2011-12-12 09:59 1838iterator标签主要是用于 ... -
报表导出解决方案,包括延时导出和即时导出
2011-11-04 12:02 1286/** * 根据sql,csv标题,csv内容,csv名 ... -
Quartz的cron表达式
2011-11-01 10:43 864Quartz的cron表达式 按顺 ... -
tomcat中通过JNDI数据源配置使用
2011-08-29 22:15 1173一、数据源简介: ****** ... -
程序员sql优化
2010-12-08 11:10 940程序员sql优化 -
linux 设置网卡ip以及其他
2010-12-08 10:57 931觉得有两个方法: 1 redhat linux则可以在 ... -
cisco配置文件备份
2010-12-08 10:36 1857Cisco使用的操作系统称为IOS——Internetwor ... -
关于去掉linux打开文件数限制的办法
2010-10-11 14:05 13821、/etc/pam.d/login 添加 sessio ... -
Linux limits.conf 配置
2010-10-11 12:57 1407linux limits.conf 配置 ... -
关于/etc/host,主机名和IP配置文件
2010-10-07 19:49 1932、关于/etc/host,主机名和IP配置文件 Hosts ... -
在linux中删除大量文件
2010-10-01 08:53 1228在linux中删除大量文件时,直接用rm会出现:-bash: ... -
tar命令
2010-09-30 14:29 978# tar -cf all.tar *.jpg 这条命令是 ... -
linux chmod命令详解
2010-09-17 14:27 937指令名称 : chmod 使用权限 : ...
相关推荐
**Struts in Action** 《Struts in Action》一书深入探讨了Struts这一经典Java Web应用框架,旨在帮助开发者理解并熟练运用Struts来构建高效、可维护的Web应用程序。Struts是由Apache软件基金会开发的一个开源项目...
- 应该尽量避免在Action方法中使用`try-catch`块,而是依赖于Struts2的异常处理机制。 - 全局异常处理应该作为最后的防线,用于处理未被局部异常处理捕获的异常。 - 使用自定义异常可以帮助代码更具可读性和可...
在Struts2框架中,异常处理主要依赖于两个关键组件:`ExceptionMappingInterceptor`(异常映射拦截器)和`ActionError`。当一个Action执行过程中抛出未捕获的异常时,`ExceptionMappingInterceptor`会介入并根据配置...
Struts2支持Action的动态方法调用,允许Action类根据请求参数动态选择要执行的方法,而无需预先在struts.xml中硬编码。 **八、Action通配符(wildcard)的配置** 通配符配置允许为一组相似的Action定义一个通用配置,...
7. **异常处理**:Struts允许开发者定义全局和局部的异常处理策略,当业务逻辑中出现异常时,框架会自动跳转到预先设定的错误页面。 8. **Tiles框架**:Tiles是Struts的一个扩展,它允许开发者创建可复用的页面组件...
传统的Struts开发中,每个表单对应一个ActionForm类,而在动态Form模式下,无需预先定义Form类,而是直接在JSP页面中声明表单元素,并通过OGNL(Object-Graph Navigation Language)表达式绑定到Action的属性。...
- **Struts1**:需要预先定义Action类和对应的ActionForm,请求路径与Action类方法直接关联,不易进行动态路由。 - **Struts2**:通过OGNL表达式可以实现动态方法调用,无需提前硬编码Action方法,增强了代码的可...
2. **Action Mapping**:Filter Dispatcher会检查请求URL,尝试匹配预先定义的Action Mapping。Action Mapping定义了特定的URL如何映射到特定的后台Action类,这使得Struts2能够根据请求路由到相应的业务逻辑。 3. ...
在Struts2框架中,Action类是核心组件,它处理用户请求并执行业务逻辑,然后将结果转发到视图层进行展示。本文将深入探讨Struts2中的Action方法及其相关知识点。 一、Action类与Action方法 1. Action类:Struts2...
### Struts in Action 中文版知识点总结 #### Struts简介与背景 - **书籍来源**:本书《Struts in Action》由Ted Husted撰写,Eric Liu(铁手)翻译成中文版,最新修订时间为2005年10月14日。 - **作者与译者**:...
- Struts2允许动态地调用Action的方法,只需在URL中指定方法名,无需预先在配置文件中声明。 5. **Struts2的国际化与本地化** - 支持多语言环境,通过资源文件(properties文件)管理不同语言的文本。 6. **插件...
在Struts2中,Action是核心组件,负责处理用户请求并返回相应的结果。在这个特定的场景中,我们讨论的是如何在Struts2中创建一个能够生成中文验证码的Action。 验证码的主要目的是防止自动机器人或恶意攻击,通过向...
而Struts1则要求在配置文件中预先定义好每个Action的执行方法。 8. **插件和扩展性** - Struts2拥有丰富的插件体系,如Tiles、Freemarker等,便于扩展和定制应用。相比之下,Struts1的扩展性较弱。 综上所述,...
Struts2支持动态方法调用,即可以通过不同的请求参数来决定执行哪个Action方法,而无需预先在Action类中定义所有可能的方法。 八、Action通配符(wildcard)的配置: 通配符配置允许在Action路径中使用星号(*)作为...
DynaActionForm是基于org.apache.struts.action.DynaActionForm的,它不需要预先定义属性,而是允许在运行时动态地添加、修改和删除属性。在配置文件中,我们使用`<form-bean>`元素来声明一个DynaActionForm,并通过...
- 通常会创建一个或多个Action类,这些类继承自`org.apache.struts.action.Action`,并重写`execute()`方法来处理用户请求。 10. **表单Bean(FormBean)**: - FormBean是Struts中的模型组件,用于在视图和控制...
用户提交表单后,Struts会调用预先定义的Action,执行相关的业务逻辑。 在JSP页面中,我们可以使用Struts的标签库,如和,来创建表单元素。这些标签简化了HTML的编写,并与Struts框架无缝集成,使得表单数据可以...
- **3.2.2 StrutsAction** - 实现具体的业务逻辑。 - 包含了execute()方法,该方法是框架调用的入口点。 - **3.2.3 StrutsActionMapping和ActionForward** - **ActionMapping**:定义了ActionServlet与Action之间...
5. **struts-config.xml**:配置文件,定义了ActionServlet如何处理请求,Action与JSP之间的映射关系等。 在"描述"中提到的从JSP到Action的数据传递,通常通过表单提交实现。用户在JSP页面填写表单后,点击提交按钮...