struts2 概念、配置、开发流程 (1)

一、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的支持,数据库连接和事务等!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值