知识大全 Struts2通配符映射

Posted

篇首语:欲穷千里目,更上一层楼。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Struts2通配符映射相关的知识,希望对你有一定的参考价值。

Struts2通配符映射  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

struts 的关于method= 意思详解  <action   name= Login_*    method=    class= mailreader Login >  中Login_*带*是什么意思?method= 带这个是什么意思?  ====================================================  name= Login_*   代表这个action处理所有以Login_开头的请求  method=   根据前面请求Login_methodname 调用action中的以methodname命名的方法  class= mailreader Login   action的类名称  如jsp文件中请求Login_validateUser的action名称 根据上面配置 调用action类mailreader Login类中方法validateUser()  又如   对于Login_update请求 将会调用mailreader Login的update()方法   它的用法同webwork中的!符号的作用 相当于是一个通配符   +++++++++++++++++++++++++++++++++++++++++++++++++++++++  struts 中的路径问题  注意 在jsp中 / 表示tomcat服务器的根目录 在struts xml配置文件中 / 表示webapp的根路径 即MyEclipse web项目中的WebRoot路径   总结   struts 中的路径问题是根据action的路径而不是jsp路径来确定 所以尽量不要使用相对路径   虽然可以用redirect方式解决 但redirect方式并非必要   解决办法非常简单 统一使用绝对路径 (在jsp中用request getContextRoot方式来拿到webapp的路径)  或者使用myeclipse经常用的 指定basePath   Action Method   配置   <package name= user extends= struts default namespace= /user >  <action name= userAdd class= bjsxt struts user action UserAction method= add >  <result>/user_add_success jsp</result>  </action>  <action name= user class= bjsxt struts user action UserAction >  <result>/user_add_success jsp</result>  </action>  </package>  总结   Action执行的时候并不一定要执行execute方法   可以在配置文件中配置Action的时候用method=来指定执行哪个方法(前者方法)   也可以在url地址中动态指定(动态方法调用DMI )(推荐)(后者方法)  <a <%=context %>/user/userAdd >添加用户  <br />  <a <%=context %>/user/user!add >添加用户  <br />  前者会产生太多的action 所以不推荐使用 (注 <% String context = request getContextPath(); %>)  再给个案例 大概介绍!使用动态调用DMI的方法 即通过!+方法名的指定方法   UserAction java  import opensymphony xwork ActionContext;  import java util Map;  public class UserAction   private String userName;  private String password;  public String getUserName()   return userName;    public void setUserName(String userName)   this userName = userName;    public String getPassword()   return password;    public void setPassword(String password)   this password = password;    public String execute()  if(!userName equals( aa )||!password equals( aa ))  return error ;  else  Map session=(Map)ActionContext getContext() getSession();  session put( userName userName);  return success ;      public String loginOther()  if(!userName equals( bb )||!password equals( bb ))  return error ;  else  Map session=(Map)ActionContext getContext() getSession();   session put( userName userName);  return success ;        struts xml  <?xml version= encoding= UTF ?>  <!DOCTYPE struts PUBLIC   //Apache Sofare Foundation//DTD Struts Configuration //EN    dtd >  <struts>  <package name= default extends= struts default >  <action name= struts class= action StrutsAction >  <result name= success >/wele jsp</result>  <result name= error >/hello jsp</result>  <result name= input >/hello jsp</result>  </action>  <action name= user class= action UserAction >  <result name= success >/login_wele jsp</result>  <result name= error >/login_error jsp</result>  </action>  <! <action name= loginOther class= action UserAction method= loginOther >  <result name= success >/login_wele jsp</result>  <result name= error >/login_error jsp</result>  </action>   >  </package>  </struts>  login_wele jsp  <%@ page language= java import= java util * pageEncoding= utf %>   <%@ taglib uri= /struts tags prefix= s %>  <!DOCTYPE HTML PUBLIC //W C//DTD HTML Transitional//EN >  <>  <head>  <title>欢迎</title>  <meta equiv= pragma content= no cache >  <meta equiv= cache control content= no cache >  <meta equiv= expires content= >  <meta equiv= keywords content= keyword keyword keyword >  <meta equiv= description content= This is my page >  <!   <link rel= stylesheet type= text/css >   >  </head>  <body>  <s:set value= #session userName name= userName />  你好!<s:property value= #userName />  </body>  </>  login_error jsp  <%@ page language= java import= java util * pageEncoding= UTF %>  <!DOCTYPE HTML PUBLIC //W C//DTD HTML Transitional//EN >  <>  <head>  <title>登陆失败</title>  <meta equiv= pragma content= no cache >  <meta equiv= cache control content= no cache >   <meta equiv= expires content= >  <meta equiv= keywords content= keyword keyword keyword >  <meta equiv= description content= This is my page >  <!   <link rel= stylesheet type= text/css >   >  </head>  <body>  很抱歉!你的登陆失败了!请重新<a >登陆  </body>  </>  login jsp  <%@ page language= java import= java util * pageEncoding= utf %>  <%@ taglib uri= /struts tags prefix= s %>  <%  String path = request getContextPath();  String basePath = request getScheme()+ :// +request getServerName()+ : +request getServerPort()+path+ / ;  %>  <!DOCTYPE HTML PUBLIC //W C//DTD HTML Transitional//EN >   <>  <head>  <base <%=basePath%> >  <title>struts 应用</title>  <meta equiv= pragma content= no cache >  <meta equiv= cache control content= no cache >  <meta equiv= expires content= >  <meta equiv= keywords content= keyword keyword keyword >  <meta equiv= description content= This is my page >  <!   <link rel= stylesheet type= text/css >   >  </head>  <body>  <s:form  action= user!loginOther method= post > 红色部分 你如果想调用userAction中的loginOther方法而不想调用execute方法 直接通过 !+方法名即可 那你就不用再设置struts xml中注释掉的部分了 这样可以不产生太多的action  <s:textfield name= userName label= 请输入姓名 ></s:textfield> <s:textfield name= password label= 请输入密码 ></s:textfield>  <s:submit value= 提交 ></s:submit>  </s:form>  </body>  </>  Action Wildcard(Action 通配符)   配置   <package name= actions extends= struts default namespace= /actions >  <action name= Student* class= bjsxt struts action StudentAction method= >  <result>/Student _success jsp</result>  </action>  <action name= *_* class= bjsxt struts action Action method= >  <result>/ _ _success jsp</result>  <! _success jsp >  </action>  </package>   表示第一第二个占位符  *为通配符  通过action name的通配匹配 获得占位符 可以使用占位符放在result和method class中替代匹配的字符   总结   使用通配符 将配置量降到最低   <a <%=context %>/actions/Studentadd >添加学生  <a <%=context %>/actions/Studentdelete >删除学生  不过 一定要遵守 约定优于配置 的原则   <a <%=context %>/actions/Teacher_add >添加老师  <a <%=context %>/actions/Teacher_delete >删除老师  <a <%=context %>/actions/Course_add >添加课程  <a <%=context %>/actions/Course_delete >删除课程   接收参数值   使用action属性接收参数  只需在action加入getter/setter方法 如参数name=a 接受到参数必须有getName/setName方法   链接 <a user/user!add?name=a&age= >  public class UserAction extends ActionSupport   private String name;  private int age;  public String add()   System out println( name= + name);  System out println( age= + age);  return SUCCESS;    public String getName()   return name;    public void setName(String name)   this name = name;    public int getAge()   return age;    public void setAge(int age)   this age = age;        使用Domain Model接收参数  将之前的属性放入到POJO 并设置属性的setter/getter方法  链接 使用Domain Model接收参数<a user/user!add?user name=a&user age= >添加用户  public class UserAction extends ActionSupport   private User user;  //private UserDTO userDTO;  public String add()   System out println( name= + user getName());  System out println( age= + user getAge());  return SUCCESS;    public User getUser()   return user;    public void setUser(User user)   this user = user;      public class User   private String name;  private int age;  public String getName()   return name;    public void setName(String name)   this name = name;    public int getAge()   return age;    public void setAge(int age)   this age = age;        使用ModelDriven接收参数  Action实现ModelDriven接口 实现getModel()方法   这样user需要自己new出来 getModel返回user   链接 使用ModelDriven接收参数<a user/user!add?name=a&age= >添加用户  public class UserAction extends ActionSupport implements ModelDriven<User>   private User user = new User();  public String add()   System out println( name= + user getName());  System out println( age= + user getAge());  return SUCCESS;    @Override  public User getModel()   return user;      字符编码  配置   <constant name= struts i n encoding value= GBK /> <! internationalization >  在struts 中不起作用 属于bug 在struts 中修改   解决方案   修改web xml 中   <filter>  <filter name>struts </filter name>  <! struts 中使用filter >  <! <filter class> apache struts dispatcher ng filter StrutsPrepareAndExecuteFilter</filter class> >  <! struts 中使用的filter >  <filter class> apache struts dispatcher FilterDispatcher</filter class>  </filter>  =============================================================  Struts 一个Action内包含多个请求处理方法的处理(三种方式)  Struts 提供了DispatchAction 从而允许一个Action内包含多个请求处理方法 Struts 也提供了类似的功能 处理方式主要有以下三种方式    动态方法调用   DMI Dynamic Method Invocation 动态方法调用   动态方法调用是指 表单元素的action不直接等于某个Action的名字 而是以如下形式来指定对应的动作名   <form method= post action= userOpt!login action >  则用户的请求将提交到名为 userOpt 的Action实例 Action实例将调用名为 login 方法来处理请求 同时login方法的签名也是跟execute()一样 即为public String login() throws Exception   注意 要使用动态方法调用 必须设置Struts 允许动态方法调用 通过设置struts enable DynamicMethodInvocation常量来完成 该常量属性的默认值是true        示例   修改用户登录验证示例 多增加一个注册用户功能        修改Action类   package qiujy web struts action;  import opensymphony xwork ActionContext;  import opensymphony xwork ActionSupport;  /**  *@authorqiujy  *@version   */  publicclass LoginAction extends ActionSupport  private String userName;  private String password;  private String msg; //结果信息属性 cha138/Article/program/Java/ky/201311/28083

