前言——正常情况下如何在Action中获取到这些变量
全部方法(共四种)可以参考:http://blog.csdn.net/itmyhome1990/article/details/7019476
这里采用其中一种作为示例,即利用ServletActionContext上下文来完成:
代码语言:javascript复制 1 public class LoginAction {
2 private HttpServletRequest request;
3 private HttpSession session;
4 private ServletContext application;
5 public String execute() {
6
7 request = ServletActionContext.getRequest();
8 session = request.getSession();
9 application = session.getServletContext();
10
11 //application = ServletActionContext.getRequest().getSession().getServletContext();
12
13 request.setAttribute("aaa", "aaa");
14 session.setAttribute("bbb", "bbb");
15 application.setAttribute("ccc", "ccc");
16
17 return "success";
18 }
19 }
但是呢,在我之前的学习过程中,在每个Action中都要重复这三部,显得过于繁琐。
在这样的情况下,我们可以通过继承一个BaseAction来解决这些问题。
代码语言:javascript复制 1 public class BaseAction extends ActionSupport{
2
3 protected HttpServletRequest getRequest(){
4 return ServletActionContext.getRequest();
5 }
6
7 protected HttpServletResponse getResponse(){
8 return ServletActionContext.getResponse();
9 }
10 protected HttpSession getSession(){
11 return getRequest().getSession();
12 }
13
14 //快速执行标签
15 public void addActionErrorsFromResult(ExecuteResult<?> result) {
16 for (String error : result.getErrorMessages()) {
17 this.addActionError(error);
18 }
19 }
20 public void addFieldErrorsFromResult(ExecuteResult<?> result) {
21 for (String field : result.getFieldErrors().keySet()) {
22 this.addFieldError(field, result.getFieldErrors().get(field));
23 }
24 }
25 }
这样,我们在写新的Action的时候,就只用extends BaseAction。
即可实现在Action中像在Servlet中一样直接获取Session、Request、Respose了,当然Application也可以实现,这里就不一一呈现了。