一、Struts2概念
Struts2是Struts的第二代产品,以WebWork为核心,采用拦截器的机制处理用户请求,使业务逻辑控制器能与Servlet API
完全脱离。Struts1采用Servlet的机制处理用户请求。
Struts 2框架的所有类都基于接口,核心接口独立于HTTP。Struts 2配置文件中的大多数配置元素都会有默认值,有助于减少在XML文件中需要进行的配置。
Struts2框架主要由三部分组成:
- 核心控制器(StrutsPrepareAndExecuteFilter) (也有核心控制器使用 FilterDispatcher)
- 业务控制器
- 用户定义的业务逻辑组件。
1、核心控制器
FilterDispatcher是早期struts2的过滤器,可以对客户端URL请求进行过滤,负责处理用户所有以.action结尾的请求。2.1.3版
后,官方推荐使用StrutsPrepareAndExecuteFilter
2、业务控制器
是用户实现的Action类实例。Action类通常包含一个execute方法,返回一个字符串作为逻辑视图名。创建了Action类之后,
需要在struts.xml文件中配置此Action的相关信息
3、业务逻辑组件
通常是指用户自己针对系统功能开发的功能模块组件。被业务控制器组件所调用来处理业务逻辑的。
二、深入理解Struts2的配置文件
三、定义Action类的两种形式:
Struts2中Action并不需要继承任何控制器类型或实现相应接口。
虽然Struts2中的Action原则上不用继承任何类但是一般需要实现Action接口或者继承ActionSupport类,
重写execute方法。如果继承ActionSupport类,我们可以在的控制器中增加更多的功能。
(一)、Action类
1、基本形式:从ActionSupport类继承
public class LoginAction extends ActionSupport{
private String username;
private String password;
/*getter-setter代码略*/
public void validate(){…}
public String execute()throws Exception {….}
}
2、普通JavaBean
package com.bean;
public class User {
private String username;
private String password;
/*getter-setter代码略*/
public String execute()throws Exception {...}
}
(二)、Action动态处理函数
1.Action默认的execute函数
2.如果不用调用默认execute()。要求调用指定函数fun()函数。
注意:
<!-- 要想采用login!fun1的方式调用action中非默认方法以外的业务方法,必须在struts.xml配置下面一行 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
3.使用通配符映射方式
四、Action访问Servlet API
Struts2中提供了一个ActionContext类(当前Action的上下文对象),此类的getContext方法可以得到当前Action的上下文,也就是当前Action所处的容器环境,进而得到相关对象。下面是该类中提供的几个常用方法:
五、开发流程:
1、准备Jar包
2、将struts2的核心类配置到web.xml -------配过滤器:
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
3、写一个控制器(Action)--EJB=JavaBean+业务方法(默认String execute() )
package cn.hncu.login;
//Action(EJB) = JavaBean+业务方法
public class loginAction {
private String userName;
private String password;
/**
* @return the userName
*/
public String getUserName() {
return userName;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param userName the userName to set
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
//空参构造一定要有
//业务方法
public String execute(){
//模拟一下后台的业务功能
if(userName.equals(password)){
return "success";
}else{
return "input";
}
}
}
4、写返回页面(JSP页面)
5、写struts2的配置文件:struts.xml---把我们写的Action和返回页面配置到该文件中
注意:struts.xml需要放在WEB-INF目录下的classes文件夹中
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 要想采用login!fun1的方式调用action中非默认方法以外的业务方法,必须配置下面一行 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="cn.hncu.login.loginAction">
<result name="input">index.jsp</result>
<result name="success">/jsps/success.jsp</result>
<result name="failure">/jsps/failure.jsp</result>
</action>
<action name="login2" class="cn.hncu.login.loginAction2">
<result name="input">index.jsp</result>
<result name="success">/jsps/success.jsp</result>
</action>
</package>
</struts>
6、测试
Struts2能帮我们做:
1、帮助我们把前端页面上传的参数获取,并封装成EJB(Action对象)
2、帮助我们自动把信息存放到request中
3、帮我们实现页面转发(根据struts.xml中的结果页面配置 <action>中的<result>标签配置)
4、以上3个是核心功能。另外,还有验证框架、拦截器、转换器、国际化、文件上传下载、
页面标签库,表单可配置,对Ajax的支持,数据库连接和事务等!