JSP中的内置对象有如下几种:

request :继承于HttpServletRequest, HttpServletRequest继承ServletRequest,

获得的Request对象的方法:只能在Servlet中获取的doGet()和doPost()方法中获取

作用:封装用户请求信息

response   : 继承于HttpServletResponse,   HttpServletResponse继承ServletResponse

获得response对象的方法:只能在Servlet中获取的doGet()和doPost()方法中获取

作用:封装服务器返回的信息

session      :继承于HttpSession

获得Session对像:只能在Servlet中获取的doGet()和doPost()方法中使用Request获取

作用:为每个用户指定一个与服务器的会话过程,保存会话过程的信息

out           :继承于JSPWriter对象,

获得out对象的方法:response.getWrite()

作用:向特定页面打印字符串,Ajax的时候是返回信息

application继承于:javax.servle.ServletContext

获得application对象的方法:

作用:是一个共享对象,全网站都可以使用,

pageContext

page            :

config          :

exception

Struts2中的Web资源访问,也就是jSP内置对象中的访问

  1. 解耦的方法(解耦的方法:不是完全的继承JSP的内置对象,只能实现部分功能的,),解耦的方法有以下两种
    1)---通过ActionContext方式----(只能获取Request,Session,application)

    ①获取ActionContext对象: actionContext actionContext=ActionContext.getActionContext();
    ②获取XX对象,并封装在Map中: Map<String,object> XXMap=actionContext.getXX();
    request对象比较特别点: Map<String,object> requestMap=(Map<Stirng,Object>)actionContext.get("request");
    ③然后可以使用Map对象的put()、get(),对属性进行设置和获取
    xxxxMap.put("requestKey","requestValue");
    XXXMap.get("XXXkey");
    代码示例:

     package com.Web.ActionContext;
    import java.util.*; import com.opensymphony.xwork2.ActionContext; public class TextActionContext {
    //原理通过调用ActonContext的getXXX()方法,xxx代表jSP的内置对象
    //--->进而调用(Map<String, Object>) get(XXX);.... public static final String XXX = "com.opensymphony.xwork2.ActionContext.XXX"
    返回一个Map<String,xxx>列表
    //所以Map的put和get方法最终都是操纵xxx对象的
    public String execute(){
    ActionContext actionContext=ActionContext.getContext();
    Map<String,Object> applicationMap=actionContext.getApplication();
    applicationMap.put("applicationKey", "applicationvalue");
    //request对象的获取
    Map<String, Object> requestMap=(Map<String, Object>)actionContext.get("request");
    return "sucess";
    } }

    2)----实现XXXAware接口的方法(可以获取大部分内置对象)
    ①编写一个新的Java类继承XxxAware接口,并添加需要实现的方法
    implement XXxAware
    ②声明XXX对象
    private Map<Sting,object> XXX-------->private Map<String,Object> request;
    并声明setXXX()方法;
    ③使用Map的put、get对属性进行设置;
    notice----1)Session对应的Map实际是一个SessionMap类型的,强制转换后若调用invalidate()方法,可以使其Session失效
                  2)若一个Action有多个action方法,且每个action方法都需要用到web资源对象时建议使用ActionAware接口

     package com.Web.ActionAware;
    
     import java.util.Map;
    
     import org.apache.struts2.dispatcher.SessionMap;
    import org.apache.struts2.interceptor.ApplicationAware;
    import org.apache.struts2.interceptor.RequestAware;
    import org.apache.struts2.interceptor.SessionAware; public class TextActionAware implements RequestAware,ApplicationAware,SessionAware{//继承接口
    private Map<String, Object> requestMap;//2声明一个RequestMap对象
    private Map<String , Object> applicationMap;
    private Map<String , Object> sessionMap;
    public void setRequest(Map<String, Object> arg0) {//3为RequestMap对象设置对象
    // TODO Auto-generated method stub
    this.requestMap=arg0; }
    public void setApplication(Map<String, Object> arg0) {
    // TODO Auto-generated method stub
    this.applicationMap=arg0; }
    public String execute(){
    requestMap.put("requestAwareKey", "requestAwareValue");//4设置属性
    applicationMap.put("applicationAwareKey","applicationAwareValue");
    sessionMap.put("SessionAwareKey", "SessionAwareValue");
    if(sessionMap instanceof SessionMap){//这里是为了验证Map类型的Session对象是不是真正的JSP内置对象,
    SessionMap sm=(SessionMap)sessionMap;
    sm.invalidate();
    }
    return "sucess";
    }
    public void setSession(Map<String, Object> arg0) {
    // TODO Auto-generated method stub
    this.sessionMap=arg0;
    } }
  2. 耦合的方式:也有以下两种
    1)------通过原生的使用ServletAPI-----ServletActionContext(可以获取大部分内置对象)

    example:-------HttpServletRequest request=ServletActionContext.getRequest()
    example:--------httpSession session=ServletActionContext.getRequest().getSession();
    example:--------ServletContext ServletContext=ServletContext.getServletContext();
    notice: ServletContext 与application的异同
    相同:其实servletContext和application 是一样的,就相当于一个类创建了两个不同名称的变量。在
    servlet中ServletContext就是application对象。大家只要打开jsp编译过后生成的Servlet中的
    jspService()方法就可以看到如下的声明:
    ServletContext application = null;
    application = pageContext.getServletContext();
    不同:两者的区别就是application用在jsp中,servletContext用在servlet中。application和page
    request session 都是JSP中的内置对象,在后台用ServletContext存储的属性数据可以用
    application对象获得。
    代码示例

    package com.Web.ServletAPI;
    
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; public class TextServletAPI { public String execute() {
    HttpServletRequest request=ServletActionContext.getRequest();
    HttpSession session=ServletActionContext.getRequest().getSession();
    ServletContext ServletContext=ServletActionContext.getServletContext();
    request.setAttribute("requestKey", "ServletAPIrequestValue");
    return "sucess";
    }
    }

    2)-------通过实现ServletXxxAware接口可以由Struts2注入需要的原生Servlet对象
    example:---implements ServletRequestAware,ServletContextAware
    notice:不要在成员变量或者是构造方法里调用ActionContext,getSession()而把它放在其它方法里.

