Strust2学习之一(struts2  环境搭建)

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的​​体系结构​​​与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与​​Servlet​​API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。

 

这里先写开发流程后面解释原理

添加struts的支持:

Strust2学习之一(struts2  环境搭建)_JSF

Strust2学习之一(struts2  环境搭建)_xml_02

 

我们看看这都做了什么

 

Strust2学习之一(struts2  环境搭建)_struts_03

 

 

第一步: 添加struts2的核心jar包

第二步: 添加struts2的配置文件

<package name="sbj" extends="struts-default">
<action name="login" class="com.wfg.action.LoginActin">
<param name="name">ss</param>
<param name="password"></param>
<result name="success">/ok.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>

上例中的技能点  
技能点 1:package 定义上例中的技能点  
技能点 1:package 定义上例中的技能点  
技能点 1:package 定义

定义:  <package name="com.wangwang" extends="struts-default">
含义:使用package可以将逻辑上相关的一组 Action,Result,Interceptor 等组件分为一组,
package有些像对象,可以继承其他的package,也可以被其他package继承,甚至可以定义
抽象的Package。它有以下要点:
  name 属性。package的别名,为了让其他的package引用或继承。
  abstract,抽象的package中不需要定义action。
  extends,继承的父package配置,struts-default 在Struts2核心包下的struts-default.xml
中声明,读者可以先看下,后期我们详细讲解。
技能点 2:action 定义
定义:  <action name="helloAction"  
class="com.wangwang.HelloAction" method=””>
含义:一个package下面可以有多个action,每个action表示一个受管理的Bean它。有以下
要点:
  name 属性。客户端通过此名称访问action。
  class,具体的类。
  method,默认调用action的execute方法,或者调用此属性标记的方法。
技能点 3:result 定义
定义:<result name="ok">result.jsp</result>
含义:类似于struts1下的forward节点。一个action下可以有多个result。表示执行完跳转的目
标地址。name必须与Bean执行方法返回值一致,默认的是请求转发,添加type="redirect"表示
重定向。chain表示转发给下一个action

第三步: 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>*.action</url-pattern>
</filter-mapping>

这里大家注意与Struts1不同的是,Struts1 在web.xml中配置的是一个Servlet,而
Struts2配置是一个过滤器(Filter)。并且最早时使用的是FilterDispatcher,而现在新版
本使用的是StrutsPrepareAndExecuteFilter。它的url-pattern为/*,表示过滤所有请
求。这里大家注意与Struts1不同的是,Struts1 在web.xml中配置的是一个Servlet,而
Struts2配置是一个过滤器(Filter)。并且最早时使用的是FilterDispatcher,而现在新版
本使用的是StrutsPrepareAndExecuteFilter。它的url-pattern为/*,表示过滤所有请
求。这里大家注意与Struts1不同的是,Struts1 在web.xml中配置的是一个Servlet,而
Struts2配置是一个过滤器(Filter)。并且最早时使用的是FilterDispatcher,而现在新版
本使用的是StrutsPrepareAndExecuteFilter。它的url-pattern为/*,表示过滤所有请
求。

 

受管理的bean

//action 可以不继承任何类,但是有时会继承ActionSupport类 未来使用里面已有的功能
public class LoginActin extends ActionSupport {

private String name;
private String password;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

//默认调用调用execute
public String execute() {
System.out.println(name+";;;"+password);
if("aa".equals(name)&&"bb".equals(password)){
return SUCCESS;
}else {
return ERROR;
}

}

 

上例中的技能点  
技能点 1:受管理的 Bean
定义:   public class HelloAction {}  
含义: 我们把HelloAction称为受管理的Bean。它有以下要点:
  Struts1中FormBean需要继承之 ActionForm,ActionBean需要继承 Action;而此
Bean不需要继承任何框架类或实现任何框架接口,与框架相脱离;当您的项目需要由
Struts2迁移到JSF时,此类可以直接使用。
  受管理的Bean=ActionBean+FormBean。Struts2包括JSF一样把其合而为一。
  Struts1中 ActionBean是单态,无状态的,FormBean是多态,有状态的;受管理的
HelloAction会为每个请求产生一个实例,因为其中定义了保存客户端数据的变量,它是多
态,有状态的。
技能点 2:execute 与自定义 login 方法
定义:   String execute();  String login()
含义: 系统默认调用受管理Bean的execute()方法,当然您也可以在主配置文件中通过
action节点的 method属性或者/contextPath/actionName!methodName.action方式访问。

 

 

jsp代码

 

<form action="login.action">
name:<input type="text" name="name">
password: <input type="text" name="password">
<input type="submit">
</form>