您的位置:首页 > 编程语言 > Java开发

Struts2 part 3:在Action中使用ServletAPI

2015-09-02 16:31 351 查看

 

1、使用ActionContext对象,采用解耦合的方式访问ServletAPI

ActionContext context = ActionContext.getContext();

 jsp

<form action="${pageContext.request.contextPath }/demo04/scope1.action" method="post">
<input type="text" name="scopetext" /> <input type="submit" value="提交" />
</form>

 action,通过context获取的对象都是Map,这种方式完全与Servlet解构

public class ScopeAction1 extends ActionSupport {
@Override
public String execute() {

ActionContext context = ActionContext.getContext();
//parameters
Map<String, Object> parameters = context.getParameters();
//default return object
String[] strs = (String[]) parameters.get("scopetext");
System.out.println(strs[0]);

//request scope
context.put("reqinfo", "request scope");
System.out.println(context.get("reqinfo"));

//session scope
Map<String, Object> session = context.getSession();
session.put("sessioninfo", "session sceop");
System.out.println(session.get("sessioninfo"));

//appliction scope
Map<String, Object> application = context.getApplication();
application.put("appinfo", "application scope");
System.out.println(application.get("appinfo"));

return NONE;
}
}

配置

<package name="demo04" namespace="/demo04" extends="struts-default">
<action name="scope1" class="demo04.ScopeAction1">
</action>
</package>

 

2、使用接口注入的方式使用ServletAPI

jsp

<form action="${pageContext.request.contextPath }/demo04/scope2.action" method="post">
<input type="text" name="scopetext" /> <input type="submit" value="提交" />
</form>

 Action,通过实现接口,设置setXXX来获取HttpServletXXX对象

public class ScopeAction2 extends ActionSupport implements ServletContextAware, ServletResponseAware, ServletRequestAware {
private HttpServletResponse response;
private ServletContext context;
private HttpServletRequest request;

@Override
public String execute() {

System.out.println(request.getParameter("scopetext"));

// request scope
request.setAttribute("reqinfo", "request scope");
System.out.println(request.getAttribute("reqinfo"));

// session scope
HttpSession session = request.getSession();
session.setAttribute("sessioninfo", "session sceop");
System.out.println(session.getAttribute("sessioninfo"));

// appliction scope
context.setAttribute("appinfo", "application scope");
System.out.println(context.getAttribute("appinfo"));

return NONE;
}

@Override
public void setServletResponse(HttpServletResponse response) {
this.response = response;

}

@Override
public void setServletContext(ServletContext context) {
this.context = context;
}

@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}

}

配置

<action name="scope2" class="demo04.ScopeAction2">
</action>

 3、通过ServletActionContext耦合的方式获取ServletAPI

jsp

<form action="${pageContext.request.contextPath }/demo04/scope3.action" method="post">
<input type="text" name="scopetext" /> <input type="submit" value="提交" />
</form>

 Action

public class ScopeAction3 extends ActionSupport {

@Override
public String execute() {

System.out.println(ServletActionContext.getRequest().getParameter("scopetext"));

// request scope
ServletActionContext.getRequest().setAttribute("reqinfo", "request scope");
System.out.println(ServletActionContext.getRequest().getAttribute("reqinfo"));

// session scope
HttpSession session = ServletActionContext.getRequest().getSession();
session.setAttribute("sessioninfo", "session sceop");
System.out.println(session.getAttribute("sessioninfo"));

// appliction scope
ServletContext context = ServletActionContext.getServletContext();
context.setAttribute("appinfo", "application scope");
System.out.println(context.getAttribute("appinfo"));

return NONE;
}

}

 配置

<action name="scope3" class="demo04.ScopeAction3">
</action>

 

 

 

这三种方式最好的是第一种,Action和Servlet完全解耦合,通过ServletActionContext的方式是最直接的,但也是耦合度最高的

 

 

 

 

 

 

 

 

 

 

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