- 浏览: 52251 次
- 性别:
- 来自: 成都
-
最新评论
-
zeyonq:
原来就是这种龟毛问题困了我一宵。多谢指点。
关于Eclipse“The selection is not within a valid module”的异常 -
cloud21:
为什么我照着写,写不进去,键盘 信息,只有一个退出信息。。
...
C实现Windows全局钩子
JPetStore-5.0程序中不一样的struts
关键字: struts
平常我们使用struts会定义form,写Action,设置struts-config.xml文件,然后页面的数据是以form对象传给Action,然后调用Service层,完成业务,再返回struts-config.xml配置的页面。
而JPetStore-5.0的struts不同,例如:
页面是这样的
struts-config.xml的配置文件是这样的
AccountBean是这样的:
jsp把页面form提交给了/shop/editAccount.shtml,其实所有的数据都提到了一个类里org.apache.struts.beanaction.BeanAction,这个类其实就是一个我们平常写的Action,里面是这样的:
也就是说,在这个类里,程序会取配置文件里的 parameter 属性是否定义,如果定义了,则就用反射调用com.ibatis.jpetstore.presentation.AccountBean里的相应方法;如果没有定义,则就会去配置文件里的path="/shop/editAccount" 属性,取最后一个斜杠后的单词,再用反射调用相应方法;如果parameter 定义了且是parameter="*"则不调用任何一个方法,直接返回,配置的返回页面。
关键字: struts
平常我们使用struts会定义form,写Action,设置struts-config.xml文件,然后页面的数据是以form对象传给Action,然后调用Service层,完成业务,再返回struts-config.xml配置的页面。
而JPetStore-5.0的struts不同,例如:
页面是这样的
<html:form method="post" action="/shop/editAccount.shtml"> <html:hidden name="accountBean" property="validation" value="edit"/> <html:hidden name="accountBean" property="username"/> <h3>User Information</h3> <table> <tr> <td>User ID:</td><td><bean:write name="accountBean" property="username"/></td> </tr><tr> <td>New password:</td><td><html:password name="accountBean" property="password"/></td> </tr><tr> <td>Repeat password:</td><td><html:password name="accountBean" property="repeatedPassword"/></td> </tr> </table> <%@ include file="IncludeAccountFields.jsp" %> <input type="submit" name="submit" value="Save Account Information"/> </html:form>
<html:form method="post" action="/shop/editAccount.shtml"> <html:hidden name="accountBean" property="validation" value="edit"/> <html:hidden name="accountBean" property="username"/> <h3>User Information</h3> <table> <tr> <td>User ID:</td><td><bean:write name="accountBean" property="username"/></td> </tr><tr> <td>New password:</td><td><html:password name="accountBean" property="password"/></td> </tr><tr> <td>Repeat password:</td><td><html:password name="accountBean" property="repeatedPassword"/></td> </tr> </table> <%@ include file="IncludeAccountFields.jsp" %> <input type="submit" name="submit" value="Save Account Information"/> </html:form>
struts-config.xml的配置文件是这样的
<form-beans> <form-bean name="accountBean" type="com.ibatis.jpetstore.presentation.AccountBean"/> </form-beans> <action path="/shop/editAccount" type="org.apache.struts.beanaction.BeanAction" name="accountBean" scope="session" validate="true" input="/account/EditAccountForm.jsp"> <forward name="success" path="/shop/index.shtml"/> </action> <form-beans> <form-bean name="accountBean" type="com.ibatis.jpetstore.presentation.AccountBean"/> </form-beans> <action path="/shop/editAccount" type="org.apache.struts.beanaction.BeanAction" name="accountBean" scope="session" validate="true" input="/account/EditAccountForm.jsp"> <forward name="success" path="/shop/index.shtml"/> </action>
AccountBean是这样的:
public String editAccount() { try { accountService.updateAccount(account); account = accountService.getAccount(account.getUsername()); myList = catalogService.getProductListByCategory(account.getFavouriteCategoryId()); return SUCCESS; } catch (Exception e) { throw new BeanActionException ("There was a problem updating your Account Information. Cause: "+e, e); } } public String editAccount() { try { accountService.updateAccount(account); account = accountService.getAccount(account.getUsername()); myList = catalogService.getProductListByCategory(account.getFavouriteCategoryId()); return SUCCESS; } catch (Exception e) { throw new BeanActionException ("There was a problem updating your Account Information. Cause: "+e, e); } }
jsp把页面form提交给了/shop/editAccount.shtml,其实所有的数据都提到了一个类里org.apache.struts.beanaction.BeanAction,这个类其实就是一个我们平常写的Action,里面是这样的:
public final ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String forward = SUCCESS_FORWARD; try { if (!(form instanceof BaseBean)) { if (form != null) { throw new BeanActionException("The form for mapping '" + mapping.getPath() + "' named '" + mapping.getName() + "' was not an instance of BaseBean. BeanAction requires an BaseBean instance."); } else { throw new BeanActionException("The form for mapping '" + mapping.getPath() + "' named '" + mapping.getName() + "' was null. BeanAction requires an BaseBean instance."); } } BaseBean bean = (BaseBean) form; ActionContext.initCurrentContext(request, response); if (bean != null) { // Explicit Method Mapping Method method = null; String methodName = mapping.getParameter(); if (methodName != null && !NO_METHOD_CALL.equals(methodName)) { try { method = bean.getClass().getMethod(methodName, null); synchronized (bean) { forward = bean.getInterceptor().intercept(new ActionInvoker(bean, method)); } } catch (Exception e) { throw new BeanActionException("Error dispatching bean action via method parameter ('" + methodName + "'). Cause: " + e, e); } } // Path Based Method Mapping if (method == null && !NO_METHOD_CALL.equals(methodName)) { methodName = mapping.getPath(); if (methodName.length() > 1) { int slash = methodName.lastIndexOf("/") + 1; methodName = methodName.substring(slash); if (methodName.length() > 0) { try { method = bean.getClass().getMethod(methodName, null); synchronized (bean) { forward = bean.getInterceptor().intercept(new ActionInvoker(bean, method)); } } catch (Exception e) { throw new BeanActionException("Error dispatching bean action via URL pattern ('" + methodName + "'). Cause: " + e, e); } } } } } } catch (Exception e) { forward = "error"; request.setAttribute("BeanActionException", e); } return mapping.findForward(forward); }
也就是说,在这个类里,程序会取配置文件里的 parameter 属性是否定义,如果定义了,则就用反射调用com.ibatis.jpetstore.presentation.AccountBean里的相应方法;如果没有定义,则就会去配置文件里的path="/shop/editAccount" 属性,取最后一个斜杠后的单词,再用反射调用相应方法;如果parameter 定义了且是parameter="*"则不调用任何一个方法,直接返回,配置的返回页面。
发表评论
-
在JAR包中读取图片
2010-02-01 13:59 2221当你编写一个图形界面的程序的时候,你肯定要使用各种图片资源。那 ... -
JSplitPane按比例分割的问题(转)
2010-01-20 14:21 3383JSplitPane看似比Delphi的spl ... -
JVM内存大小设置(java heap space)(转)
2010-01-16 14:22 7349一般情况下java程序容易出现java heap space ... -
利用Java生成静态HMTL页面的方法收集
2010-01-12 14:21 1082生成静态页面技术解决方案之一 转载者前言:这是一个全面的jsp ... -
Hibernate类型和java类型和sql类型
2009-11-11 16:05 775... -
Struts2表单中文乱码问题的解决
2009-11-10 21:58 2484关于Struts2提交表单中文乱码的问题,在网上搜到了很多解决 ... -
用来遮字幕的程序
2009-11-07 22:52 1162看日剧的时候,不想看到中文字幕。所以写了这个程序来遮住字幕。 ... -
Applet中显示模式对话框
2009-10-22 14:58 1301首先,我们看一下Applet的父级容器。如下: |--> ... -
第一个Struts2的例子
2009-09-24 22:49 1042文档结构 lib文件夹 struts.xml &l ... -
java中用process备份还原mysql数据库
2009-09-19 11:41 1185/** * 备份数据库. */ public int d ... -
Spring的singleton模式
2009-08-24 23:23 940Compnay类 package ioc.demo; p ... -
关于Eclipse开发Web Service的一点总结
2009-08-23 17:16 1252用Eclipse开发webservice确实很方便,无论是服务 ... -
测试WebService是否正常运行的代码
2009-08-17 17:04 1355try { // 服务端的url,需要根据情况 ... -
关于Eclipse“The selection is not within a valid module”的异常
2009-08-03 20:28 4781在工程目录下的.settings文件夹里,有个名为org.ec ... -
自制的Java超链接按钮
2009-02-11 09:35 1851package lib; import java.awt ...
相关推荐
首先,我们注意到标题提到的"struts2绕过waf读写文件及另类方式执行命令1",这表明我们将讨论Struts2框架中的一种或多种漏洞,这些漏洞可能导致攻击者能够绕过WAF的保护措施,执行命令或进行文件操作。 在描述中,...
对于网站所有者来说,重要的是要保持Struts2框架及其依赖库的最新状态,并配置有效的WAF规则,以防止这类攻击。同时,对输入数据进行严格的验证和过滤也是预防此类攻击的关键措施。 总之,这篇文章揭示了Struts2...
1. `struts-config.xml`:这是Struts的配置文件,定义了Action和ActionMapping,以及ActionForm和视图的映射。 2. `hibernate.cfg.xml`:这是Hibernate的配置文件,包含了数据库连接信息以及实体类和数据库表的映射...
在“strpageEmp”这个文件中,可能包含了Struts的配置文件(struts.xml)、Action类、JSP页面以及相关的Java源码。通过配置Action,开发者可以指定处理分页请求的方法;在JSP页面中,使用Struts提供的标签来显示数据...
标签中的“另类其它”可能意味着Tapestry在Web开发领域相对于更常见的框架(如Spring MVC、Struts等)而言,是一种不太常见的选择,但它提供了独特的解决方案。“控件”指的是Tapestry的组件系统,这些组件可以是...
相比之下,重量级J2EE实现充分利用了EJB容器的能力,能够自动或通过配置实现事务控制、远程访问、线程安全、资源管理和安全性等功能,支持分布式应用。实体Bean、会话Bean等组件的引入,使得业务逻辑和服务接口的...
"另类其它"标签可能意味着教材中可能包含了一些独特的视角或实践方法,使得学习体验更为丰富多元。 在压缩包内,"《Java Web应用开发技术实用教程》-王红-电子教案-5124"很可能是主文件名,其中"5124"可能是一个...