struts2_入门

来源:互联网 发布:蜘蛛侠英雄归来 知乎 编辑:程序博客网 时间:2024/06/06 03:58

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. 日志整合
原创粉丝点击