struts2_入门

Struts2

概述

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

常用的WEB层框架

  • Struts1
  • WebWork
  • Struts2
  • SpringMVC

前端控制器模式

这里写图片描述

Struts入门环境搭建

1.环境下载

struts下载地址

  • apps目录: struts的Demo案例
  • docs目录: struts的文档
  • lib目录: struts的开发jar包
  • src目录: struts的源码

2. 导入jar

struts的jar比较多
可以从Struts官方提供的demo中拿到必要的jar就行

3. 前端控制器配置

<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>
</filter-mapping>

其实就是在web.xml中配置struts2的filter

4. 编写Action类

public class TutorialtAction {
    public void start() {
        System.out.println("Hello Struts!");
    }
}

5. 配置struts.xml文件

<?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>
    <package name="default" namespace="/" extends="struts-default">
        <action name="tutorial" method="start"
            class="org.itheima.struts.action.TutorialtAction">
        </action>
    </package>
</struts>

注意:

  1. struts.xml文件名不可随意取,必须叫做struts.xml
  2. struts.xml必须放在src类路径下

6. 编写访问页面,进行测试

http://localhost:8080/01_start/tutorial.action

注意:

  1. 访问的url和struts.xml中配置的action标签间的联系
  2. struts.xml中配置的aciton标签和Action类中的方法的联系

Struts2的运行流程

前端控制器:Filter

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

控制器启动的加载项

  1. init_DefaultProperties()。默认的properties配置。

    org/apache/struts2/default.properties

    默认的配置加载项,struts2启动时加载的默认参数

  2. init_TraditionalXmlConfigurations()。传统的xml配置。

    struts-default.xml,struts-plugin.xml,struts.xml
    • struts-default.xml:struts框架启动时加载运行的框架默认配置。
    • struts-plugin.xml: struts框架允许插件集成。集成的插件配置。
    • struts.xml: 开发者的配置。
  3. init_LegacyStrutsProperties():加载常量配置struts.properties

  4. init_CustomConfigurationProviders():struts启动核心类创建的提供者。
  5. init_FilterInitParameters():struts加载web.xml中的配置

配置加载顺序

这里写图片描述

Struts.xml中的配置

DTD的查询和配置

  1. 到struts的核心包中可以找到struts-2.3.dtd文件
  2. 到xml catelog中配置离线提示

package标签

pakage标签是struts的核心配置。package标签相当于一个模块描述。

  1. name属性:描述包的唯一性的,不要重复
  2. extends属性: 继承。
    继承的作用是为了具备父类功能。
    struts在struts-default.xml中提供了一个struts-default父类配置
  3. namespace属性:命名空间。
    可以理解为模块根路径,当前模块的根路径。

    和Action标签的name和method搭配来确定访问的url
  4. abstract:抽象。用来被其他package继承的

action标签

  1. name: 配置action的访问名称
  2. class: 配置关联的action类的全路径
  3. method: action类中的方法名称,访问此action时调用的action类中的方法

include标签

配置多文件struts配置文件进行关联。

file属性指向的是类路径下的配置文件,需要包含文件夹名称。

例如:org/itheima/abc/abc.xml

constant标签

用来配置常量值的,目的是修改Struts的default.propertis中的默认值的

例如:

struts.action.extension=action,,

修改为

struts.action.extension=do,,

Action类的配置

编写规范

  1. action类需要提供无参构造函数

  2. action中被url访问的方法编写规范

    • 修饰符:方法的修饰符必须是public
    • 参数列表:方法必须是无参方法
    • 方法名称:遵循编程规范的任意名称
    • 返回值类型
      • String: 推荐使用
      • void:不推荐使用
    package org.itheima.struts.action;
    // Action类
    public class TutorialAction {
    public String setup() {
        System.out.println("Hello Struts2!");
        return "ok";
    }
    }

action类的实例

每次url访问时,action的实例就会被创建一次。action类是多实例的。

result标签

  1. name属性
    对应的是Action类中执行的方法的返回值。
  2. 内容:要去到的页面。
    注意:

    package标签的namespace值会决定去到的页面

    也可以通过/写绝对路径

Action类的三种编写方式

1. 书写一个普通类

2. 实现Action接口

  • Action接口提供了五个常量

    • ERROR: action方法执行错误时的返回结果
    • INPUT: 参数出现问题时的返回结果
    • LOGIN: 用户未登录的返回结果
    • NONE: action方法被访问了,但是没有视图显示时的结果
    • SUCCESS: action方法访问成功时的返回结果

    Struts定义的这几个常量只是规范。希望开发人员遵循这些常量进行配置。

  • Action接口要求实现execute方法

    在struts.xml中的action标签中不需要配置方法名,直接就会访问此方法

3. 继承ActionSupport类

  • 实现了Action接口
  • 提错误信息显示

    主要是实现了ValidationAware接口

    调用实现方法可以给目标页面添加数据显示

  • 提供校验显示到不同页面

    主要是实现了Validateable接口

  • 提供国际化操作

    主要实现了TextProvider, LocaleProvider接口

Struts国际化的配置

  • 国际化配置命名规范:baseName_language_country.properties

    • baseName由开发人员自己定义
    • language和country属于国际规范
    • 命名中不加language和country为默认选项
  • 在struts.xml中添加常量配置,或者在struts.properties中配置

struts.custom.i18n.resources=baseName

注意:

  • 只写baseName不需要后面的语言和后缀
  • 多个时用,隔开
  • Struts国际化数据的获得
    通过调用getText()方法获得国际化数据

Action的访问方式的配置

通过method属性进行访问

在action标签中,通过具体的name属性值拿到访问的url
通过具体的class去调用,具体的method。

开发过程中如果action偏多,书写起来比较麻烦。

通过通配符进行访问

  • 在action标签的name属性中,通过*号来占位
  • 在action标签的method属性中,通过{下标}来访问,下标从1开始
  • 在result标签结果显示中,通过{下标}来访问,下标从1开始

通过动态方法进行访问(不推荐)

  • 开启动态方法访问的配置
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
  • url中通过actionName + ! + action类中的方法名访问
    • 注意 actionName不要含.action后缀
    • action类中的方法名可以含.action后缀

Struts + Hibernate整合

环境搭建

  1. 搭建struts的环境
  2. 测试struts环境是否运行
  3. 搭建hibernate环境
  4. 测试hiberante环境是否正常运行
  5. 解决框架间的冲突

业务整合

  1. 创建Dao层
  2. 创建Service层
  3. 创建测试用例测试业务代码是否正确
  4. 对接web层

其他细节调整

  1. 重复的包
  2. 日志整合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值