1.  

在博客上我已经基本上解释struts.xml基本配置。配置过程最为基本的是action的动态配置。

一、Action的创建方法

1)实现Action接口

2)继承ActionSupport类,覆写当中的方法

3)不继承不论什么类都能够实现,关键是在struts.xml中进行配置

二、Action动态方法的调用

在实际的项目中。一个action类的中,可能存在多个方法,而不同的方法运行的效果是不一样的,假设依照了一般性的配置。将无形的添加了程序猿的负担

第一种方法:   在struts.xml中的action属性标签中用method属性指定方法名(不怎么推荐使用)

另外一种方法: jsp页面中指定你要调用的那个方法

<form action=”login!myfun.action”,method=”post”>

在client请求中进行动态的配置:映射名!方法名.action

这样能够动态的调用action中的myfun方法,就不要在action标签中进行method的配置

第三种方法:使用通配符进行配置(推荐使用:适用情况当一个类中存在较多的响应方法)

在配置<action> 时。能够在 name,class,method 中使用通配符。这是 第二种形式的动态方法调用

  1. <action name="*user" class="com.zzjmay.action.UserAction" method="{1}">
  2. //这样的通配是针对的是同一个action中。响应不同的方法
  3.  
  4. 在jsp页面中调用的时候
  5. <form action="loginuser.action" method="post">
  6. <!-- 须要注意的是要保证表单中的name的命名要和Action中属性的命名保持一致 -->
  7. 用户名:<input type="text" name="username" id="username"><br>
  8. 密 码:<input type="password" name="password" id="password">
  9. <br>
  10. <input type="submit" value="提交">
  11.  
  12. </form>

注意:通过使用通配符的时候相当于占位操作。当中的{1}表示第一个通配符。就上面的样例来讲,当jsp页面中是loginuser.action进行调用的时候,实际上出发的Action类中的login()方法

     

  通过通配符实现,不同的类响应不同的类中的方法:

<action name=“*_*" class="action.{1}Action" method="{2}">

    <result >/{2}.jsp</result>

</action>

三、 Action的动态结果的配置

含义:在实际执行其中,Action类的处理业务的过程中,可能因为业务条件的复杂。会跳转到不同页面,那么为了节省result的配置。我们通常会採用动态结果的配置。事实上非常像我们在servlet中进行全局的forward的配置。

UserAction.java

public class UserAction extends ActionSupport {

    private String nextResult;

    ...

}

Struts2.xml

<action name="user" class="action.UserAction">

    <result>/{nextResult}</result>

</action>

四、接收用户数据(推荐使用的实现ModelDriven的接口)

在这篇博客中我仅仅是介绍经常使用的,而且在实际项目中效率较高的方法。

我之所以推荐ModelDriven接口的方法,原因就是能够非常好的分离显示界面和业务逻辑的分离(解耦性)。

实现ModelDriven接口

步骤:

u    实现用户登录功能

u    创建User.java类

Ø          声明用户登录信息

Ø          创建无參构造

u   创建Action类

Ø          实现com.opensymphony.xwork2.ModelDriven接口

Ø          声明User类对象并实例化

Ø         实现getModel ()方法。返回User类对象

u    创建JSP页面

Ø         表单元素使用”属性”设置name属性

注意:

1)  首先,action要实现ModelDriven的接口。默认实现getModel()方法

2)  要在action中自己来实例化user的对象,而不像前面一种方法是有struts2的框架实现的

3)  比較突出的就是在jsp页面中。表单元素的name属性,直接用名字就能够来

UserAction.java

  1. public class UserAction implements ModelDriven<User> {
  2. //要实例化
  3. private User user=new User();
  4.  
  5. public User getUser() {
  6. return user;
  7. }
  8.  
  9. public void setUser(User user) {
  10. this.user = user;
  11. }
  12. public String myfun() throws Exception {
  13. System.out.println("username="+user.getUsername());
  14. System.out.println("password="+user.getPassword());
  15. System.out.println("myfun.....");
  16. //用来进行处理
  17. if(user.getUsername().equals(user.getPassword())){
  18. return "success";
  19. }else{
  20. return "error";
  21. }
  22.  
  23. }
  24.  
  25. public User getModel() {
  26. // TODO Auto-generated method stub
  27. return user;
  28. }
  29.  
  30. }

