Action访问Servlet API的三种方法

时间:2024-08-12 19:33:44

一、为什么要访问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接口。