Struts2介绍及入门程序

什么是struts2

struts2框架是一个基于MVC设计模式的web层应用框架,它本质上相当于一个servlet,在MVC设计模式中,struts2作为控制器来建立模型与视图之间的数据交互,Struts2以webwork为核心,采用拦截器的机制来处理用户的请求,这样就使得业务逻辑器能够与servlet完全分开。

使用struts2的优势
  • 自动封装参数
  • 参数校验
  • 结果的处理(转发|重定向)
  • 国际化
  • 显示等待页面
  • 防止表单重复提交
  • 提供Exception处理机制
  • 有ajax支持
struts2基于前端控制器的实现模式

在传统的开发方式中,有一次请求就会对应一个servlet,这样就会有多个servlet。而struts2会将所有请求都先经过一个前端控制器,经过前端控制器实现部分功能,剩下的交给各个Action中,所有的请求都会经过前端控制器发送到Action中。那么用什么方式来实现前端控制器呢?最好的方式就是通过实现一个过滤器,这样所有的请求都可以被拦截。

struts2入门程序

这里写图片描述

struts2包的说明
这里写图片描述

struts导入约束
导入约束地址

  • 导包
  • 配置前端控制器,拦截所有请求
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <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-app>
  • 编辑一个Action类
package com.zillion.action;

public class testAction {
    /**
     * execute是struts默认的执行方法
     * @return
     */
    public String execute(){
        System.out.println("测试Action");
        return "success";
    }
}
  • 编写struts.xml的action请求配置
<?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用于定义包的配置,该包中包含了多个Action请求。 
        name属性: 给包起个名字,起到标识作用.随便起.不能其他包名重复.
        namespace属性:给action的访问路径中定义一个命名空间
        extends属性: 继承一个 指定包 
        abstract属性:包是否为抽象的; 标识性属性.标识该包不能独立运行.专门被继承
    -->
    <package name="test" extends="struts-default" namespace="/">
        <!-- action元素:配置action类 
            name:决定了Action的访问路径名
            class:Action的完整类名
            method:指定调用Action中的哪个方法来处理请求
        -->
        <action name="testAction" class="com.zillion.action.testAction" method="execute">
            <!-- 
                result元素:结果配置
                name:标识结果处理的名称.与action方法的返回值对应.
                type:指定调用哪一个result类来处理结果,默认使用转发.
                标签体:填写页面的相对路径
             -->
            <result name="success" type="dispatcher">/hello.jsp</result>
        </action>
    </package>
</struts>
  • 前端页面
  <body>
    <a href="${pageContext.request.contextPath}/testAction.action">测试代码</a>
  </body>

点击超链接会成功跳转到hello.jsp页面

struts2的执行流程

这里写图片描述
1. 用户浏览地址,从客户端发送请求。
2. 经过struts2的前端控制器进行拦截,然后执行默认的拦截器
3. 然后跳转到执行Action类中的方法
4. 执行完毕后,会根据方法的返回值去进行相应的页面跳转

struts的常量配置
  1. 在struts.xml文件中使用constant元素配置常量,放在struts元素内
    <!-- i18n:国际化. 解决post提交乱码 -->
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <!-- 指定反问action时的后缀名 
        http://localhost:8080/struts2_day01/hello/HelloAction.do
    -->
    <constant name="struts.action.extension" value="action"></constant>
    <!-- 指定struts2是否以开发模式运行
            1.热加载主配置.(不需要重启即可生效)
            2.提供更多错误信息输出,方便开发时的调试
     -->
    <constant name="struts.devMode" value="true"></constant>
  1. 在struts.properties中配置常量信息
### 设置默认的编码集utf-8
struts.i18n.encoding=UTF-8
### 设置访问的后缀名或取消后缀名
struts.action.extension=action,,
### 设置不使用开发模式
struts.devMode=false
分模块开发

在实际开发中,多个人会开发不同的模块,每个人就会有不同的struts.xml配置文件,为了导致所有人使用相同的struts配置文件,将主配置文件进行覆盖。所以就可以让每个人开发不同的struts.xml配置文件,最后项目使用大的struts配置文件,在大的配置文件中,引入每个模块的配置文件即可

    <!-- file填入要引入的struts配置文件,具体是包名加配置文件 -->
    <include file="cn/itheima/c_default/struts.xml"></include>
struts2中的默认配置信息

method属性:execute
result中的name:success
result中的type:dispatcher

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值