struts2_基础
来源:互联网 发布:百度地图经纬度数据库 编辑:程序博客网 时间:2024/06/06 03:40
Struts2
Result结果配置
全局结果
在package
标签中配置global-results
标签
<package name="xxx" namespace="/" extends="struts-default"> <global-results> <result name="xxx">xxx.jsp</result> </global-results></package>
作用是为package中配置的所有action提供全局的返回结果页面
局部结果
在action
标签中配置result
标签
<action name="xxx" method="xxx" class="xxx"> <result>xxx.jsp</result></action>
作用是为当前action配置结果页面
结果类型
结果类型是在父类配置struts-default中定义的,struts框架默认实现了绝大多数的。
常用的结果类型有:
dispatcher:转发。为result标签的默认值。
<result type="dispatcher">xxx.jsp</result>
由action转发到jsp。
result标签中配置的结果必须是jsp页面
chain:转发。
<result type="chain"> <param name="actionName">xxx.action</param></result>
由action转发到action。
result标签中配置的结果必须是action
redirect:重定向。
<result type="redirect"> <param name="location">xxx.jsp</param></result>
由action重定向到jsp。
result标签中配置的结果必须是jsp页面
redirectAction:重定向。
<result type="redirectAction"> <param name="actionName">xxx.action</param></result>
由action重定向到action。
result标签中配置的结果必须是action
stream: 结果为文件流。文件下载
<result name="success" type="stream"> <param name="contentType">image/jpeg</param> <param name="inputName">imageStream</param> <param name="contentDisposition">attachment;filename="document.pdf"</param> <param name="bufferSize">1024</param></result>
contentType:下载文件类型
contentDisposition:下载到客户端时,客户端文件名称
bufferSize:读文件的缓存大小
inputName:对应要输出到客户端流声明的名称
json:转发。
<package name="xxx" namespace="/xxx" extends="json-default"> <action name="json" method="xxx" class="org.itheima.struts.action.JsonAction"> <result name="success" type="json"> <param name="encoding">utf-8</param> <param name="root">jsonObject</param> </result> </action> </package>
由action转发到json结果
encoding:配置编码格式
root:配置对象。action类中必须提供一个和root值相同的属性名称,且需要提供getter方法。
jsonActionRedirect: 重定向。
<action name="xxx" method="xxx" class="org.itheima.struts.action.JsonAction"> <result name="success" type="jsonActionRedirect"> xxx.action </result></action>
由action重定向到json结果。
json Plugin的加载
- 拷贝
struts2-json-plugin-xxx.jar
- 让package继承
json-default
Struts与Servlet交互对接
解决的问题
客户端与服务端交互时,通常会带参数过来,服务器也会回写数据给客户端。在此过程中,参与着请求,和响应,以及会话。servlet在此过程中提供了HttpServletRequest作为获取请求数据的方案,HttpServletResponse作为响应的方案,HttpSession负责了会话方案。Struts其实是基于servlet实现的web框架,他需要遵循规则提供请求,响应和会话的API供开发人员使用,因此Struts针对这一问题提供了自己的一套API封装,提供了多种方式的访问。
ActionContext
ActionContext对象实例获取
ActionContext context = ActionContext.getContext();
ActionContext是绑定在当前线程中的。框架在请求线程开启时,将ActionContext实例对象就绑定上来了,因此我们可以通过静态方法直接获取
请求参数的获得
Map<String, Object> parameters = context.getParamters();
相当于Servlet中的
request.getParamters()
方法数据回显到页面
context.put(key, value);
相当于Servlet中的
request.setAttribute()
方法
ServletActionContext
- Servlet继承子ActionContext,因此具备ActionContext的一切功能。
- ServletActionContext是对ActionContext功能的扩展,提供了多个静态方法。
请求获得
HttpServletRequest request = ServletActionContext.getRequest();
响应获得
HttpServletResponse response = ServletActionContext.getResponse();
接口实现类获得
- ServletContextAware
- ServletRequestAware
- ServletResponseAware
- ParameterAware
- SessionAware
- ApplicationAware
- PrincipalAware
Struts数据的封装
属性驱动:基本数据类型封装(掌握)
页面表单
<input type="text" name="name"><input type="text" name="password">
action类
private String name;private String password;public void setName(String name) {this.name = name;}public void setPassword(String password) {this.password = password;}
- 要求页面中提供的key和action类中属性名称必须一致
- action类中必须提供属性的setter方法
页面表达式:对象封装
页面表单
<input type="text" name="user.name"><input type="text" name="user.password">
action类
private User user;public void setUser(User user) {this.user = user;}public User getUser() {return user;}
- 页面中的key相当于
对象.属性
- action中的对象名称需要要和页面中key的对象名称相同
- action中的对象中的属性名称要和页面中key的对象的属性相同
- action中的对象必须提供无参构造函数
- action中的对象必须提供getter和setter
- 页面中的key相当于
模型驱动:对象封装(掌握)
页面表单
<input type="text" name="name"><input type="text" name="password">
Aciton类需要实现ModelDriven接口,并且实现接口方法
public class Action03 extends ActionSupport implements ModelDriven<User> {private User user;@Overridepublic User getModel() { if (user == null) { user = new User(); } return user;}}
页面中的key的名称需要和模型对象的名称一致
List数据(了解)
页面表单
<input type="text" name="list[0].name"><input type="text" name="list[0].age"><input type="text" name="list[1].name"><input type="text" name="list[1].age">
action类
public class DataAction05 extends ActionSupport { private List<User> list; public List<User> getList() { return list; } public void setList(List<User> list) { this.list = list; } public String test() { System.out.println(list); return SUCCESS; }}
Map数据(了解)
页面表单
<input type="text" name="map['a'].name"><input type="text" name="map['a'].age"><input type="text" name="map['b'].name"><input type="text" name="map['b'].age">
action类
public class DataAction05 extends ActionSupport { private Map<String, User> map; public Map<String, User> getMap() { return map; } public void setMap(Map<String, User> map) { this.map = map; }}
类型转换器
解决的问题
客户端传输过程中传输特定类型的字符串时,到action类中需要转换为对应的对象时,中间的转换的问题。
主要解决的是对象类型的转换
配置方案
新建一个类继承StrutsTypeConverter,实现内部方法
public class DateConversion extends StrutsTypeConverter {private SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");@Overridepublic Object convertFromString(Map context, String[] values, Class toClass) { if (values != null && values.length > 0) { String dateString = values[0]; try { return sdf.parse(dateString); } catch (ParseException e) { e.printStackTrace(); return null; } } return null;}@Overridepublic String convertToString(Map context, Object o) { if (o != null && o instanceof Date) { return sdf.format(o); } return null;}}
在项目的src下新建
xwork-conversion.properties
,在其中配置要转换的类型java.util.Date=org.itheima.struts.action.DateConversion
- struts2_基础
- Struts2_值栈
- Struts2_初见
- Struts2_配置文件
- struts2_入门
- Struts2_效验
- java 从零开始,学习笔记之基础入门<Struts2_实战演练(上)>(三十八)
- java 从零开始,学习笔记之基础入门<Struts2_实战演练(中)>(三十九)
- java 从零开始,学习笔记之基础入门<Struts2_实战演练(下)>(四十)
- Struts2_简单配置
- Struts2_校验总结
- struts2_入门实例详解
- Struts2_初识与准备
- Struts2_三种传参数方法
- Struts2_访问Web元素
- Struts2_三种传参数方法
- struts2_方法拦截器
- Spring+Struts2_整合原理
- [Leetcode] #56 Merge Intervals
- Android控件RecyclerView及与ListView的异同
- SSL P2721 极其简单的最短路问题
- CodeChef:Chef and Subsequences(思维 & dfs)
- 中石油 4509 keks(贪心)
- struts2_基础
- <C语言经典100例>c10 素数
- 腾讯云直播面试时的问题和解答
- hdoj 5979 Convex
- Java迭代器和增强for
- Refletion2017.9.15
- UML常见类图关系及对应的plantUML语法
- 虚析构函数分析
- 直播排行榜怎么区分的