专栏首页HongtenStruts2 IncludeModules(包含 <include file="login.xml" />)

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---------------------------------

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • My Notepad

    I have spent near more two weeks to write this Notepad application. At this mome...

    Hongten
  • Maven with Multi-module

    For example, the hongten-security project, the structure of the hongten-security...

    Hongten
  • Command mvn jetty:run

       You should generate a web project with maven first. 

    Hongten
  • 对接常用的工具方法,request转map,转签名字符串等

    深雾
  • 清智科技张磊:从AEBS切入,做出适合中国道路的智能驾驶辅助系统 | 镁客请讲

    根据2016年12月,国家交通运输部发布的推荐性交通运输行业标准《营运客车安全技术条件》(JT/T1094-2016)规定:2018年4月1日起,新生产车超过9...

    镁客网
  • 数据字典生成工具之旅(5):DocX组件读取与写入Word

          由于上周工作比较繁忙,所以这篇文章等了这么久才写(预告一下,下一个章节正式进入NVelocity篇,到时会讲解怎么使用NVelocity做一款简易的...

    用户1168362
  • tomcat请求处理分析(六)servlet的处理过程

    1.1.1.1  servlet的解析过程 servlet的解析分为两步实现,第一个是匹配到对应的Wrapper,第二个是加载对应的servlet并进行数据,这...

    cfs
  • 深入学习 Node.js Http

    Expect 是一个请求消息头,包含一个期望条件,表示服务器只有在满足此期望条件的情况下才能妥善地处理请求。规范中只规定了一个期望条件,即 Expect: 10...

    阿宝哥
  • hibernate多表查询

    当inverse="true" 代表关系是由多方来维护的,也就是由街道方来维护的。

    HUC思梦
  • 如何启动一个本地静态服务器

    学习前端开发,想要调试静态页面以及js,发现直接打开本地会有跨域异常,因此需要启动一个静态服务器,只负责当前目录的文件路由,

    木子星兮

扫码关注云+社区

领取腾讯云代金券