• struts.xml在Action配置具体解释


    在博客上我已经基本上解释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.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

    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 stub
    		return 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 API

         1)解耦的方法(实现三大接口程序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 stub return 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();


        


       





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

  • 相关阅读:
    清除微信浏览器缓存
    JS实现HTML标签转义及反转义
    mvc中服务器端、客户端属性验证
    Ajax.ActionLink参数详解
    Ajax.BeginForm参数详解
    AjaxHelper简介
    将博客搬至CSDN
    Sequelize小记
    端口: 查看端口状态
    搭建git服务器
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4732957.html
Copyright © 2020-2023  润新知