代码示例:

 package com.Web.ServletXxxAware;

 import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware; public class TestServletXxxAware implements ServletResponseAware,ServletContextAware,ServletRequestAware{//实现原生内置对象的接口
HttpServletRequest request;//2声明原生对象
HttpServletResponse response;
public void setServletResponse(HttpServletResponse response) {//3为原生对象设置方法
// TODO Auto-generated method stub
this.response=response; } public void setServletContext(ServletContext context) {
// TODO Auto-generated method stub
} public void setServletRequest(HttpServletRequest request) {
// TODO Auto-generated method stub
this.request=request;
}
public String execute(){
request.setAttribute("requestKey", "requestServletXxxAwareValue");//4直接可以调用原生方法
return "success";
}
}

JSP中的内置对象和Struts中的Web资源的详解的更多相关文章

  1. jsp篇 之 Jsp中的内置对象和范围对象

    Jsp中的内置对象: 在jsp页面代码中不需要声明,直接可以使用的对象. 一共有[9个内置对象]可以直接使用. 对象类型           名字 PageContext          pageC ...

  2. IT兄弟连 JavaWeb教程 EL表达式中的内置对象

    EL语言定义了11个隐含对象,它们都是java.util.Map类型,网页制作者可通过它们来便捷地访问Web应用中的特定数据.表1对这11个隐含对象做了说明. 1  EL表达式中的内置对象 这11个隐 ...

  3. JSP有哪些内置对象

    JSP有哪些内置对象? 1.page:JSP网页本身; 2.request:用户端请求,此请求会包含来自GET/POST请求的参数; 3.session:请求有关的会话; 4.application: ...

  4. Spring,SpringMVC,MyBatis,Hibernate,Servlet的生命周期,jsp有哪些内置对象,Tomcat,Cookie和Session的作用以及区别,oracle,MYSQL等面试题总结

    1. 什么是Spring,谈谈你对Spring的理解 Spring是我们JAVA开发人员在搭建后台时选用的一个轻量级的开源框架,Spring框架目前也是功能丰富,十分优秀企业级采用最多的一个框架. S ...

  5. javascript中的内置对象

    2015.12.1 javascript中的内置对象 复习: 1.js中的内置函数 alert prompt write parseInt parseFloat eval isNaN document ...

  6. JS中的内置对象简介与简单的属性方法

    JS中的数组: 1.数组的概念: 数组是在内存中连续存储的多个有序元素的结构,元素的顺序称为下标,通过下标查找对应元素 2.数组的声明: ①通过字面量声明var arr1 = [,,,,] JS中同一 ...

  7. 秒懂ASP.NET中的内置对象

    上篇博客,小编主要简单的介绍了一下ASP.NET中的控件,这篇博客,小编主要简单总结一下ASP.NET中的内置对象,七个内置对象分别是:Request.Response.Application.Coo ...

  8. JavaWeb -jsp文件和内置对象的解析

    jsp文件和内置对象的解析 对page解析 JSP九大内置对象(自带,无需new) 1 out:输出对象 2 request:请求对象,存储“客户端像服务端发送的请求信息” 3 response:响应 ...

  9. jsp有哪些内置对象?作用分别是什么?(至少三个)

    jsp有哪些内置对象?作用分别是什么?(至少三个) 解答: 1)request表示HttpServletRequest对象.它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, head ...

