一、Struts2
1、Action:
1)、实现struts2的Action类功能,需要继承ActionSupport类(ActionSupport实现了Action接口),可以重写excute()方法,实际开发中一般不用
2)、在Action中获得作用域的方式:有三种
A、方式一:纯粹的servlet api
HttpServletRequest request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
request.setAttribute("name", this.getUsername());
HttpSession session=request.getSession();
ServletContext application=session.getServletContext();
B、方式二:通过Action上下文ActionContext
获取request session application
ActionContext request=ActionContext.getContext();
request.put("req_key", "req_value");
Map<String,Object> session=request.getSession();
session.put("ses_key", "ses_value");
Map<String,Object> application=request.getApplication();
application.put("app_key", "app_value");
C、方式三:通过接口实现,重写里面的方法,位置struts API包为:org。apache。struts2。interceptor
ServletRequestAware
ServletResponseAware
SessionAware
ApplicationAware
例如:
//实现下面三个接口,声明对应作用域的对象,生成对应的set方法,当struts2被加载时,会将对应的作用域参数注入到当前声明的对象中
publicclass TestAction extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {
private Map session;
private HttpServletRequest request;
private HttpServletResponse response;
//重写接口中的方法,只提供set方法,并不需要get方法,可以自定义生成
publicvoid setSession(Map att) {
this.session = att;
}
publicvoid setServletRequest(HttpServletRequest request) {
this.request = request;
}
publicvoid setServletResponse(HttpServletResponse response) {
this.response = response;
}
2、Interceptor:拦截器
1)、实现struts2的Interceptor类功能,需要继承AbstractInterceptor类,并重写intercept(ActionInvocation invocation)方法
2)、获得作用域的方法:通过拦截器方法里面的参数ActionInvocation invocation获得(注意:拦截器中任何参数的获得都通过invocation,其他方式都是非法的)
获取request session application
ActionContext request=invocation.getInvocationContext().getContext();
request.put("req_key", "req_value");
Map<String,Object> session=request.getSession();
session.put("ses_key", "ses_value");
Map<String,Object> application=request.getApplication();
application.put("app_key", "app_value");
3)、此处说一下invoke()方法和invokeActionOnly()方法的区别:
invocation.invoke()方法:请求被响应的过程:action-----result-----interceptor
invocation.invokeActionOnly()方法:请求被响应的过程:action-----interceptor-----result
1、Action:
1)、实现struts2的Action类功能,需要继承ActionSupport类(ActionSupport实现了Action接口),可以重写excute()方法,实际开发中一般不用
2)、在Action中获得作用域的方式:有三种
A、方式一:纯粹的servlet api
HttpServletRequest request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
request.setAttribute("name", this.getUsername());
HttpSession session=request.getSession();
ServletContext application=session.getServletContext();
B、方式二:通过Action上下文ActionContext
获取request session application
ActionContext request=ActionContext.getContext();
request.put("req_key", "req_value");
Map<String,Object> session=request.getSession();
session.put("ses_key", "ses_value");
Map<String,Object> application=request.getApplication();
application.put("app_key", "app_value");
C、方式三:通过接口实现,重写里面的方法,位置struts API包为:org。apache。struts2。interceptor
ServletRequestAware
ServletResponseAware
SessionAware
ApplicationAware
例如:
//实现下面三个接口,声明对应作用域的对象,生成对应的set方法,当struts2被加载时,会将对应的作用域参数注入到当前声明的对象中
publicclass TestAction extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {
private Map session;
private HttpServletRequest request;
private HttpServletResponse response;
//重写接口中的方法,只提供set方法,并不需要get方法,可以自定义生成
publicvoid setSession(Map att) {
this.session = att;
}
publicvoid setServletRequest(HttpServletRequest request) {
this.request = request;
}
publicvoid setServletResponse(HttpServletResponse response) {
this.response = response;
}
2、Interceptor:拦截器
1)、实现struts2的Interceptor类功能,需要继承AbstractInterceptor类,并重写intercept(ActionInvocation invocation)方法
2)、获得作用域的方法:通过拦截器方法里面的参数ActionInvocation invocation获得(注意:拦截器中任何参数的获得都通过invocation,其他方式都是非法的)
获取request session application
ActionContext request=invocation.getInvocationContext().getContext();
request.put("req_key", "req_value");
Map<String,Object> session=request.getSession();
session.put("ses_key", "ses_value");
Map<String,Object> application=request.getApplication();
application.put("app_key", "app_value");
3)、此处说一下invoke()方法和invokeActionOnly()方法的区别:
invocation.invoke()方法:请求被响应的过程:action-----result-----interceptor
invocation.invokeActionOnly()方法:请求被响应的过程:action-----interceptor-----result