Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1146319
  • 博文数量: 103
  • 博客积分: 1897
  • 博客等级: 上尉
  • 技术积分: 1717
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-19 21:02
文章分类

全部博文(103)

文章存档

2013年(19)

2012年(84)

分类: 嵌入式

2012-09-07 21:58:09

用struts2作为服务器框架,与android客户端进行交互需要得到request、response对象。

struts2中获取request、response有两种方法。

第一种:利用ServletActionContext的静态方法

Struts2 利用ServletActionContext类来维护Servlet对象,ServletActionContext利用ThreadLocal来维护 不同线程的Servlet对象,因此可以使用ServletActionContext类获取,这种方法可以叫做非注射方式(非IoC方式)。
[代码]java代码:
01public class LoginAction extends ActionSupport {
02  
03        private static final long serialVersionUID = 1L;
04          
05        private String account;//账号
06         private String pwd;//密码
07          
08        public String login() throws Exception{
09                  
10                //获取request
11                 HttpServletRequest request=ServletActionContext.getRequest();
12                 //获取response
13                 HttpServletResponse response=ServletActionContext.getResponse();
14                 //获取Session
15                 HttpSession session=request.getSession(true);
16                 //放到session中
17                 session.setAttribute("account", account);
18                 //获得上下文
19                 ServletContext context=ServletActionContext.getServletContext();
20                 //获取upload文件夹
21                 File uploadFile=new File(context.getRealPath("upload"));
22                  
23                //给客户端返回结果
24                 PrintWriter writer=response.getWriter();
25                 writer.print("account");
26                  
27                return execute();
28         }
29 }
第二种:利用相关的Aware接口

Struts2 提供Aware接口,实现了相关Aware接口的Action能够感知相应的资源。Struts在实例化一个Action事例中,如果发现它实现了相应的 Aware接口,会把相应的资源通过Aware接口方法注射进去,这种方法可以叫做注射方式(IoC方式)。
[代码]java代码:
01public class ServletAwareAction extends ActionSupport implements
02                 ServletRequestAware, ServletResponseAware, SessionAware, ServletContextAware {
03  
04        private static final long serialVersionUID = 1L;
05  
06        private ServletContext application;//Servlet上下文
07         private HttpServletRequest request;//request对象
08         private HttpServletResponse response;//response对象
09         private Map session;//session对象
10          
11        public void setServletRequest(HttpServletRequest request) {
12                 this.request=request;
13         }
14  
15        public void setServletResponse(HttpServletResponse response) {
16                 this.response=response;
17         }
18  
19        public void setSession(Map session) {
20                 this.session=session;
21         }
22  
23        public void setServletContext(ServletContext application) {
24                 this.application=application;
25         }
26  
27        public String execute(){
28                 String upload=application.getRealPath("upload");
29                  
30                request.getRemoteAddr();
31                 response.getContentType();
32                 session.get("account");
33                  
34                return Action.SUCCESS;
35         }
Aware接口其实是一种拦截器,拦截器代码会在执行Action之前执行,将相关的Servlet对象设置进去
阅读(2639) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~