相关参考

知识大全 struts2中使用token避免重复提交

  在strutsxml中  <actionname=registerclass=sunxinstrutsactionRegisterAction>  <!配置异常映射当Regist

知识大全 泛型类型的子类及通配符的使用

  本文讲述以下几个方面的内容试图说明泛型类型的子类及通配符的使用  ()   子类及替换原则  ()   使用extends关键字的通配符

知识大全 Oracle通配符,运算符的使用

Oracle通配符,运算符的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  oracle通配

知识大全 mysql和oracle常用内容比较

  注释  oracle使用的是–(两个)批量注释/**/  mysql使用的是#批量注释/**/  通配符的使用  mysql和oracle都支持通配符%用以模糊查询mysql还可以用instr(p

知识大全 用Delphi实现虚拟盘映射

用Delphi实现虚拟盘映射  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本实例演示如何映射和断开

知识大全 映射对象标识符

精通Hibernate:映射对象标识符  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java语

知识大全 hibernate关系映射

  一对象关系映射基础  对象间的基本关系  首先我简要阐明一下对象之间的基本关系在这以后UML的课程中也会深入的学习对象具有的四种基本关系  关联关系关联关系在设计模式中是被提倡优先使用于继承关系的

知识大全 Hibernate如何映射枚举类型

Hibernate如何映射枚举类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  问题  Jav

知识大全 Hibernate各种映射关系总结

Hibernate各种映射关系总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  多对一  第一

知识大全 Hibernate ORM 对象-关系 映射

HibernateORM对象-关系映射  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Hiber