随机推荐

  1. spring boot test中mockito的运用

    mock的意义 在微服务盛行的当下,开发过程中往往出现A应用中某功能的实现需要调用B应用的接口,无论使用RPC还是restful都需要B应用提供接口的实现整个开发工作才能继续进行.从而导致A应用的开发 ...

  2. [Jobdu] 题目1544:数字序列区间最小值

    题目描述: 给定一个数字序列,查询任意给定区间内数字的最小值. 输入: 输入包含多组测试用例,每组测试用例的开头为一个整数n(1<=n<=100000),代表数字序列的长度.接下去一行给出 ...

  3. Windows 2003 IIS 不支持ASP问题的解决方法

    有时候我们在配置iis的时候,为了安全关闭了asp的支持,下面我们来介绍下让iis支持asp的一些注意事项特别注意:当我们在没有配置好iis的时候,不要安装补丁了,组件之类的东西,先把网站弄开通了,再 ...

  4. vuex中store分文件时候index.js进行文件整合

    import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex); import getters from './getters.js' impo ...

  5. javaweb reponse 写出文件

    Map map = getSearchValue(); File excelFile = orderService.getexportexcel(id,map); InputStream is = n ...

  6. EXTI—外部中断/事件控制器

    外部中断/事件控制器(EXTI)管理了控制器的 23 个中断/事件线.每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测. EXTI 可以实现对每个中断/事件线进行单独 ...

  7. CentOS minimal 版安装图形界面的步骤分享,中文语言包

    1.连接网络: CentOS minimal.iso安装好后,进入终端,默认是不开网络的, 首先启用网卡, 自动获取ip. ifconfig eth0 up dhclient eth0 这时候再 if ...

  8. git学习(二):git config命令

    不同的git config操作不同的参数文件 git config --global // 配置用户目录下的.gitconfig那文件 git config --system // 配置系统级配置文件 ...

  9. Storm手写WordCount

    建立一个maven项目,在pom.xml中进行如下配置: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x ...

  10. MTP(Media Transfer Protocol(媒体传输协议))简介

    ---恢复内容开始--- 1,简单说明 MTP,微软公司规定的新的传输规则(字面本来应该是协议的,但是自己感觉更像是规则,制定了基本上的所有路线,剩下的是你想怎么选择罢了,使用者完全没有可能在它的框架 ...