Struts2框架底层是基本Servlet的,所以我们肯定要去访问Servlet API,而且开发Web应用不去访问Servlet API也是不可能的,所以我们Struts2框架提供了我们去访问Servlet API的方法;
提供的访问方法如下:
①:使用ServletActionContext访问Servlet API;
②:使用ActionContext访问ServletAPI;
③:使用一些接口 如 ServletRequestAware,ServletResponseAware等等去直接访问Servlet API
下面开始分别的学习.
(一):使用ServletActionContext访问Servlet API
Struts2提供了一个ServletActionContext工具类,查看API可以知道这个类是继承与ActionContext,稍后同样会讲到ActionContext去范文Servlet API
其中主要提供了几个重要的静态方法,如下(列举常用的方法):
- PageContext getPageContext() ,返回Web的PageContext对象
- HttpServletRequest getRequest() ,返回HttpServletRequest对象
- HttpServletResponse getResponse() ,返回HttpServletResponse对象
- ServletContext getServletContext() ,返回ServletContext对象
使用上面这些工具类,我们就可以非常简单方便去访问Servlet API,例子如下:
①:登陆页面和显示信息的页面关键代码:
登陆页面:
<body>
<form action="login">
用户名:<input type="text" name="username"><br/>
密码:<input type="password" name="password"><br/>
年龄 :<input type="text" name="age"><br/>
出生日期 :<input type="text" name="date"><br/>
<input type="submit" value="登录">
</form>
</body>
显示信息页面:
<body>
<h1>用戶信息显示......</h1>
用户名:${requestScope.username}<br/>
密码:${requestScope.password}<br/>
年龄:${requestScope.age}<br/>
出生日期:${requestScope.date}<br/>
ServletContext:<%=application.getAttribute("context") %><br/>
Session:<%=session.getAttribute("session") %><br/>
</body>
②:处理的Action类中的关键代码:
@Override
public String execute() throws Exception {
//得到ServletContext,并且设置属性,然后在页面上面显示属性值
ServletContext context = ServletActionContext.getServletContext();
context.setAttribute("context", "HelloWorld,ServletContext");
//得到HttpServletRequest,并且通过这个,去得到HttpSession的值,并且设置属性,同样在页面上面显示
HttpServletRequest request= ServletActionContext.getRequest();
HttpSession session= request.getSession();
session.setAttribute("session", "HelloWorld,Session");
//其他的就不一一举例了,用法都是差不多的,首先得到该对象,然后接下来的用法和在Servlet中的用户的用法一样
return SUCCESS;
}
在上面的execute()方法中,主要是演示了,两个方法,其他的用户也差不多,留给大家吧。都是首先得到该是要使用的对象,然后用法都和Servlet中的方法都差不多的。
(二)使用ActionContext访问ServletAPI
如(一)所说ActionContext是ServletActionContext的父类,不过这个类是直接继承了Object类,它也同样提供了相 应的方法去访问Servlet的API,
看下类的截图:
查看文档,会发现这是一个线程安全的类,我们可以使用如下的代码获取ActionContext:
ActionContext context = ActionContext.getContext();然后通过该对象去调用其中的方法。
其中主要提供了几个重要的方法,如下(列举常用的方法,查看API发现很多方法返回Map对象):
- Object get(String key) :这个方法和HttpServletRequest的getAttribute(String name)相似;
- Map<String,Object> getParametersp() :这个方法和HttpServletRequest的getParametersMap()相似;
- Map<String,Object> getSession() :这返回一个Map对象,虽然不是返回的Session,但是内容是Session,可以进行使用Map对象去模拟Session
还有一些常用的方法,大家可以去查询API,就能知道了,接下来看下最基本的用法;
直接看Action中的关键代码:
@Override
public String execute() throws Exception {
// 首先去获得ActionContext对象
ActionContext context = ActionContext.getContext();
// 去获取Session的Map模拟对象,然后设置Key-Value值,接着在页面进行显示
Map<String, Object> map = context.getSession();
map.put("session", "HelloWorld,ActionContext Session....");
// 去获取Application的Map模拟对象,然后设置Key-Value值,接着在页面进行显示
Map<String, Object> application = context.getApplication();
application.put("application",
"HelloWorld,ActionContext Application...");
return SUCCESS;
}
还有些其他对象的用法,也同样不演示了
显示页面的关键代码:
Session:<%=session.getAttribute("session") %><br/>
Application:<%=application.getAttribute("application") %><br/>
Application:<%=application.getAttribute("application") %><br/>
(三)使用一些接口 如 ServletRequestAware,ServletResponseAware等等去直接访问Servlet API
使用这些接口我们可以直接在Action中访问Servlet API,Struts2提供了如下几个比较常用的接口
- ServletRequestAware:实现这个,可以在Action中直接去访问HttpServletRequest
- ServletResponseAware:实现这个,可以在Action中直接去访问响应的HttpServletResponse;
- ServletContextAware:实现这个,可以去访问应用的ServletContext
去查询API文档发现,我们自己的Action只要去实现ServletXXXAware的接口,都要实现其中的setServletXXX(XXX,xxx)方法
例如去实现ServletRequestAware接口,就要实现其中的setServletRequest(HttpServletRequest request)方法
下面进行其中的一个接口进行举例:
Action中的关键代码如下:
@Override
public String execute() throws Exception {
// 往HttpServletRequest实例中进行set设置值,然后在页面中进行显示...
HttpSession session = mRequest.getSession();
session.setAttribute("ServletRequestAware",
"HelloWorld,ServletRequestAware.....");
// ServletContext servletContext = mContext.getContext("servletContext");
// servletContext
// .setAttribute("servletContext",
// "HelloWorld,ServletContextAware");
return SUCCESS;
}
// 为了代码展现方法,把HttpServletRequest的声明放到了这里
private HttpServletRequest mRequest;
// 实现HttpServletRequest接口必须实现以下的方法
public void setServletRequest(HttpServletRequest request) {
this.mRequest = request;
}
至此,上面是自己学习Struts2访问Servlet API的小总结,有很多不到位之处,望提出可以大家一起讨论学习, 在Web开发中,作为控制器,我们如果不去访问ServletAPI是不能的,所以要去好好的掌握。当然上面的演示,是最基本的,还需深入学习,可以直接查看Struts2的文档继续学习..