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