前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Struts2 IncludeModules(包含 <include file="login.xml" />)

Struts2 IncludeModules(包含 <include file="login.xml" />)

作者头像
Hongten
发布2018-09-13 17:15:50
4590
发布2018-09-13 17:15:50
举报
文章被收录于专栏:HongtenHongten

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011-08-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档