最近听了马士兵老师的一个视频,讲的struts访问web元素
1:jsp页面 accessWeb.jsp
<body>
取得Map类型的request,response,application,真实类型的HttpServletRequest,HttpServletResponse,ServletContext的引用:
<ol>
<li>前三者:依赖于容器</li>
<li>前三者:IOC</li>
<li>后三者:依赖于容器</li>
<li>后三者:IOC</li>
</ol>
<br/>
<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>
2:struts.xml配置
<package name="login" extends="struts-default" namespace="/login">

<action name="login*" class="com.capinfotech.web.action.LoginAction{1}">
<result name="success">/user_login_success.jsp</result>
</action>

</package>
3:LoginAction的内容
LoginAction1.java:
public class LoginAction1 extends ActionSupport{

private static final long serialVersionUID = 7964423947654287569L;

private Map request;
private Map session;
private Map application;

public LoginAction1() {
request = (Map)ActionContext.getContext().get("request");
session = ActionContext.getContext().getSession();
application = ActionContext.getContext().getApplication();
}

public String execute() {
request.put("r1", "r1");
session.put("s1", "s1");
application.put("a1", "a1");
return SUCCESS;
}
}
LoginAction2.java:
public class LoginAction2 extends ActionSupport implements RequestAware, SessionAware, ApplicationAware{
private static final long serialVersionUID = 6409381047458882347L;

private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application;

//DI dependency injection
//IOC(inverse of control)
public void setRequest(Map<String, Object> request) {
this.request = request;
} public void setSession(Map<String, Object> session) {
this.session = session;
}

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

public String execute() {
request.put("r1", "r1");
session.put("s1", "s1");
application.put("a1", "a1");
return SUCCESS;
}
}
LoginAction3.java:
public class LoginAction3 extends ActionSupport{
private static final long serialVersionUID = -1849003438117251182L;

private HttpServletRequest request;
private HttpSession session;
private ServletContext application;

public LoginAction3() {
request = ServletActionContext.getRequest();
session = request.getSession();
application = session.getServletContext();
}

public String execute() {
request.setAttribute("r1", "r1");
session.setAttribute("s1", "s1");
application.setAttribute("a1", "a1");
return SUCCESS;
}}

LoginAction4.java:
public class LoginAction4 extends ActionSupport implements ServletRequestAware{
private static final long serialVersionUID = -9142255841666204739L;

private HttpServletRequest request;
private HttpSession session;
private ServletContext application;

public String execute() {
request.setAttribute("r1", "r1");
session.setAttribute("s1", "s1");
application.setAttribute("a1", "a1");
return SUCCESS;
} public void setServletRequest(HttpServletRequest request) {
this.request = request;
this.session = request.getSession();
this.application = session.getServletContext();
}}

4: user_login_success.jsp
<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/>
<s:property value="#attr.a1"/><br/>
<s:property value="#attr.s1"/><br/>
<s:property value="#attr.r1"/><br/>
<s:debug />
</body>
5: 程序显示的结果
User Login Success!
r1 | r1
s1 | s1
a1 | a1
a1
s1
r16:总结
最常用的是第二种,即LoginAction2.java的内容,实现了相应的接口,当程序运行时,如果发现该类实现了这几个接口,如RequestAware接口,那么系统会直接把此时的request注入,有Spring的DI和IOC思想