Struts第一阶段

本文介绍了Struts2框架的基本概念及使用方法,包括其作为MVC架构的Web层框架的特点,核心过滤器的作用,以及如何配置Action和结果视图。同时,还详细解释了Struts2的执行流程和常见配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

strust2入门与介绍

什么是Struts2

是基于MVC设计模式的WEB层框架

WEB层框架

Struts1,WebWork,Struts2,SpringMVC

Struts2的内核是基于WebWork的

前端控制器模式

01

Struts2的入门

  1. 解压之后:
    • apps :Struts2 里面提供的一些测试的应用
    • docs :Struts2 里面的帮助文档
    • lib :Struts2的提供的开发的jar包
    • src :Struts2提供的源码
  2. 导包,导最少的包,找到blank项目下的jar包,导这些即可
  3. 写一个jsp页面,跳转的目标的路径是xxx.action.

<h3> <a href="${pageContext.request.contextPath}/hello.action">访问Struts2框架</a></h3>

  1. 配置Struts2的核心过滤器,前端控制器(完成部分功能),会默认执行拦截器(过滤器路径在struts2-core/包后边是filter/StrutsPrepareAndExecuteFilter.class),然后会跳到配置文件中
  2. 写action类里面有一个execute方法,方法的格式是固定的:
    必须是public ,返回值是String,方法名execute,方法中没有参数

  3. 配置action类的配置文件
    struts2默认的配置文件是struts.xml,写在src下。

    • 配置文件写法:copy约束,struts标签,里边有package
      • package标签属性:name extends namespace
      • package里边有action:name class类action的全路径
  4. 修改struts2配置文件:加一个result标签
<struts>
   <package name="demo01" extends="struts-default" namespace="/">
       <action name="jsp中的xxx" class="类action的全路径">
           <result name="success(action传过来的字符串)">要跳转的路径</result>
       </action>
   </package>
</struts>

struts2的执行流程

当一个页面发送一个请求的时候,首先经过核心过滤器(StrutsPrepareAndExecuteFilter),在这个过滤器中其实会执行一组拦截器(这组拦截器就完成了部分的功能),执行完这组拦截器之后,执行目标Action,返回一个结果视图,根据返回结果跳转不同界面。

struts2常见的配置

struts2的配置文件的加载顺序:(了解)

过滤器StrutsPrepareAndExecuteFilter会在服务器启动时初始化。
在过滤器中会执行dispatcher = init.initDispatcher(config);,然后在执行dispatcher.init();,再然后会执行下面的配置文件

init_DefaultProperties(); // [1]                -----default.properties 核心包里第一个包下边呢
init_TraditionalXmlConfigurations(); // [2]        -----struts-default.xml,struts-plugin.xml,struts.xml
init_LegacyStrutsProperties(); // [3]            -----struts.properties
init_CustomConfigurationProviders(); // [5]        -----客户自定义提供类
init_FilterInitParameters() ; // [6]            -----加载web.xml中过滤器中的参数
init_AliasStandardObjects() ; // [7]            -----加载自定义类

这几个值规定了加载配配置文件的顺序:

  • default.properties
  • struts-default.xml
  • struts-plugin.xml
  • struts.xml
  • struts.properties
  • web.xml

主要用的后三个,顺序是由上到下

struts2的主要配置文件:

struts2中Action的配置(struts.xml)
  1. 包的配置(package)

    Struts2为了更好的管理Action,将Action分包进行管理的。

    • /< package />包中的顺序
      • name :包名,一个配置文件中不要出现重复的包名
      • extends:继承别的包,通常继承struts-default
      • namespace:名称空间,跟下边的/中的name属性共同决定访问路劲
        • namespace=”“; 最后在找这个,在/之后
        • namespace=”/”; 没有指定的名称的执行这个,一般就会写这个
        • namespace=”/aaa”; 首先找带名称空间的,这个是最大化
      • abstract:是否可以被别的包继承,true表示可以应用于其他包的继承
  2. Action的配置

    • /< action /> 的配置
      • name:与名称空间共同决定访问路劲
      • class:Action类的全路径
      • method:Action中要执行的方法的名称,默认值execute
Structs2中常量的位置

Struct中常量有三个配置的位置:

  • struts.xml(推荐)
    <constant name="struts.action.extension" value="action">

  • struts.properties
    struts.actioin.extension=action

  • web.xml

  // <filter>中加一个
  <init-param>
     <param-name>struts.actioin.extension</param-name>
     <param-value>action</param-value>
  </init-param>

