Servlet 访问WEB资源的方式
来源:互联网 发布:合同软件 编辑:程序博客网 时间:2024/06/01 09:44
WEB资源:
HttpServletRquest,HttpServletSession,Cookie等,原生Servlet API
Servlet访问WEB资源的方式
Servlet API解耦的方式(只能访问到有限的Servlet API对象和方法)
>使用ActionContext
import java.util.Map;import org.apache.struts2.dispatcher.SessionMap;import com.opensymphony.xwork2.ActionContext;public class TestActionContextAction {public String execute(){//0. 获取 ActionContext 对象//ActionContext 是 Action 的上下文对象. 可以从中获取到当往 Action 需要的一切信息ActionContext actionContext = ActionContext.getContext();//1. 获取 application 对应的 Map, 并向其中添加一个属性//通过调用 ActionContext 对象的 getApplication() 方法来获取 application 对象的 Map 对象Map<String, Object> applicationMap = actionContext.getApplication();//设置属性applicationMap.put("applicationKey", "applicationValue");//获取属性Object date = applicationMap.get("date");System.out.println("date: " + date);//2. sessionMap<String, Object> sessionMap = actionContext.getSession();sessionMap.put("sessionKey", "sessionValue");System.out.println(sessionMap.getClass()); if(sessionMap instanceof SessionMap){SessionMap sm = (SessionMap) sessionMap;sm.invalidate();System.out.println("session 失效了. ");}//3. request* //ActionContext 中并没有提供 getRequest 方法来获取 request 对应的 Map//需要手工调用 get() 方法, 传入 request 字符串来获取. Map<String, Object> requestMap = (Map<String, Object>) actionContext.get("request");requestMap.put("requestKey", "requestValue");//4. 获取请求参数对应的 Map, 并获取指定的参数值. //键: 请求参数的名字, 值: 请求参数的值对应的字符串数组//注意: 1. getParameters 的返回值为在 Map<String, Object>, 而不是 Map<String, String[]>// 2. parameters 这个 Map 只能读, 不能写入数据, 如果写入, 但不出错, 但也不起作用!Map<String, Object> parameters = actionContext.getParameters();System.out.println(((String[])parameters.get("name"))[0]);parameters.put("age", 100);return "success";}}
其中 actionContext 是也是一个Map类型,将request 、 response 放在了value中,因此可知通过键值对的方式调用request和response,如:actionContext.get("request")
前台页面通过EL表达式获取数据
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><!--有四个隐含对象:applicationScope,sessionScope,requestScope,pageScope.与application,session,request,pageContext相对应.例如applicationScope用来获取application范围的属性值 --><h4>Test ActionContext Page</h4>application : ${applicationScope.applicationKey }<br><br>session: ${sessionScope.sessionKey }<br><br>request: ${requestScope.requestKey }<br><br>age: ${parameters.age }</body></html>
>实现XxxAware接口(类似依赖注入)
1.重写setXxxx(Map Xxxx)方法
2. 设置Xxxx属性
import java.util.Map;import org.apache.struts2.interceptor.ApplicationAware;import org.apache.struts2.interceptor.ParameterAware;import org.apache.struts2.interceptor.RequestAware;import org.apache.struts2.interceptor.SessionAware;public class TestAwareAction implements ApplicationAware, SessionAware, RequestAware,ParameterAware{public String execute(){//1. 向 application 中加入一个属性: applicationKey2 - applicationValue2application.put("applicationKey2", "applicationValue2");//2. 从 application 中读取一个属性 date, 并打印. System.out.println(application.get("date"));return "success";}public String save(){return null;}private Map<String, Object> application;@Overridepublic void setApplication(Map<String, Object> application) {this.application = application;}@Overridepublic void setParameters(Map<String, String[]> parameters) {}@Overridepublic void setRequest(Map<String, Object> request) {// TODO Auto-generated method stub}@Overridepublic void setSession(Map<String, Object> session) {// TODO Auto-generated method stub}}若在一个Action类中有多个action方法则建议选用实现XxxAware接口的方式
小细节:sessionse对应的Map是sessionMap类型的, sessionMap.invalidate()可以使session失效
Servlet API耦合的方式(访问更多API,调原生方法)
>使用ServletActionContext
import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;public class TestServletActionContext {/** * 直接获取 HttpServletRequest 对象==》 常用 * ServletActionContext.getRequest() * 直接获取 HttpSession 对象== 》常用 * ServletActionContext.getRequest().getSession() * 直接获取 ServletContext 对象== 》较为常用 * ServletActionContext.getServletContext() * 直接获取 HttpServletResponse 对象== 》不常用 * ServletActionContext.getResponse() */ServletContext servletActionContext=ServletActionContext.getServletContext();HttpServletRequest request=ServletActionContext.getRequest();HttpServletResponse response=ServletActionContext.getResponse();HttpSession session=ServletActionContext.getRequest().getSession();}
>实现ServletXxxAware接口
import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import org.apache.struts2.util.ServletContextAware;public class TestServletAware implements ServletContextAware, ServletRequestAware, ServletResponseAware {/** * 实现三个Aware接口 * 必须要添加execute方法 */public void setServletResponse(HttpServletResponse response) {// TODO Auto-generated method stub}public void setServletRequest(HttpServletRequest request) {// TODO Auto-generated method stub}public void setServletContext(ServletContext context) {// TODO Auto-generated method stub}public String execute() {return "success";}}
阅读全文
0 0
- Servlet 访问WEB资源的方式
- Struts2两种解耦访问WEB资源的方式
- 访问当前web应用资源的方式
- Action访问web资源的方式
- 访问Servlet API,访问web资源
- web.xml里配置servlet,访问找不到资源的解决方法
- struts2学习笔记(六) Action访问web资源的方式
- Struts2获取Web容器资源的方式 访问request,session
- 访问web-inf下jsp资源的几种方式
- Structs2通过耦合的方式访问WEB资源
- Struts2_006_Servlet API解耦的访问方式web资源
- Web资源的工作方式
- Struts2_007_Servlet API解耦的访问方式web资源之Aware
- WCF 的 Web 访问方式
- Servlet API解耦的访问方式
- jsp访问servlet类几种方式的写法
- Struts2访问Servlet的三种方式
- struts对于servlet的访问方式
- C# Excel数据导入和导出简单方案
- 通过jdbc实现Oracle备份到Mysql
- OpenGL入门学习笔记02
- Python自动encoding
- windows上的tail指令使用
- Servlet 访问WEB资源的方式
- static
- Hadoop
- 主成分分析(PCA)原理总结
- canvas绘图基础
- Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法
- C语言输入输出函数
- SQL存储过程批量插入
- 将字节转化成其他单位