Web框架技术开发初级实验指导书10级(4)

2018-12-29 21:27

实验四:Struts2_访问Web元素

后台的Action跟我们前台的页面来通讯的时候,由于它拿不到request,session,servletContext比如当我们有人登陆了,我们要在session中设一个值,表示它登陆了,但是如果你Action访问不到session,你如何把相关的数据设到session里面,response不用访问它,因为我们的结果是通过result返回的。

取得Map类型request,session,application,真实类型 HttpServletRequest, HttpSession, ServletContext的引用:

前三者:依赖于容器 前三者:IOC (只用这种) 后三者:依赖于容器

后三者:IOC

Strust.xml

class=\ /user_login_success.jsp

第一种方式:(忘记)

取值的方法:可以在构造方法LoginAction1里面取值,也可以在execute方法取值。 就是说:下面三行“取值”代码可以写在任意两个方法里面!

request = (Map)ActionContext.getContext().get(\);

session = ActionContext.getContext().getSession();

application = ActionContext.getContext().getApplication();

16

public class LoginAction1 extends ActionSupport {

private Map request; private Map session; private Map application; public LoginAction1() {

//取值

request = (Map)ActionContext.getContext().get(\);

}

public String execute() {

request.put(\, \);//这里就不能用setAttribute()了,因为这里是session = ActionContext.getContext().getSession();

application = ActionContext.getContext().getApplication();

Map类型的。用put session.put(\, \); }

request = (Map)ActionContext.getContext().get(\); ActionContext.getContext()

Context直接翻译过来是:”上下文”,在西方人写的程序特别多,但是中国人很少用,因为不理解它是什么东西;Context就是当前执行的环境,就比如同学们在这里学习,实际上是有一个Context,代表了你周围的情况,机器的情况,空调的情况,等等,它会把周围环境帮你封转到Context这个对象里面,当你想访问这些东西的时候,通过Context去取。 原来学习过得ServletContext代表的就是servlet的运行环境,原来我们写程序就用ServletContext拿到各种各样的配置,ActionContext也就是Action周边运行的情况,Action运行的时候,首先接收到请求接收到request,response等等后面再接着调你的处理过程,Action处理的过程中,比如说那些配置怎么配的,执行环境怎么样等等都要通过ActionContext来拿。

原先我们在页面中都是通过HttpResquest,HttpResponse拿到我们的值,现在我们通过 request = (Map)ActionContext.getContext().get(\);

session = ActionContext.getContext().getSession();

application = ActionContext.getContext().getApplication(); }

application.put(\, \); return SUCCESS;

拿到我们的request,response,application。

User_login_success.jsp

User Login Success!u

| <%=request.getAttribute(\ | <%=session.getAttribute(\

| <%=application.getAttribute(\

17

我们的后台放了request,session,application但是这三个东西都是map,但是它反馈到前台之后居然用request,session,application可以拿到,所以struts2一定帮我们在Map和HttpRequest之间建立某种联系,对于我们自己设定的map类型的request这里面的属性在处理的过程中会全都复制到Http对象里边去。

第一种访问request里面的值:<%=request.getAttribute(\原始的方式 第二种访问request里面的值:

第二种是用标签的方式取值,查看debug模式,

Stack Context

These items are available using the #key notation

。。。略

These items are available using the #key notation :下面的items是供你使用的,只要你用#key访问它,所以你用#request 就可以访问到request了

上面的Value Stack是可以直接拿的 ActionContext要拿的话加#就能拿。

第二种方式(这种方式是最常用的,其他的都可以忘记)

其实request我们也很少去拿它,因为我们Action的成员变量默认会起到request的作用,它自己会放到valueStack里面, valueStack本身就是放到request里面,所以根本不用去拿request.

import org.apache.struts2.interceptor.ApplicationAware; import org.apache.struts2.interceptor.RequestAware; import org.apache.struts2.interceptor.SessionAware;

public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware {

//第二种方式区别于第一种方式的不同点是:第一种方式还要在构造函数中进行“取值”,第二种方

式直接就能用了!!这个就是IOC(控制反转)的设计思想,依赖注入DI

18

private Map request; private Map session; private Map application; public String execute() { request.put(\, \); session.put(\, \); application.put(\, \); return SUCCESS;

}

public void setRequest(Map request) { this.request = request; }

public void setSession(Map session) { this.session = session; }

public void setApplication(Map application) { this.application = application; }

}

Struts2 LoginAction 1 2 3

Action总结

1. 实现一个Action最常用的方式,从ActionSupport继承 2. DMI动态方法调用 3. 通配符*{1}{2}

4. 接收参数的方法(一般用属性或者DomainModel来接收) 5. 简单参数验证addFieldError 一般不使用Struts2的UI标签

6. 访问Web元素

1) Map类型

1. IOC

19

2. 以来Struts2 2) 原始类型(忘记) 7. 包含文件配置 8. 默认action处理

实验五:Struts2_结果类型

/r1.jsp

/r2.jsp

r1

r2

Result类型

1. dispatcher 2. redirect 3. chain

4. redirectAction 5. freemarker 6. httpheader 7. stream 8. velocity 9. xslt

10.plaintext 11.tiles

前面四个要掌握,只要用前两个。

ResultType是chain的时候,跳转到一个Action那边去处理,如果Action是在另外一个包p1该怎么办呢?

查Struts2文档的路劲---guides----resultTypes-----chain---

20


Web框架技术开发初级实验指导书10级(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:网上阅卷注意事项

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: