zoukankan      html  css  js  c++  java
  • Struts2 IncludeModules(包含 <include file="login.xml" />)

    新建web项目;

    Build Path:

    在struts.xml中有一个配置叫做:include,也就是我们可以把另外一个

    xml文件当成struts.xml包含在struts.xml中,比如我们看到的login.xml

    文件。

    login.xml文件就是一个普通的struts.xml文件,对于struts.xml来说,是

    直接把login.xml中的内容直接复制到struts.xml中,这就是包含.

    include有什么意义呢?

      当然有意义,比如说将来我们要把模块分给不同的人去做,张三做a部分,

    李四做b部分……这是后他们的开发是不在同一台机器上面的,如果大家都是公用

    同一个struts.xml文件的话,都写到一起,这样产生冲突的可能性就会很大,而且

    调试起来很不好调试,很麻烦了。然而当我们自己写自己模块的配置,不要影响其他人

    我们会把一些公用的配置写到struts.xml文件中,让后我们用包含,把所有人的都包含

    进struts.xml文件中,这样就可以了。

      我们看到这个include是比较简单的,但是他的意义是很大的

    ------------------------------------Hongten---------------------------------

    struts.xml

    代码:

    <?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.devMode" value="true" />
        <include file="login.xml" />
    </struts>

    ------------------------------------Hongten---------------------------------

    login.xml

    代码:

    <?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>
        <package name="login" extends="struts-default" namespace="/login">
            <action name="login*" class="com.bjsxt.struts2.user.action.LoginAction{1}">
                <result>/user_login_success.jsp</result>
            </action>
        </package>
    </struts>

    ------------------------------------Hongten---------------------------------

    LoginAction2实现了RequestAware,SessionAware,ApplicationAware接口

    他在实现接口的同时,接口提供三个方法setRequest(),setSession(),setApplication()

    这里涉及到一种设计思想:IOC(inverse of control ,控制反转),也称为:DI(dependency injection ,依赖注入)

    一个请求的都来,struts2会帮我们找到相应的action,他会帮我们new一个action出来

    如LoginAction,他new完之后会检查LoginAction实现了RequestAware接口吗?如果实现了

    那么这时就会调用setRequest(Map request)方法(原本是HttpRequest,这时会转为Map类型的request),

    到最后,就是谁初始化Action谁就调用setRequest(Map request)方法。

    DI:

    private Map<String, Object> request;
    public void setRequest(Map<String, Object> request) {
      this.request = request;
     }

    request属性,在setRequest(Map reqeust)方法中,是不是依赖别人注入一个值后

    我们才能使用这个request属性值: request.put("r1", "r1");
    过程:request成员变量依赖与struts2把相关的值注给request,不是request自己主动

    去拿一个值。

    那位什么又叫做控制反转呢?

    本来自己控制嘛!

    然后给别人控制了嘛!

    所以就反转了嘛!

    ------------------------------------Hongten---------------------------------

    LoginAction2.java

    代码:

    package com.bjsxt.struts2.user.action;

    import java.util.Map;

    import org.apache.struts2.interceptor.ApplicationAware;
    import org.apache.struts2.interceptor.RequestAware;
    import org.apache.struts2.interceptor.SessionAware;

    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;

    public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware {
     
     private Map<String, Object> request;
     private Map<String, Object> session;
     private Map<String, Object> application;
     
     
     public String execute() {
      request.put("r1", "r1");
      session.put("s1", "s1");
      application.put("a1", "a1");
      return SUCCESS;
     }

     @Override
     public void setRequest(Map<String, Object> request) {
      this.request = request;
     }

     @Override
     public void setSession(Map<String, Object> session) {
      this.session = session;
     }

     @Override
     public void setApplication(Map<String, Object> application) {
      this.application = application;
     } 
     
    }

    ------------------------------------Hongten---------------------------------

    index.jsp

    代码:

    <?xml version="1.0" encoding="GB18030" ?>
    <%@ page language="java" contentType="text/html; charset=GB18030"
        pageEncoding="GB18030"%>

    <% String context = request.getContextPath(); %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
    <title>Insert title here</title>
    </head>
    <body>
    <form name="f" action="" method="post">
    用户名:<input type="text" name="name"/>
    密码:<input type="text" name="password"/>
    <br />
    <input type="button" value="submit1" onclick="javascript:document.f.action='login/login1';document.f.submit();" />
    <input type="button" value="submit2" onclick="javascript:document.f.action='login/login2';document.f.submit();" />
    <input type="button" value="submit3" onclick="javascript:document.f.action='login/login3';document.f.submit();" />
    <input type="button" value="submit4" onclick="javascript:document.f.action='login/login4';document.f.submit();" />
    </form>
     
    </body>
    </html>

    ------------------------------------Hongten---------------------------------

    user_login_success.jsp

    代码:

    <?xml version="1.0" encoding="GB18030" ?>
    <%@ page language="java" contentType="text/html; charset=GB18030"
        pageEncoding="GB18030"%>
        <%@taglib uri="/struts-tags" prefix="s" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
    <title>Insert title here</title>
    </head>
    <body>
     User Login Success!
     <br />
     <s:property value="#request.r1"/> | <%=request.getAttribute("r1") %> <br />
     <s:property value="#session.s1"/> | <%=session.getAttribute("s1") %> <br />
     <s:property value="#application.a1"/> | <%=application.getAttribute("a1") %> <br />
    </body>
    </html>

    ------------------------------------Hongten---------------------------------

                                       感谢:尚学堂-马士兵

    ------------------------------------Hongten---------------------------------

  • 相关阅读:
    DDD框架基础知识
    ORM之Entity Framework(EF)
    ORM之Dapper
    ORM基础知识
    DI 依赖注入之unity的MVC版本使用Microsoft.Practices.Unity1.2与2.0版本对比
    ssh免密连接远程服务器
    Java字节码
    VIM基本命令及自用配置
    Linux字符设备驱动实现
    Python绘图matplotlib
  • 原文地址:https://www.cnblogs.com/hongten/p/2125028.html
Copyright © 2011-2022 走看看