11、访问web元素
11.1 index.jsp
11.2 struts.xml利用通配符调用方法
11.3 LoginAction1.java
11.4 LoginAction2.java(常用)
11.5 LoginAction3.java
11.6 LoginAction4.java
11.7 user_login_success.jsp
12、模块包含和默认action
13、Result结果类型
13.1 index.jsp
13.2 struts.xml
14、全局结果集
15、动态结果集
15.1 action方法中的处理
15.2 struts.xml
16、带参数的结果集
16.1 index.jsp
16.2 struts.xml
16.3 UserAction.java
16.4 user_success.jsp
17、OGNL
18、struts标签
11、访问web元素
11.1 index.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<% String context = request.getContextPath(); %>
Insert title here
取得Map类型request,session,application,真实类型 HttpServletRequest, HttpSession, ServletContext的引用:
- 前三者:依赖于容器
- 前三者:IOC
(只用这种)
- 后三者:依赖于容器
- 后三者:IOC
11.2 struts.xml利用通配符调用方法
/user_login_success.jsp
11.2 LoginAction1.java
package com.bjsxt.struts2.user.action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 依赖struts2容器
* ActionContext.getContext()不是一个单例
* 前端可以用request、session、application对象取出
* @author LOOK
*
*/
public class LoginAction1 extends ActionSupport {
private Map request;
private Map session;
private Map application;
public LoginAction1() {
//Stack Content的值
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;
}
}
11.3 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;
/**常用
* DI dependency injection依赖注入
* IoC inverse of control控制反转
* @author LOOK
*
*/
public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware {
private Map request;
private Map session;
private Map application;
public String execute() {
request.put("r1", "r1");
session.put("s1", "s1");
application.put("a1", "a1");
return SUCCESS;
}
@Override
public void setRequest(Map request) {
this.request = request;//注入
}
@Override
public void setSession(Map session) {
this.session = session;
}
@Override
public void setApplication(Map application) {
this.application = application;
}
}
11.4 LoginAction3.java
package com.bjsxt.struts2.user.action;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 基本不用
* @author LOOK
*
*/
public class LoginAction3 extends ActionSupport {
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;
}
}
11.5 LoginAction4.java
package com.bjsxt.struts2.user.action;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
/**
* 基本不用
* @author LOOK
*
*/
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();
}
}
11.6 user_login_success.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@taglib uri="/struts-tags" prefix="s" %>
Insert title here
User Login Success!
| <%=request.getAttribute("r1") %>
| <%=session.getAttribute("s1") %>
| <%=application.getAttribute("a1") %>
12、模块包含和默认action
13、Result结果类型
(1) dispatcher
(2) redirect
(3) chain
(4) redirectAction
(5) freemarker
(6) httpheader
(7) stream
(8) velocity
(9) xslt
(10) plaintext
(11) tiles
注:(1)(2)只能跳转到页面,不能跳转到action,这两个最常用
Redirect:服务器端跳转
13.1 index.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<% String context = request.getContextPath(); %>
Insert title here
Result类型
- dispatcher
- redirect
- chain
- redirectAction
- freemarker
- httpheader
- stream
- velocity
- xslt
- plaintext
- tiles
13.2 struts.xml
/r1.jsp
/r2.jsp
r1
r2
14、全局结果集
当很多action调用的结果集相同时,可以使用全局结果集,供pageage中所有action使用(方法的返回值为mainpage)。
/main.jsp
如果两个action不在同一个包里时,
/admin.jsp
即:在另一个需要使用全局结果集的包里加上extends=”user”
.
15、动态结果集
15.1 action方法中的处理
public String execute() throws Exception {
if(type == 1) r="/user_success.jsp";
else if (type == 2) r="/user_error.jsp";
return "success";
}
15.2 struts.xml
${r}
根据r的返回值跳转到user_success.jsp或者user_error.jsp。
16、带参数的结果集
16.1 index.jsp
向结果传参数
16.2 struts.xml
/user_success.jsp?t=${type}
16.3 UserAction.java
package com.bjsxt.struts2.user.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private int type;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@Override
public String execute() throws Exception {
return "success";
}
}
16.4 user_success.jsp
取出传递的参数
User Success!
from valuestack(直接向jsp发送请求,没有经过action,所以值栈为空):
from actioncontext:
17、OGNL
- Object Graph Navigation Language
- 想初始化domain model,可以自己new,也可以传参数值,但这时候需要保持参数为空的构造方法
- 其他参考ognl.jsp
- 什么时候在stack中会有两个Action?chain
ognl.jsp
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
OGNL表达式语言学习
- 访问值栈中的action的普通属性: username =
- 访问值栈中对象的普通属性(get set方法)user.age:
| | | wrong: <%-- --%>
- 访问值栈中对象的普通属性(get set方法)cat.friend.name:
- 访问值栈中对象的普通方法password.length():
- 访问值栈中对象的普通方法cat.miaomiao():
- 访问值栈中action的普通方法m():
- 访问静态方法@com.bjsxt.struts2.ognl.S@s():
- 访问静态属性@com.bjsxt.struts2.ognl.S@STR:
- 访问Math类的静态方法@@max(2,3):
- 访问普通类的构造方法new com.bjsxt.struts2.ognl.User(8):
- 访问List users:
- 访问List中某个元素 users[1]:
- 访问List中元素某个属性的集合(所有user的age属性构成的集合) users.{age}:
- 访问List中元素某个属性的集合中的特定值(后者常用) users.{age}[0]|users[0].age:
|
- 访问Set:
- 访问Set中某个元素(无序,访问不到):
- 访问Map:
- 访问Map中某个元素:
| |
- 访问Map中所有的key:
- 访问Map中所有的value:
- 访问容器的大小:
|
- 投影(过滤)this指循环遍历中符合条件的 当前对象:
- 投影:
- 投影:
- 投影:
- []Value Stack Contents的从上往下的内容:
18、struts标签
1. 通用标签:
a) property
b) set
i. 默认为action scope,会将值放入request和ActionContext
ii. page、request、session、application
c) bean
d) include(对中文文件支持有问题,不建议使用,如需包含,改用jsp包含)
e) param
f) debug
2. 控制标签
a) if elseif else
b) iterator
i. collections map enumeration iterator array
c) subset
3. UI标签
a) theme
i. simple xhtml(默认) css_xhtml ajax
4. $ # %的区别
a) $用于i18n和struts配置文件
b) #取得ActionContext的值
c) %将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用
i. 参考
其他参考文档。
马士兵struts2视频笔记--第一天
马士兵struts2视频笔记--第二天
马士兵struts2视频笔记--第三天