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" οnclick="javascript:document.f.action='login/login1';document.f.submit();" />
<input type="button" value="submit2" οnclick="javascript:document.f.action='login/login2';document.f.submit();" />
<input type="button" value="submit3" οnclick="javascript:document.f.action='login/login3';document.f.submit();" />
<input type="button" value="submit4" οnclick="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---------------------------------

转载于:https://www.cnblogs.com/hongten/archive/2011/08/02/2125028.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值