Struts2
来源:互联网 发布:it 电影 编辑:程序博客网 时间:2024/06/05 23:52
form:http://m.oschina.net/blog/16160
1.配置web.xml文件添加struts2过滤器:
<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>
2.任何一个POJO都可以作为Action类,只要提供public String execute()方法。
但通常情况下,我们所写的action类会继承ActionSupport(Action接口的实现类)。
在Action接口中定义的五个终态静态常量,也就是Action的五个返回值:
SUCCESS:执行成功,向用户显示成功页面
NONE:执行成功,但不需要向用户显示结果页面
ERROR:执行失败要向用户显示失败页面
INPUT:执行需要用户输入更多信息(验证不通过),要向用户显示输入页面
LOGIN:由于用户没有登录,action不能执行,要向用户显示登录页面
虽然返回值名字仍可以自己指定,但是不建议。
3.对struts.xml的配置(存放于classes目录下):
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><package name="struts2" extends="struts-default"><action name="index" class="com.myblog.action.WelcomeAction"><result name="success">/test/index.jsp</result></action></package></struts>
4.如果Action中有对POJO的引用,则在表单中因使用POJO名.属性名的方式
Ex:<input type"text" name="user.username">
甚至<input type"text" name="user.city.citycode">
5.表单提交后,struts2首先尝试获得User对象的引用,当它发现User对象为null时,它将使用User类的默认构造方法,创建一个User实例,并调用action的set方法设置这个实例。
6.在struts2中,支持直接使用领域对象DO来接收用户输入的数据
模型驱动:
然而struts2提供了另外一种直接使用领域对象的方式,就是让Action实现ModelDriven<T>接口,模型驱动(MD)可以让我们直接操作应用程序中的领域对象,允许我们在Web层和业务层使用相同的对象。
ModelDriven接口中只有一个方法: public T getModel(),该方法返回一个模型对象压入值栈除了Action自己。
如此一来,在页面中,这个模型对象中的属性可以直接通过属性名来访问,而不需要使用下标访问符来访问(如user.username),这时也不需要为中国模型对象提供JavaBean风格的getter和setter方法。
public class LoginAction implements ActionSupport,ModelDriven<User>{ private User user = new User(); @Override public String execute() throws Exception{ ......省略 } @Override public User getModel(){ return User; }}
这样在页面中:
Ex:<input type"text" name="username">
<s:property value="username">
何时直接使用DO,何时应该实现MD接口,这两种方式并没有本质上的区别,对于大多数的应用而言,任何一种方式都可以。
7.struts2访问request,session,application对象
与Servlet API解耦的访问方式:(为了方便Action类做单元测试,Struts2对HttpServletRequest,HttpSession,ServletContext进行了封装,构造了三个Map对象来替代这三种对象)
非IOC方式:
要获取这三个Map对象,可以使用ActionContext类,它是Action执行的上下文,在ActionContext中保存了Action执行所需的一组对象,包括parameters,request,session,application,locale等
根据API文档内的方法,在Action中:
ActionContext context = ActionContext.getContext(); //Returns the ActionContext specific to the current thread. Map request = (Map)context.get("request"); Map session = context.getSession(); Map application = context.getApplication();
并可以使用Map类型的put("key",value)方法赋值。
ActionContext中保存的数据能够从请求对象中得到,在于StrutsRequestWrapper类(它是HttpServletRequest的包装类),重写了getAttribute()方法(在页面中request对象的属性就要用这个方法调用),在这个方法中,先在request对象中查找属性,如果没有则在ActionContext中查找。
IOC方式:
通过实现RequestAware,SessionAware,ApplicationAware接口,并实现public void serXXX(Map XXX)方法,有struts2容器注入,当然需先声明Map类型的属性。
与Servlet API耦合的访问方式:
非IOC方式:
HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); ServletContext context = ServletActionContext.getServletContext();
IOC方式:
实现ServletRequestAware,ServletContextAware接口,并实现set方法
- Struts2
- struts2
- struts2
- Struts2
- struts2
- struts2
- Struts2
- struts2
- struts2
- struts2
- Struts2
- Struts2
- Struts2
- struts2
- struts2
- STRUTS2
- Struts2
- Struts2
- 关于"回发或回调参数无效"
- Discuz X2二次开发之数据库操作
- J2SE学习笔记之数据类型
- 1A
- 国内HTML5前端开发框架汇总
- Struts2
- JDK1.7新特性
- Android学习第一课:Windows下搭建Eclipse+Android4.0开发环境
- .NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)
- android基础概念总结
- System.arraycopy用法
- 利用定时器0,工作方式1实现LED1亮一秒,灭一秒
- spring3 oauth2
- 第十六周项目1 小心地放开玩字符串/字符数组(1.1)