### Struts2请求处理方法详解 #### 一、概述 在Struts2框架中,一个Action可以包含多个请求处理方法,这种设计模式极大地提升了代码的灵活性与可维护性。通过这种方式,开发人员可以根据不同的业务需求定义不同的处理逻辑,并且能够很好地组织这些逻辑,避免了在一个庞大的`execute`方法中进行复杂的条件判断所带来的代码复杂性和维护难度。 #### 二、方法名称匹配(Method Name Matching) 在Struts2中,可以通过`method`属性指定具体的请求处理方法。例如,在配置文件中定义了一个带有通配符的Action: ```xml <action name="Login_*" method="{1}" class="mailreader2.Login"> <result>/login_result.jsp</result> </action> ``` 这里的关键点在于`method="{1}"`,其中的`{1}`代表了URL中匹配的部分,即`Login_*`中的`*`部分。这意味着当访问如`/Login_login`或`/Login_logout`这样的URL时,框架将根据URL的后缀来调用对应的处理方法,比如`mailreader2.Login`类中的`login`或`logout`方法。 #### 三、Struts2中的路径问题及通配符映射 在Struts2中处理路径问题时,通常会涉及到相对路径和绝对路径的选择。对于相对路径而言,通常是指相对于当前应用根目录下的路径。而在配置文件中使用通配符进行路径匹配时,则更加灵活和高效。 例如,使用通配符映射: ```xml <action name="*_*" class="com.example.{1}Action" method="{2}"> <result>/result_{1}_{2}.jsp</result> </action> ``` 这里的`*_*`表示任意长度的字符串,而`{1}`和`{2}`分别代表了URL中第一部分和第二部分的值。当用户访问类似`/actions/User_add`的URL时,Struts2会根据URL匹配到对应的Action类`com.example.UserAction`以及方法`add`,并且结果页面为`/result_User_add.jsp`。 #### 四、Action的通配符使用示例 为了更好地理解通配符在Struts2中的使用方式,以下是一些具体的示例: 1. **单个Action类中的多个方法:** ```xml <action name="User*" class="com.example.UserAction" method="{1}"> <result>/user_{1}_result.jsp</result> </action> ``` 对于这个配置,如果URL为`/User_add`,则调用`com.example.UserAction`类中的`add`方法,并显示`/user_add_result.jsp`页面。 2. **多级通配符映射:** ```xml <action name="*_*" class="com.example.{1}Action" method="{2}"> <result>/{1}_{2}_result.jsp</result> </action> ``` 这种配置更加灵活,例如访问`/actions/Student_add`时,会调用`com.example.StudentAction`类中的`add`方法,并显示`/Student_add_result.jsp`页面。 #### 五、总结 通过以上分析可以看出,Struts2中的通配符映射提供了强大的路由机制,使得开发者能够更轻松地管理和扩展应用程序。同时,多个请求处理方法的设计模式也极大地提高了代码的可读性和可维护性。掌握这些技巧将有助于开发者更高效地利用Struts2框架进行开发工作。
<action name= "Login_* " method= "{1} " class= "mailreader2.Login ">
中Login_*带*是什么意思?method= "{1} "带{}这个是什么意思?
====================================================
name= "Login_* "
代表这个action处理所有以Login_开头的请求
method= "{1} "
根据前面请求Login_methodname,调用action中的以methodname命名的方法
class= "mailreader2.Login "
action的类名称
如jsp文件中请求Login_validateUser的action名称,根据上面配置,调用action类mailreader2.Login类中方法validateUser()
又如:
对于Login_update请求,将会调用mailreader2.Login的update()方法。
它的用法同webwork中的!符号的作用,相当于是一个通配符。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Struts2 学习笔记4--Action Method--接收参数
文章分类:Java编程
struts2中的路径问题
注意:在jsp中”/”表示tomcat服务器的根目录,在struts.xml配置文件中”/”表示webapp的根路径,即MyEclipse web项目中的WebRoot路径。
struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径 。
虽然可以用redirect方式解决,但redirect方式并非必要。
解决办法非常简单,统一使用绝对路径。 (在jsp中用request.getContextRoot方式来拿到webapp的路径)
或者使用myeclipse经常用的,指定basePath。
Action Method
配置:
<package name="user" extends="struts-default" namespace="/user">
<action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" method="add">
<result>/user_add_success.jsp</result>
</action>
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result>/user_add_success.jsp</result>
</action>
</package>
总结:
Action执行的时候并不一定要执行execute方法
1、可以在配置文件中配置Action的时候用method=来指定执行哪个方法
2、也可以在url地址中动态指定(动态方法调用DMI )(推荐)
<a href="<%=context %>/user/userAdd">添加用户</a>
<br />
<a href="<%=context %>/user/user!add">添加用户</a>
<br />
前者会产生太多的action,所以不推荐使用。(注:<% String context = request.getContextPath(); %>)
剩余20页未读,继续阅读
- 粉丝: 0
- 资源: 13
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助