Struts2入门

Struts2入门

先了解一下MVC模式

MVC时模型视图控制器(Model View Controller),一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑

MVC流程图:
MVC流程图

一、Struts2的概念

Struts的概念:是流行和成熟的机遇MVC设计模式的Web应用程序框架。使用Struts的目的是为了帮助我们减少在运用MVC设计模式来开发Web应用的时间。

  • 而Struts2并不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证,同时吸收了Struts1和WebWork两者的优势。*

二、Struts2例子

1、搭建Struts2环境
  1. 下载相关jar包
  2. 创建项目
  3. 创建并完善相关配置文件
  4. 创建Action并测试
下载相关jar包

Apache Struts官方网站
这里写图片描述
官方网站:struts.apache.org/
struts历史包:people.apache.org/builds/struts/

点击Download,下载第一个就OK
这里写图片描述

解压之后文档结构
这里写图片描述
解读一下文档

  • apps:基于Struts2的示例应用,包含5个war包,可直接部署到服务器上运行。

  • docs:Struts2的相关文档,各种API

  • lib:Struts2框架的核心类库、Struts2的第三方插件类库,共90个jar包,为避免臃肿,一般只添加必须包含的类库,可以从Struts2示例blank应用中获取。

  • src:Struts2框架的全部源代码

不过我用的是MyEclipse,可以很轻松的把包导进去,图来:

这里写图片描述
然后你就可以看见项目里面多出了些东西
这里写图片描述

创建项目并完善相关配置文件

在上一步中MyEclipse在web.xml里已经自动将struts2配置完成,在这里就不用再麻烦的配置了

创建Action并测试

创建HelloAction,并继承ActionSupport
这里写图片描述
Action长这样,重写了excute(执行)Action的方法

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport {

    @Override
    public String execute() throws Exception {//执行Action
        System.out.println("HelloAction执行");
        return SUCCESS;//返回执行的界面
    }

}

同时在struts.xml里面添加映射(具体配置在下面)

<struts>

    <package name="default" namesapce="/" extends="struts-default">

    <action name="helloworld" calss="actions.HelloAction">
        <result>/index.jsp</result>
    </action>

    </package>

</struts>    

然后部署到服务器运行,运行成功(这张图片有点长)
这里写图片描述

三、Struts2的工作原理及其结构

Struts2的工作原理及文件结构
这里写图片描述
(其中FilterDiapatcher被StrutsPrepareAndExecuteFilter替代,StrutsPrepareAndExecuteFilter可以在action执行之前添加自己的Filter)

Struts2的核心文件
  • web.xml:任何MVC框架都需要与MVC应用整合,不得不借助于web.xml文件,只有配置在web.xml文件中Servlet才会被应用加载。通常,所有的MVC框架都需要Web应用加载一个核心控制器,对于Struts2框架而言,需要加载StrutsPrepareAndExecuteFilter,只要Web应用负责加载StrutsPrepareAndExecuteFilter,StrutsPrepareAndExecuteFilter将会加载Struts2框架。
  • struts.xml:Struts2的核心配置文件,在开发过程中利用率最高,该文件主要负责管理应用中的Action映射,以及Action包含的Result定义。包含了全局属性、用户请求和相应Action之间的对应关系、Action可能用到的参数和返回结果和各种拦截器的配置。
  • struts.properties:Struts2框架的全局属性文件,自动加载,该文件包含很多key-value键值对,并且可配置在struts.xml文件中,使用constant元素。

四、深入Struts2

  1. 访问Servlet API
  2. Action搜索顺序
  3. 动态方法调用
  4. 指定多个配置文件
  5. 默认Action
  6. Struts2后缀
  7. 接受参数
  8. 处理结果类型
1、访问Servlet API

Struts2提供三种方式访问Servlet API(不包括HttpServletRequest、HttpServletResponse):
1. ActionContext
2. 实现***Aware接口
3. ServletActionContext

2、Action搜索顺序
  • 第一步:判断package是否存在,例如:path1/path2/path3
  • 第二步:如果包存在,判读action是否存在,如果action不存在则去namespace的package里面寻找action,如果没有,则报错;如果包不存在,检查上一级路径的package是否存在(直到默认namespace),重复第一步,如果没有,则报错
3、动态方法调用(DMI)

用途:为了解决一个Action对应多个请求的处理,以免Action太多
同样调用方式有三种:
- 指定method属性方式
- 感叹号方式
- 通配符方式

指定method属性

例如在Action添加两个方法add、delete