这里的struts.actioin.extension常量,表示访问的时候,路径的后缀名要加什么,默认是action, ,表示action跟空


改配置文件不用重启服务器
<constant name="struts.devMode" value="true" />

Struts2分模块开发的配置

在struts2.xml 配置文件中用<include file="要包含的子配置文件"/>

Action的编写

Action本身是一个POJO的类

POJO(plain ordinary java object)的类,简单的java类:没有继承任何类。

Action实现一个Action的接口

在action的接口中,提供了个常量(逻辑视图名称)
- SUCCESS :成功
- NONE :不跳转
- ERROR :跳转到错误的页面
- INPUT :表单校验
- LOGIN :跳转到登陆页面

Action继承一个ActionSupport的类

ActionSupport实现Action的接口,还有好多扩展的方法
在父类里面的execute里,直接返回的SUCCESS。

以后写的时候最好使用这种方法。

Action的访问

现在已经可以访问到Action,但是一次请求对应了一个Action的,需要一个模块的多次请求添加到一个Action中。

可以在struts.xml中配配置
//页面
<h1>客户管理</h1>

<h3><a href="${ pageContext.request.contextPath }/addCustomer.action">添加客户</a></h3>
<h3><a href="${ pageContext.request.contextPath }/findCustomer.action">查询客户</a></h3>
<h3><a href="${ pageContext.request.contextPath }/updateCustomer.action">修改客户</a></h3>
<h3><a href="${ pageContext.request.contextPath }/deleteCustomer.action">删除客户</a></h3>

//编写action
public class CustomerAction extends ActionSupport{

    public String add(){
        System.out.println("保存客户...");
        return NONE;
    }
    public String find(){
        System.out.println("查询客户...");
        return NONE;
    }
    public String update(){
        System.out.println("修改客户...");
        return NONE;
    }
    public String delete(){
        System.out.println("删除客户...");
        return NONE;
    }
}

//配置action
<!-- 配置package包 -->
    <package name="demo3" extends="struts-default" namespace="/">
        <!-- 配置action -->
        <action name="addCustomer" class="com.itheima.struts2.action3.CustomerAction" method="add"/>
        <action name="findCustomer" class="com.itheima.struts2.action3.CustomerAction" method="find"/>
        <action name="updateCustomer" class="com.itheima.struts2.action3.CustomerAction" method="update"/>
        <action name="deleteCustomer" class="com.itheima.struts2.action3.CustomerAction" method="delete"/>
    </package>
通配符的方式

//第一个*代表的数就是传过来的那个参数的后部分,正好是method里的东西

//页面
<h1>商品管理</h1>
<h3><a href="${ pageContext.request.contextPath }/product_add.action">添加客户</a></h3>
<h3><a href="${ pageContext.request.contextPath }/product_find.action">查询客户</a></h3>
<h3><a href="${ pageContext.request.contextPath }/product_update.action">修改客户</a></h3>
<h3><a href="${ pageContext.request.contextPath }/product_delete.action">删除客户</a></h3>

//编写Action
public class ProductAction extends ActionSupport{

    public String add(){
        System.out.println("保存商品...");
        return NONE;
    }
    public String find(){
        System.out.println("查询商品...");
        return NONE;
    }
    public String update(){
        System.out.println("修改商品...");
        return NONE;
    }
    public String delete(){
        System.out.println("删除商品...");
        return NONE;
    }
}

//配置Action:
        <!-- 通配符的方式的配置 -->
        <action name="product_*" class="com.itheima.struts2.action3.ProductAction" method="{1}"/>

更通配的写法:
02

动态方法访问
在struts2中默认是关闭的,需要开启,在default.porperties中,需要在配置文件中修改称true

<constant name="struts.enable.DynamicMethodInvocation" value="true">

//页面
<h1>订单管理</h1>
<h3><a href="${ pageContext.request.contextPath }/order!add.action">添加订单</a></h3>
<h3><a href="${ pageContext.request.contextPath }/order!find.action">查询订单</a></h3>
<h3><a href="${ pageContext.request.contextPath }/order!update.action">修改订单</a></h3>
<h3><a href="${ pageContext.request.contextPath }/order!delete.action">删除订单</a></h3>

//配置。不用写method
<!-- 动态方法的访问 -->
<action name="order" class="com.itheima.struts2.action3.OrderAction"/>

跳转之后,如果result里边是success可以省略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值