• Struts2学习笔记


     有三种方法可以使一个Action处理多个请求

    1. 动态方法调用DMI
    2. 定义逻辑Acton
    3. 在配置文件中使用通配符

    这里就说一下Dynamic Method nvocation ,动态方法调用,什么是动态方法调用呢,就是一个Action里面包含多个方法调用

    一般情况下,我们只需要在Action中写一个execute的方法,并返回String 就可以了,或者继承ActionSupport父类,重写这个方法。

    但是这样在一个Action中只能完成一个请求,为了解决真实开发中,同一个Action能处理类似的业务和资源,我们就可以用到动态方法调用了

    -------------------------------------------

    以下看看例子:

    1.先写两个页面

    第一个页面是登录页面DMI_login.jsp主要使用login的Action,

    第二个页面是DMI_register.jsp主要使用的是register的Action

    初学者可能会想写两个Action,一个叫login,一个叫register,然后完成两种不同的逻辑处理,单细心想一想其实两个处理的结果都是一样,就是返回一个以存在的用户,但在这里,我们就可以在这个jsp页面当中把Action写成DMIAction!login 和 DMIAction!register,这个的意思是,DMIAction的类里面的login方法和register方法

    //DMI_login.jsp
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@taglib prefix="s" uri="/struts-tags"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<h4>请输入</h4>
    	<s:form action="DMIAction!login">
    		<s:textfield name="username" label="User Name" />
    		<s:password name="password" label="Password" />
    		<s:submit value="Login" />
    	</s:form>
    
    </body>
    </html>
    

      

    //DMI_register.jsp
    
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@taglib prefix="s" uri="/struts-tags"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<h4>注册</h4>
    	<s:form action="DMIAction!register">
    		<s:textfield name="username" label="User Name" />
    		<s:password name="password" label="Password" />
    		<s:submit value="Register" />
    	</s:form>
    </body>
    </html>
    

      

    2.struts.xml的配置

    配置跟平成一样,只需要对Action和实现类做映射就可以了,这里特别要注意的是以下这个配置,这个配置主要是打开动态方法调用,如果这里没有打开,则不能使用动态方法调用,访问的结果将会出现404的页面

     <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    
    <struts>
        <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
        <package name="default" extends="struts-default">
            
            <action name="DMIAction" class="struts2.action.DMIAction">
                <result name="success">RegisterSuccess.jsp</result>
            </action>
            
        </package>
    </struts>

    3.编写Action

    跟平成的写的Action没两样,就是在Action里面实现页面调用到的那些方法,这里使用了两个方法,一个是login 一个是register,所以我们需要在这个类中实现这两个方法

    package struts2.action;
    
    import java.util.Map;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class DMIAction extends ActionSupport {
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
    
        public String login() {
            return SUCCESS;
        }
    
        public String register() {
            return SUCCESS;
        }
    
        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;
        }
        
        private Map sessionMap;
        private Map applicationMap;
        public void setSession(Map sessionMap) {
            this.sessionMap = sessionMap;
        }
        
        public void setApplication(Map applicationMap) {
            this.applicationMap = applicationMap;
        }
    }

    总结:现在可以运行一下,看看结果,这里还有其它的几种方法可以实现相同的结果,可以查看其它文章

  • 相关阅读:
    使goroutine同步的方法总结
    PHP类自动加载技术
    swoole架构分析
    网站用户行为分析——HBase的安装与配置
    Java基础——异常处理
    大数据技术原理与应用——分布式文件系统HDFS
    大数据技术原理与应用——大数据处理架构Hadoop
    廖老师的Python教程——安装Python
    廖老师的Python教程——Python简介
    大数据技术原理与应用——大数据概述
  • 原文地址:https://www.cnblogs.com/oscar1987121/p/6077809.html
Copyright © 2020-2023  润新知