public class HelloAction extends ActionSupport {

    public String add() {
        System.out.println("HelloAction中add()执行");
        return SUCCESS;
    }

    public String delete() {
        System.out.println("HelloAction中delete()执行");
        return SUCCESS;
    }

    @Override
    public String execute() throws Exception {//执行Action
        System.out.println("HelloAction执行");
        return SUCCESS;//返回执行的界面
    }

}

在struts.xml里面配置如下:

<struts>

    <package name="default"  extends="struts-default">

    <action name="helloworld" class="actions.HelloAction">
        <result>/index.jsp</result>
    </action>

    <action name="addAction" method="add" class="actions.HelloAction">
        <result>/index.jsp</result><!-- 省略了jsp页面,看控制台输出就行了 -->
    </action>

    <action name="deleteAction" method="delete" class="actions.HelloAction">
        <result>/index.jsp</result>
    </action>

    </package>

</struts>    

这种方法也有弊端,方法过多的话会有很大的工作量,看接下来的方法

感叹号方式(不推荐使用)

Action代码如下:

public class HelloAction extends ActionSupport {

    public String add() {
        System.out.println("HelloAction中add()执行");
        return "add";//注意此处返回值
    }

    public String delete() {
        System.out.println("HelloAction中delete()执行");
        return "delete";
    }

    @Override
    public String execute() throws Exception {//执行Action
        System.out.println("HelloAction执行");
        return SUCCESS;//返回执行的界面
    }

}

在struts.xml里面配置如下:

<struts>

    <package name="default"  extends="struts-default">

    <action name="helloworld" class="actions.HelloAction">
        <result>/index.jsp</result>
        <result name="add">/index.jsp</result>
        <result name="delete">/index.jsp</result>
    </action>

    </package>
    <!-- 开通常量 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

</struts>

在调用的时候只需要使用helloworld!add.action即可

通配符方式(建议使用此种方式)

action不变,在struts.xml里面配置如下:

<struts>

    <package name="default"  extends="struts-default">

    <action name="helloworld_*" method="{1}" class="actions.HelloAction">
        <result>/index.jsp</result>
        <result name="add">/{1}.jsp</result>
        <result name="delete">/{1}.jsp</result>
    </action>

    </package>
    <!-- 开通常量 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

</struts> 

调用的时候写helloworld_add.action即可

4、指定多个配置文件

每个模块有自己的配置文件,可根据模块配置文件,以下这种格式:

<include file="helloworld.xml"></include>
<include file="login.xml"></include>

<!--编码问题-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>

例如新建helloworld.xml:
这里写图片描述

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><!--注意引入dtd-->
<struts>
<package name="default"  extends="struts-default">

    <action name="helloworld_*" method="{1}" class="actions.HelloAction">
        <result>/index.jsp</result>
        <result name="add">/{1}.jsp</result>
        <result name="delete">/{1}.jsp</result>
    </action>

</package>
</struts>

在struts.xml里面:

<struts>

    <include file="helloworld.xml"></include>
    <!-- 开通常量 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>

</struts>    

运行成功:
这里写图片描述这里写图片描述

5、默认Action

当找不到指定的Action的时候,执行默认Action
只需要在struts.xml中配置

<default-action-ref name="error"></default-action-ref>
    <action name="error">
        <result>/error.jps</result>
    </action>

即可

6、Struts2后缀

一旦加上后缀,请路径必须有后缀名

<constant name="struts.action.extension" value="html"></constant>

也可以在struts.properties中配置,多个后缀使用英文“,”隔开

7、接收参数(在action中接收)
  • 使用Action参数接收
  • 使用Domain Model接收:在bean中不需要实例化,表单中表单项需要指定哪一个对象的属性(user.name)也可以对List等对象赋值
  • 使用ModelDriven接收:需要实例化
    (不赘述)
8、处理结果类型

这里写图片描述

<result>/index.jsp</result>
<result name="success">/index.jsp</result>

如果省略了name属性,系统将采用默认的name属性值,默认的name值是success

  • SUCCESS:Action正确的执行完成,返回相应的视图,success是name属性的默认值
  • NONE:表示Action正确的执行完成,但不返回任何视图
  • ERROR:表示Action执行失败
  • LOGIN:Action因为没有登录的原因没有正确执行,将返回该登录视图,要求用户进行登录验证
  • INPUT:Action的执行,需要从前端界面获取参数,INPUT就是代表这个参数输入的界面,一般应用中,会对这些参数进行验证,如果验证没有通过,将自动返回到该视图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值