struts2之封装数据和访问Servlet的api(02)
来源:互联网 发布:c语言中文字选择题 编辑:程序博客网 时间:2024/06/06 01:20
访问servlet的api
(★)方式1:通过ServletActionContext的静态方法访问
getRequest()
getResponse()
getServletContext()
@Override public String execute() throws Exception { //1.获取request对象 HttpServletRequest request = ServletActionContext.getRequest(); //2.获取请求参数 Map<String, String[]> map = request.getParameterMap(); for(String key:map.keySet()){ System.out.println(key + "--" + Arrays.toString(map.get(key))); } //3.往域中放入数据 request.setAttribute("rkey", "小青"); request.getSession().setAttribute("skey", "小浩"); //request.getServletContext(); ServletActionContext.getServletContext().setAttribute("akey", "是小伙伴"); //ServletActionContext.getResponse(); return SUCCESS; }
(了解)方式2:通过接口注入方式访问
需要action实现这些接口就可以获取到相应的对象了
ServletRequestAware
ServletResponseAware
ServletContextAware
SessionAware
public class Demo2ApiAction extends ActionSupport implements ServletRequestAware,SessionAware,ServletContextAware{ private HttpServletRequest request; private Map<String, Object> session; private ServletContext context; @Override public String execute() throws Exception { //System.out.println(this); //获取请求参数 Map<String, String[]> map = request.getParameterMap(); for(String key:map.keySet()){ System.out.println(key +"--" +Arrays.toString(map.get(key))); } //往域中放入数据 request.setAttribute("rkey", "醒醒了"); session.put("skey", "稍等片刻"); context.setAttribute("akey", "马上下课"); return super.execute(); } @Override public void setServletRequest(HttpServletRequest request) { this.request=request; } @Override public void setSession(Map<String, Object> map) { this.session=map; } @Override public void setServletContext(ServletContext context) { this.context=context; }}
(理解)方式3:通过ActionContext的方法访问
获取ActionContext
static getContext()
获取请求参数
Map getParameters()
往域中放入数据
request : 相当于 put(String key,object value)
session : getSession().put(String key,object value)
application : getApplication().put(String key,object value)
public class Demo3ApiAction extends ActionSupport { @Override public String execute() throws Exception { //获取actioncotnext对象 ActionContext context = ActionContext.getContext(); //获取请求参数 Map<String, Object> map = context.getParameters(); for(String key : map.keySet()){ System.out.println(key + "--" + Arrays.toString((Object[])map.get(key))); } //往域中放入数据 //request context.put("rkey", "好好学习"); context.getSession().put("skey", "天天向上"); context.getApplication().put("akey", "买把47玩"); return super.execute(); }}
action是多实例的
注意:servlet是单实例的 生命周期如何
下面这个篇文章有详细讲解
servlet是单例和struts2的action多例的理解
http://blog.csdn.net/chenchaofuck1/article/details/52074934
result结果视图配置:
result标签:配置逻辑视图
name属性:逻辑视图名称(action方法的返回值) 默认值是:success
type属性:跳转的方式 默认值:dispatcher
常用值:
dispatcher 转发到jsp
redirect 重定向到jsp
chain 转发到action
redirectAction 重定向到action
扩展:
stream 文件下载
结果视图的分类:
全局结果视图:当前包下的所有action可以共享
package标签下 global-results 标签
例如:
<global-results><result>/1.jsp</result></global-results>
局部结果视图:仅当前action可以使用(我们的操作)
是在action标签中配置的
封装数据
★方式1:属性驱动
-set方式(常见场景:分页参数)
在action中提供一个属性且提供set方法
例如:
public class Demo1DataAction extends ActionSupport { private String username; private int age; private Date birthday; public void setUsername(String username) { this.username = username; } public void setAge(int age) { this.age = age; } public void setBirthday(Date birthday) { this.birthday = birthday; }
★方式2:属性驱动
-页面表达式方式(ognl表达式,常见的场景:封装成多个对象)
将页面上传过来的值直接封装给一个对象
在action中先提供一个javabean对象,提供get和set方法
例如:
private User uu;
在页面上修改 表单子标签的name属性
name=”javabean对象名称.bean属性名称”
例如:
<input name="uu.age"/>
public class Demo2DataAction extends ActionSupport { private User uu; public User getUu() { return uu; } public void setUu(User uu) { this.uu = uu; } @Override public String execute() throws Exception { System.out.println(uu); return NONE; }}
★★方式3:模型驱动
步骤:
1.action实现ModelDriven接口
2.在action提供一个javabean对象且初始化★
3.重写接口的getModel的方法
4.将javabean对象通过getModel方法的返回值返回
例如:
public class Demo3DataAction extends ActionSupport implements ModelDriven<User>{ private User uu = new User();//请注意,这里必须要创建实例 @Override public User getModel() { return uu; } @Override public String execute() throws Exception { System.out.println(uu); return NONE; }}
(了解)方式4:批量封装
大前提:
在action中提供一个集合且提供他的set和get方法
封装成list
修改表单子标签的name属性
name=”集合属性名称[索引].bean属性名称”
例如:
public class Demo1BatchAction extends ActionSupport { private List<User> list; public List<User> getList() { return list; } public void setList(List<User> list) { this.list = list; } @Override public String execute() throws Exception { for (User user : list) { System.out.println(user); } return NONE; }
封装成map
修改表单子标签的name属性
name=”集合属性名称[‘key值’].bean属性名称”
例如:
public class Demo2BatchAction extends ActionSupport { private Map<String, User> mm ; public Map<String, User> getMm() { return mm; } public void setMm(Map<String, User> mm) { this.mm = mm; } @Override public String execute() throws Exception { for(String key : mm.keySet()){ System.out.println(key+"-----"+mm.get(key)); } return NONE; }}
- struts2之封装数据和访问Servlet的api(02)
- struts2 之 访问Servlet API
- struts2访问servlet的API
- Struts2访问Servlet API
- struts2访问servlet API
- Struts2访问Servlet API
- Struts2:访问Servlet API
- Struts2访问Servlet API
- Struts2-访问Servlet API
- Struts2访问Servlet API
- Struts2访问Servlet API
- Struts2访问Servlet API
- Struts2访问Servlet API
- Struts2 访问 Servlet API
- Struts2的Action访问Servlet API
- 【4】Struts2访问Servlet的API
- Struts2中对Servlet API的访问
- Struts2访问servlet API的方法
- 使用 Linux 系统调用的内核命令图解
- [双连通分量] tarjan算法
- FilterInputStream与装饰模式(1)
- POJ
- 第五章:Django连接mysql数据库
- struts2之封装数据和访问Servlet的api(02)
- MFC串口通信设置及发送、中断接收程序
- mui H5+ 的dowload下载图片地址相同,ios下载一直显示旧图片
- jdk1.6环境下struts2改spring boot方案
- 对于BS与CS以及内核,渲染引擎,渲染模式等初步了解
- SeetaFace 开源的人脸识别代码
- leetcode 363. Max Sum of Rectangle No Larger Than K
- mvc+json+ajax架构制作客户信息管理小项目
- CFgym:Hidden Anagrams(Hash)