您的位置:首页 > 编程语言 > Java开发

struts.xml在Action配置具体解释

2015-08-15 19:12 417 查看
在博客上我已经基本上解释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 中使用通配符。这是 第二种形式的动态方法调用
<action name="*user" class="com.zzjmay.action.UserAction" method="{1}">//这样的通配是针对的是同一个action中。响应不同的方法在jsp页面中调用的时候<form action="loginuser.action" method="post"><!-- 须要注意的是要保证表单中的name的命名要和Action中属性的命名保持一致 -->用户名:<input type="text" name="username" id="username"><br>密     码:<input type="password" name="password" id="password"><br><input type="submit" value="提交"></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.javapublic 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
public class UserAction implements ModelDriven<User>  {//要实例化private User user=new User();public User getUser() {return user;}public void setUser(User user) {this.user = user;}public String myfun() throws Exception {System.out.println("username="+user.getUsername());System.out.println("password="+user.getPassword());System.out.println("myfun.....");//用来进行处理if(user.getUsername().equals(user.getPassword())){return "success";}else{return "error";}}public User getModel() {// TODO Auto-generated method stubreturn user;}}
login.jsp
<form action="loginuser.action" method="post"><!-- 须要注意的是要保证表单中的name的命名要和Action中属性的命名保持一致 -->用户名:<input type="text" name="username" id="username"><br>密     码:<input type="password" name="password" id="password"><br><input type="submit" value="提交"></form>
五、在Action中訪问Servlet API訪问Servlet API的实际项目中有两种的方法訪问Servlet API1)解耦的方法(实现三大接口程序RequestAware,ApplicationAware,SessionAware)
public class UserAction2 implements ModelDriven<User> ,RequestAware,SessionAware,ApplicationAware{private User user = new User();private Map<String, Object> requestMap;private Map<String, Object> sessionMap;private Map<String, Object> applicationMap;public void setApplication(Map<String, Object> applicationMap) {this.applicationMap=applicationMap;}public void setSession(Map<String, Object> sessionMap) {this.sessionMap=sessionMap;}public void setRequest(Map<String, Object> requestMap) {this.requestMap=requestMap;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}public String myfun() throws Exception {System.out.println("username=" + user.getUsername());System.out.println("password=" + user.getPassword());System.out.println("myfun2.....");// 用来进行处理if (user.getUsername().equals(user.getPassword())) {sessionMap.put("Succ", "成功的哇2!!。");Bookbiz bookbiz=new Bookbiz();applicationMap.put("books",bookbiz.getBooks());return "success";} else {requestMap.put("errorMsg", "登陆失败了2");return "error";}}public User getModel() {// TODO Auto-generated method stubreturn user;}
注意:在非解耦的方式中,struts2框架已经将相应的四大应用作用域给封装到了Map集合中,所以这里一開始定义的三个Map集合中能够相当于操作四大作用域对象2)非解耦的方法(实现两大接口程序ServletReuqestAware,ServletContextAware):非解耦的意思就是说直接操作的Servlet API对象
public class UserAction4 implements ModelDriven<User>,ServletRequestAware,ServletContextAware{private User user = new User();private HttpServletRequest request;private HttpSession session;private ServletContext application;public void setServletContext(ServletContext application) {this.application = application;}public void setServletRequest(HttpServletRequest request) {this.request = request;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}………………
注意:在实现接口中仅仅实现了request和application的获取在实际项目开发其中。须要的获取session的方法是通过Httpsession session= request.getsession();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: