JSP中的内置对象和Struts中的Web资源的详解
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内置对象中的访问
- 解耦的方法(解耦的方法:不是完全的继承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;
} } - 耦合的方式:也有以下两种
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资源的详解的更多相关文章
- jsp篇 之 Jsp中的内置对象和范围对象
		
Jsp中的内置对象: 在jsp页面代码中不需要声明,直接可以使用的对象. 一共有[9个内置对象]可以直接使用. 对象类型 名字 PageContext pageC ...
 - IT兄弟连 JavaWeb教程 EL表达式中的内置对象
		
EL语言定义了11个隐含对象,它们都是java.util.Map类型,网页制作者可通过它们来便捷地访问Web应用中的特定数据.表1对这11个隐含对象做了说明. 1 EL表达式中的内置对象 这11个隐 ...
 - JSP有哪些内置对象
		
JSP有哪些内置对象? 1.page:JSP网页本身; 2.request:用户端请求,此请求会包含来自GET/POST请求的参数; 3.session:请求有关的会话; 4.application: ...
 - Spring,SpringMVC,MyBatis,Hibernate,Servlet的生命周期,jsp有哪些内置对象,Tomcat,Cookie和Session的作用以及区别,oracle,MYSQL等面试题总结
		
1. 什么是Spring,谈谈你对Spring的理解 Spring是我们JAVA开发人员在搭建后台时选用的一个轻量级的开源框架,Spring框架目前也是功能丰富,十分优秀企业级采用最多的一个框架. S ...
 - javascript中的内置对象
		
2015.12.1 javascript中的内置对象 复习: 1.js中的内置函数 alert prompt write parseInt parseFloat eval isNaN document ...
 - JS中的内置对象简介与简单的属性方法
		
JS中的数组: 1.数组的概念: 数组是在内存中连续存储的多个有序元素的结构,元素的顺序称为下标,通过下标查找对应元素 2.数组的声明: ①通过字面量声明var arr1 = [,,,,] JS中同一 ...
 - 秒懂ASP.NET中的内置对象
		
上篇博客,小编主要简单的介绍了一下ASP.NET中的控件,这篇博客,小编主要简单总结一下ASP.NET中的内置对象,七个内置对象分别是:Request.Response.Application.Coo ...
 - JavaWeb -jsp文件和内置对象的解析
		
jsp文件和内置对象的解析 对page解析 JSP九大内置对象(自带,无需new) 1 out:输出对象 2 request:请求对象,存储“客户端像服务端发送的请求信息” 3 response:响应 ...
 - jsp有哪些内置对象?作用分别是什么?(至少三个)
		
jsp有哪些内置对象?作用分别是什么?(至少三个) 解答: 1)request表示HttpServletRequest对象.它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, head ...
 
随机推荐
- FATFS
			
 (一),什么是文件管理系统 答:数据在PC上是以文件的形式储存在磁盘中的.这些数据的形式一般为ASCII码或二进制形式.简单点说就是:管理磁盘上的文件的方法的代码! 如:我们写到SD卡上面的数据 ...
 - 在ubuntu下安装free pascal
			
1.ubuntu16.04版本已经集成了free pascal最新的3.0版,只需要安装就可以了. sudo apt install fp-compiler 在ubuntu里面,fp-compiler ...
 - Centos7上修改mysql数据目录
			
通过yum安装的mysql,启动和增加数据库,增加数据如下: [root@wucl-4 lib]# systemctl start mariadb [root@wucl-4 lib]# mysql - ...
 - 华中农业大学校赛 I  Catching Dogs
			
Catching Dogs Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1140 Solved: 298[Submit][Status][Web B ...
 - [systemd]Linux系统启动之systemd
			
参照:https://wiki.debian.org/systemd 最近在添加板子应用程序自启动的时候,发现在rcN.d中的符号链接并没有用,文件系统为Debian Jessie 8, 后来从同事那 ...
 - lockf函数的使用
			
#include<stdio.h> #include<unistd.h> void main() {int p1,p2,i; while((p1=fork())==-1);// ...
 - jasperreports+Ireport开发搭建
			
1.报表依赖 <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasp ...
 - 网卡优化RPS/RFS
			
网卡优化 RSS receive side scaling,网卡多队列,需要硬件支持.网卡接收到网络数据包后,要发送一个硬件中断,通知CPU取数据包.默认配置,都是由CPU0去做. RPS recei ...
 - Yarn概述
			
转自:http://liujiacai.net/blog/2014/09/07/yarn-intro/ Yarn是随着hadoop发展而催生的新框架,全称是Yet Another Resource N ...
 - Throw是一个语句,用来做抛出例外的功能
			
当我们自己定义一个例外类的时候必须使其继承excepiton或者RuntimeException. Throw是一个语句,用来做抛出例外的功能. 而throws是表示如果下级方法中如果有例外抛出,那么 ...