首页 > 代码库 > Action访问Servlet API的三种方法
Action访问Servlet API的三种方法
一、为什么要访问Servlet API ?
Struts2的Action并未与Servlet API进行耦合,这是Struts2 的一个改良,从而方便了单独对Action进行测试。但是对于Web控制器而言,不访问action是不行的,Struts提供了一种比较简单的方式来访问Servlet API 。
二、通常我们需要访问的Servlet API 是 HttpSession、HttpservletRequest、ServletContext,分别对应了JSP内置对象 session,request,application。
三、Action访问Servlet API的三种方法
1、使用ActionContext类访问Servlet API。将HttpSession、HttpservletRequest、ServletContext封装成了Map,用put方法赋值,用EL表达式取。
写在Action类中代码:
public String execute() throws Exception { ActionContext context=ActionContext.getContext(); Map request = (Map)context.get("request"); Map session = (Map)context.getSession(); Map application = (Map)context.getApplication(); if("admin".equals(username) && "123".equals(password)){ request.put("uesrname",username); return SUCCESS; } else{ session.put("username", username); session.put("errorMsg", "您的用户名或密码有误!"); return ERROR; } }
写在success.jsp中代码:
<body>
登陆成功!!!
欢迎您! ${param.username}
</body>
写在error.jsp中代码:
<body>
对不起, 登录失败!!!<br/>
<font color="red">${sessionScope.errorMsg}</font>
</body>
2、ServletActionContext类提供了3个方法,可直接得到HttpSession、HttpservletRequest、ServletContext对象。
写在Action类中代码:
public String execute() throws Exception { HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); if("admin".equals(username) && "123".equals(password)){ request.setAttribute("username", username); return SUCCESS; } else{ session.setAttribute("errorMsg", "您输错了用户名或密码!"); return ERROR; } }
jsp文件中代码不变。
3、实现***Aware接口直接访问Servlet API
为了使Struts2能够直接访问到Servlet API的实例,Struts2提供了ServletContextAware接口、 ServletRequest接口、 ServletResponsetAware接口。
Action访问Servlet API的三种方法