访问web元素
struts.xml:
<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>
jsp:
<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>
result jsp:
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></s:debug>
<br />
注意:#attr表示模糊查找属性值,在request>session>application三个范围中查找属性。
访问request等三种方式:
1、从上下文中取得,直接赋值
public LoginAction1() {
request = (Map)ActionContext
.getContext().get("request");
session = ActionContext.getContext().getSession();
application = ActionContext.getContext().getApplication();
}
2、 实现RequestAware,SessionAware, ApplicationAware三个接口,依赖注入(控制反转) 最常用
public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware
{
private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application;
//DI dependency injection
//IoC inverse of control
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;
}
}
3、直接从ServletActionContext中获取
public LoginAction3() {
request = ServletActionContext
.getRequest();
session = request.getSession();
application = session.getServletContext();
}
4、实现ServletRequestAware接口,实现setServletRequest方法
public class LoginAction4 extends ActionSupport implements ServletRequestAware
{
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;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
this.session = request.getSession();
this.application = session.getServletContext();
}
}
结论:
取得Map类型request,session,application,真实类型 HttpServletRequest, HttpSession, ServletContext的引用:
1.前三者:依赖于容器
2.前三者:IOC (只用这种)
3.后三者:依赖于容器
4.后三者:IOC
模块包含
在struts.xml中配置可包含其他xml中的配置,这样利于模块配置之间解耦
struts.xml:
<struts>
<constant name="struts.devMode" value="true" />
<include file="login.xml" />
</struts>
login.xml
<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>
默认Action(默认当找不到Action,就由这个Action处理)
注意:default-action-ref不能转发Action,只能转发到结果JSP页面,不会去调用Action#execute
所以bug,一般不要用,使用其他方式,如web.xml:
<welcome-file-list>
<welcome-file>index</welcome-file>
</welcome-file-list>
配置:
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index"></default-action-ref>
<action name="index">
<result>/default.jsp</result>
</action>
</package>
在struts2文档中这样说明:
Action Default
Usually, if an action is requested, and the framework can't map the request to an action name, the result will be the usual "404 - Page not found" error. But, if you would prefer that an omnibus action handle any unmatched requests, you can specify a default action. If no other action matches, the default action is used instead.
<package name="Hello" extends="action-default">
<default-action-ref name="UnderConstruction"/>
<action name="UnderConstruction">
<result>/UnderConstruction.jsp</result>
</action>
...
There are no special requirements for the default action. Each package can have its own default action, but there should only be one default action per namespace.
One to a Namespace
The default action features should be set up so that there is only one default action per namespace. If you have multiple packages declaring a default action with the same namespace, there is no guarantee which action will be the default.
说明:每个namespace中只能配置一个default-action-ref。
Action总结:
1. 实现一个Action的最常用方式:从ActionSupport继承
2. DMI动态方法调用 !
3. 通配符配置 * {1} {2} …
a) *_*
4. 接收参数的方法(一般用属性或者DomainModel来接收)
5. 简单参数验证addFieldError
a) 一般不使用Struts2的UI标签
6. 访问Web元素
a) Map类型
i. IoC
ii. 依赖Struts2
b) 原始类型
i. IoC
ii. 依赖Struts2
7. 包含文件配置
8. 默认action处理
分享到:
相关推荐
4. 学习笔记的内容可能覆盖了Struts2的基础配置、核心概念、实战技巧和复习巩固,帮助读者逐步掌握Struts2框架的全貌。 以上内容只是根据提供的信息进行的推断和扩展,具体的学习笔记内容可能包括了更详细的技术...
Struts2是一个强大的Java web应用程序开发框架,它遵循Model-View-Controller (MVC)设计模式,用于构建可维护性和可扩展性高的企业级应用。本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与...
### Struts2学习笔记2012 #### 一、建立一个Struts2工程 **步骤详解:** 1. **创建Web项目:** - 在MyEclipse中选择“File” > “New” > “Dynamic Web Project”,创建一个新的Web项目。 2. **解压并配置...
本文将深入探讨Struts2的核心概念,包括Namespace、标签、Action以及它们在实际开发中的应用。 一、Namespace Namespace在Struts2中主要用于组织和隔离Action,它决定了Action的访问路径。默认情况下,Namespace为...
### Struts2学习笔记知识点概览 #### 一、Struts的作用 - **核心功能**:Struts2框架的核心功能之一就是将业务逻辑与展示层分离,实现MVC(Model-View-Controller)架构模式。这有助于提高代码的可维护性、可扩展...
学习 Struts 2.3.4 包含的这些知识点,有助于开发者更好地理解和构建基于 MVC 架构的 Java Web 应用程序。通过阅读提供的"上课日志",你可以深入学习每个概念的实际应用和示例,从而提升你的开发技能。
### Struts2.1学习笔记 #### Struts2的来源与优点 - **来源**:Struts2是在WebWork2的基础上发展起来的,它继承了WebWork2的优点,并且进行了改进,使其更适合现代Web应用程序的需求。与Struts1相比,Struts2的...
十三、 Struts2配置文件模块化包含(include) 17 十四、 默认的Action 18 十五、 Action总结 18 02 Struts2-Result 19 一、 Result类型 (type) 19 二、 全局结果集(Globle Result) 20 三、 动态的结果集(dynamic ...
在探讨Struts2的学习心得之前,我们先来分析一下Struts2与Struts1之间的区别。 ##### 1.1 架构设计 - **Struts1**:采用MVC(Model-View-Controller)架构模式,其中控制器是由`ActionServlet`来实现的,该控制器...
Struts2是一个强大的MVC(Model-...以上是Struts2学习笔记的主要内容,涵盖了Struts2的基本架构、核心概念以及常用配置。通过深入理解和熟练掌握这些知识点,开发者能够有效地利用Struts2框架构建健壮的Web应用程序。