流程详解:
配置详解:
constant (常用常量配置)
使用Struts2 框架 ,先要导入Struts2 需要的jar 包 , 通过配置中央控制器 以及web.xml 来实现
Struts.xml <struts> <package name="login" namespace="/" extends="struts-default"> <action name="go" class="com.woniuxy.Struts2.LoginAction"> <result name="succ">jsp/success.jsp</result> <result name="fails">jsp/fails.jsp</result> </action> </package> </struts> web.xml 配置 <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern>
用户登录
1 处理请求
----> 编写action
1,继承actionsupport类 -----> 推荐使用
2 , 实现action 接口
3, 普通的类
2 获取用户提交的数据
1 领域对象
2 action 的属性
3 实现modeldriven 接口
3 验证
成功
失败
如何在action 中接受用户输入
1 在Struts2.0 中有以下几种方式可以获得用户输入的信息, 采用的都是IOC 方式。 具体如下;
一 : 使用action 类的属性来接受用户输入,
二 ; 使用领域对象接受用户输入
三; 使用modeldriven 的方式接受用户输入 -----> 推荐使用
使用action类的属性接受用户输入
一 : 在Struts2 中 可以直接使用action的属性来接受用户输入的输入, 比如在登录中 就采用这种, 有几个注意方面
1 在action 类或只能怪技工对应的属性及get,set方法
2 在页面表单中将表单元素的name属性 与action中的属性名称一样
二: 在action类中使用POJO 类接收用户输入参数。 (领域对象)
在Struts1中 通过使用actonform 类接受用户输入的数据,为了避免业务逻辑层依赖于Struts框架, 我们需要提供一个对应的领域对象( POJO) 然后 在actionform 和领域对象之间进行数据复制,这使程序中的javabean 对象泛滥, 在Struts2 中直接支持使用领域对象来接收用户数据,
public class LoginAction implements Action{
private User user;
public String execute() throws Exception {
// 业务处理
}
set/get。。
}
Struts2 访问Servlet API 对象
如何访问request,session, application 等
如果要却得servlet api 中的一些对象,如request ,response或session 等 , 怎么做?
1 非IOC 方式 ,
要获取上述 对象 ,通过使用com.opensymphony.xwork2.ActionContext类
2 , IOC 方式
首先告诉IOC 容器(Container)想取得某个对象的意图,试过实现相应的接口。
与Servlet API 解耦的访问方式,
非 IOC 访问方式
为了避免与Servlet API 耦合在一起, 方便Action 类做单元测试,Struts2 对HTTPservletrequest,httpsession, 和servletcontext 进行了封装,构造了三个map 对象来替代这三种对象,在Action 中,直接使用HTTPservletrequest,HTTPsession,servletContext 对象的map 对象来保存和读取数据,要获取这三个对象, 可以使用com.opensymphony.xwork2.ActionContext类
//1 IOC 的解耦方式获取servlet api
ActionContext actionContext = ActionContext.getContext();
//1 获取session
Map<String,Object>session = actionContext.getSession();
// 添加数据
session.put("s1", "这是session");
//2 获取application
Map<String, Object>application = actionContext.getApplication();
//添加数据
application.put("a1", "这是application");
// 3 request
actionContext.put("r1", "这是request");
//在jsp 页面 通过EL 表达式获取域的内容
// ${requestScop.r1} ${sessionScop.s1} ${applicatonScop.a1}
IOC 方式:
除了利用AcionContext来获取request,session,application对象这种方式外,还可以采用在action类中实现某些特定的接口的方式,让Struts2框架在运行时想Action实例注入request,session,application 对象,与之有关的三个接口和方法如下所示;
与servlet api耦合的访问方式
非IOC 方式
前面采用MAP 对象来封装Servlet API 。 如果要想在action类中直接使用HTTPservletrequest ,HTTPservletresponse,servletContext对象, 可以使用 org.apache.struts2,servletactionContext 类,该类是ActionContex的子类,在这个类中定义了两个静态方法
IOC 方式:
除了利用ServletActionContext来获取 HttpServletRequest对象和ServletContext对象这种方式外,Action类还可以实现ServletRequestAware和ServletContextAware接口,由Struts2 框架向Action 实例注入HttpServletRequest和ServletContext对象。