login.jsp

  1. <form action="loginuser.action" method="post">
  2. <!-- 须要注意的是要保证表单中的name的命名要和Action中属性的命名保持一致 -->
  3. 用户名:<input type="text" name="username" id="username"><br>
  4. 密 码:<input type="password" name="password" id="password">
  5. <br>
  6. <input type="submit" value="提交">
  7.  
  8. </form>

五、在Action中訪问Servlet API

訪问Servlet API的实际项目中有两种的方法訪问Servlet API

1)解耦的方法(实现三大接口程序RequestAware,ApplicationAware,SessionAware)

  1. public class UserAction2 implements ModelDriven<User> ,RequestAware,SessionAware,ApplicationAware{
  2.  
  3. private User user = new User();
  4.  
  5. private Map<String, Object> requestMap;
  6. private Map<String, Object> sessionMap;
  7. private Map<String, Object> applicationMap;
  8.  
  9. public void setApplication(Map<String, Object> applicationMap) {
  10. this.applicationMap=applicationMap;
  11.  
  12. }
  13.  
  14. public void setSession(Map<String, Object> sessionMap) {
  15. this.sessionMap=sessionMap;
  16. }
  17.  
  18. public void setRequest(Map<String, Object> requestMap) {
  19. this.requestMap=requestMap;
  20.  
  21. }
  22.  
  23. public User getUser() {
  24. return user;
  25. }
  26.  
  27. public void setUser(User user) {
  28. this.user = user;
  29. }
  30.  
  31. public String myfun() throws Exception {
  32. System.out.println("username=" + user.getUsername());
  33. System.out.println("password=" + user.getPassword());
  34. System.out.println("myfun2.....");
  35. // 用来进行处理
  36. if (user.getUsername().equals(user.getPassword())) {
  37.  
  38. sessionMap.put("Succ", "成功的哇2!
  39.  
  40. !。");
  41. Bookbiz bookbiz=new Bookbiz();
  42.  
  43. applicationMap.put("books",bookbiz.getBooks());
  44.  
  45. return "success";
  46. } else {
  47.  
  48. requestMap.put("errorMsg", "登陆失败了2");
  49. return "error";
  50. }
  51.  
  52. }
  53.  
  54. public User getModel() {
  55. // TODO Auto-generated method stub
  56. return user;
  57. }

注意:在非解耦的方式中,struts2框架已经将相应的四大应用作用域给封装到了Map集合中,所以这里一開始定义的三个Map集合中能够相当于操作四大作用域对象

2)非解耦的方法(实现两大接口程序ServletReuqestAware,ServletContextAware):非解耦的意思就是说直接操作的Servlet API对象

  1. public class UserAction4 implements ModelDriven<User>,ServletRequestAware,ServletContextAware{
  2.  
  3. private User user = new User();
  4.  
  5. private HttpServletRequest request;
  6. private HttpSession session;
  7. private ServletContext application;
  8.  
  9. public void setServletContext(ServletContext application) {
  10. this.application = application;
  11.  
  12. }
  13.  
  14. public void setServletRequest(HttpServletRequest request) {
  15. this.request = request;
  16.  
  17. }
  18.  
  19. public User getUser() {
  20. return user;
  21. }
  22.  
  23. public void setUser(User user) {
  24. this.user = user;
  25. }
  26. ………………

注意:在实现接口中仅仅实现了request和application的获取

在实际项目开发其中。须要的获取session的方法是通过Httpsession session= request.getsession();

版权声明:本文博客原创文章,博客,未经同意,不得转载。

struts.xml在Action配置具体解释的更多相关文章

  1. struts2 从一个action跳转到另一个action的struts.xml文件的配置

    解释: 想要用<result>跳转到另一个action,原来的配置代码是: <action name="insertDept" class="strut ...

  2. Spring+mybatis+struts框架整合的配置具体解释

    学了非常久的spring+mybatis+struts.一直都是单个的用他们,或者是两两组合用过,今天总算整合到一起了,配置起来有点麻烦.可是配置完一次之后.就轻松多了,那么框架整合配置具体解释例如以 ...

  3. Struts2配置文件复用代码【web.xml、struts.xml、常量配置】

    web.xml的分发器代码: <!-- 引入struts核心过滤器 --> <filter> <filter-name>struts2</filter-nam ...

  4. struts.xml文件中配置tiles.xml

    Apache Tiles是一个JavaEE应用的页面布局框架.Tiles框架提供了一种模板机制,可以为某一类页面定义一个通用的模板,该模板定义了页面的整体布局.布局由可以复用的多个块组成,每个页面可以 ...

  5. Struts的default.properties五个配置 一般利用按着配置文件的加载的顺序,后面文件和前面文件相同的配置,后面的会把前面的文件的值覆盖的原则 在struts.xml里面进行配置

    1 struts.i18n.encoding=UTF-8 配置编码 2 struts.action.extension=action,, 配置浏览器访问地址的后缀 3 struts.devMode = ...

  6. struts.xml中的配置常量的含义

    struts.serve.static.browserCache 该属性设置浏览器是否缓存静态内容.当应用处于开发阶段时,我们希望每次请求都获得服务器的最新响应,则可设置该属性为false. stru ...

  7. 一 SSH整合:Spring整合Struts2的两种方式,struts.xml管理Action&Bean管理Action

    SSH回顾 1 引入jar包 Struts2的jar包 D:\Struts2\struts-2.3.35\apps\struts2-blank\WEB-INF\lib  开发基本包 Struts2有一 ...

  8. Struts2-3.struts.xml的action可以简写

    如果只是跳转到某个页面的话,可以这样写 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE s ...

  9. Struts2-2.了解struts.xml>package>action>result的name属性

    result决定跳转到哪个视图(jsp),可以预设值有多个. <?xml version="1.0" encoding="UTF-8" ?> < ...

随机推荐

  1. Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明)

    一.隐藏和显示元素 $('#button_save_12').css('display', 'none'); // 隐藏按钮 $('#button_save_12').css('display', ' ...

  2. Codeforces Round #256 (Div. 2) D. Multiplication Table(二进制搜索)

    转载请注明出处:viewmode=contents" target="_blank">http://blog.csdn.net/u012860063?viewmod ...

  3. 染色法判断是否是二分图 hdu2444

    用染色法判断二分图是这样进行的,随便选择一个点, 1.把它染成黑色,然后将它相邻的点染成白色,然后入队列 2.出队列,与这个点相邻的点染成相反的颜色 根据二分图的特性,相同集合内的点颜色是相同的,即 ...

  4. 建立Hibernate二级Cache

    建立Hibernate二级Cache它需要两个步骤:首先,一定要使用什么样的数据并发策略,然后配置缓存过期时间,并设置Cache提供器. 有4种内置的Hibernate数据并发冲突策略,代表数据库隔离 ...

  5. proxy pattern 代理模式

    常用的几种代理模式简要说明如下:  (1) 远程代理(Remote Proxy):为一个位于不同的地址空间的对象提供一个本地的代理对象,这个不同的地址空间可以是在同一台主机中,也可是在另一台主机中,远 ...

  6. WPF 3D: MeshGeometry3D纹理坐标的正确定义

    原文 WPF 3D: MeshGeometry3D纹理坐标的正确定义 为了使基于2D的纹理显示在3D对象中,我们必须定义3D Mesh对象的纹理贴图坐标.在WPF中,此项功能则通过MeshGeomet ...

  7. Hello World! 2010年山东省第一届ACM大学生程序设计竞赛

    Hello World! Time Limit: 1000MS Memory limit: 65536K 题目描述 We know that Ivan gives Saya three problem ...

  8. Directx11学习笔记【十三】 实现一个简单地形

    本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5510294.html 上一个教程我们实现了渲染一个会旋转的立方体, ...

  9. 【剑指offer】删除字符也出现在一个字符串

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27110873 剑指offer上的字符串相关题目. 题目:输入两个字符串,从第一字符串中删除 ...

  10. 经常使用Log日志打印输出

    /** * log刊物 * @author Jenly * */ public class LogUtils { public static final String TAG = "Jenl ...