马士兵struts2视频笔记--第三天

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的引用:
  1. 前三者:依赖于容器
  2. 前三者:IOC
  3. (只用这种)
  4. 后三者:依赖于容器
  5. 后三者: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(常用)

马士兵struts2视频笔记--第三天_第1张图片
图11-1 LoginAction2.png
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类型
  1. dispatcher
  2. redirect
  3. chain
  4. redirectAction
  5. freemarker
  6. httpheader
  7. stream
  8. velocity
  9. xslt
  10. plaintext
  11. 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、带参数的结果集

马士兵struts2视频笔记--第三天_第2张图片
图16-1 带参数的结果集.png

16.1 index.jsp

向结果传参数
  1. 传参数

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

  1. Object Graph Navigation Language
  2. 想初始化domain model,可以自己new,也可以传参数值,但这时候需要保持参数为空的构造方法
  3. 其他参考ognl.jsp
  4. 什么时候在stack中会有两个Action?chain
    ognl.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ taglib uri="/struts-tags" prefix="s" %>




OGNL表达式语言学习


    
  1. 访问值栈中的action的普通属性: username =
  2. 访问值栈中对象的普通属性(get set方法)user.age: | | | wrong: <%----%>
  3. 访问值栈中对象的普通属性(get set方法)cat.friend.name:
  4. 访问值栈中对象的普通方法password.length():
  5. 访问值栈中对象的普通方法cat.miaomiao():
  6. 访问值栈中action的普通方法m():

  7. 访问静态方法@com.bjsxt.struts2.ognl.S@s():
  8. 访问静态属性@com.bjsxt.struts2.ognl.S@STR:
  9. 访问Math类的静态方法@@max(2,3):

  10. 访问普通类的构造方法new com.bjsxt.struts2.ognl.User(8):

  11. 访问List users:
  12. 访问List中某个元素 users[1]:
  13. 访问List中元素某个属性的集合(所有user的age属性构成的集合) users.{age}:
  14. 访问List中元素某个属性的集合中的特定值(后者常用) users.{age}[0]|users[0].age: |
  15. 访问Set:
  16. 访问Set中某个元素(无序,访问不到):
  17. 访问Map:
  18. 访问Map中某个元素: | |
  19. 访问Map中所有的key:
  20. 访问Map中所有的value:
  21. 访问容器的大小: |

  22. 投影(过滤)this指循环遍历中符合条件的 当前对象:
  23. 投影:
  24. 投影:
  25. 投影:

  26. []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视频笔记--第三天

你可能感兴趣的:(马士兵struts2视频笔记--第三天)