Struts2入门-01

Struts2是什么

概述


1. 什么是Struts2的框架
   /* Struts2是Struts1的下一代产品,是在 struts1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
    * 其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。
    * Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计
      也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
    * 虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。

2. Struts2是一个基于MVC设计模式的Web层框架
    * MVC和JavaEE的三层结构
        * MVC设计模式:是由一些网站的开发人员提出来的
        * JavaEE三层结构:SUN公司为EE开发划分的结构

3. 常见的Web层的框架
    * Struts1
    * Struts2
    * Webwork
    * SpringMVC

4. Web层框架的特点
    * 都是一个特点,前端控制器模式
    * 记住:前端控制器(核心的控制器)
    * Struts2框架前端的控制器就是过滤器
5. 前端控制器模式
    * 传统的方式中,一个请求对应着一个servlet
    * 在web层框架中,所有的请求会先经过一个前端控制器,在前端控制器中实现框架的
      部分功能,具体的业务逻辑交给具体的Action
    * 在struts中采用过滤器来实现前端控制器  

快速搭建struts2框架

导包

1. 创建WEB项目,编写JSP的页面,编写超链接,点击超链接发送请求,请求服务器,让服务器的方法去执行!!
    <h3>Struts2的入门程序</h3>
    <a href="${ pageContext.request.contextPath }/hello.action">Struts2入门程序</a>

2. 下载Struts2的开发包
    * https://struts.apache.org/        -- 官网地址

3. 解压struts-2.3.24-all.zip包
    * 解压后会看到有包和一些文件,大家需要掌握包相关的信息
        * apps  -- Struts2框架提供了一些应用
        * libs  -- Struts2框架开发的jar包
        * docs  -- Struts2框架开发文档
        * src   -- Struts2框架源码

4. 引入需要开发的jar包
    * Struts2框架的开发jar包非常多,但是不是所有都是必须要引入的,有一些必须要导入的jar包
      这些jar包可以从Struts2框架提供的应用中找到。
    * 大家可以打开apps目录,然后找到struts2-blank.war应用。war包和zip包的压缩格式是一样的
      所以可以自己修改后缀名,解压。
    * 导入解压后的jar包就可以了

书写Action类

    /**
     * Action类中的方法签名有要求的,必须这么做
     * public 共有的
     * 必须有返回值,必须String类型
     * 方法名称可以是任意的,但是不能有参数列表
     * 页面的跳转:
     *  1. return "字符串"
     *  2. 需要在strtus.xml配置文件中,配置跳转的页面
     */

public String execute(){
    System.out.println("hello struts2");
    return "success";
}

书写配置文件(src/struts.xml)

  • 配置文件名称是struts.xml(名称必须是struts.xml)
  • 在src下引入struts.xml配置文件(配置文件的路径必须是在src的目录下)
<?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="hello" namespace="/hello" extends="struts-default" >
        <action name="HelloAction" class="cn.itheima.a_hello.HelloAction" method="hello" >
            <result name="success" type="dispatcher" >/hello.jsp</result>
        </action>
    </package>
</struts>

配置核心过滤器到web.xml中

<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>

测试

输入请求路径测试

struts2架构(访问流程)

image

image

配置文件详解

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>

    <!--
        1.package: 将Action配置封装,就是在package中可以配置很多Action
             * name : 给包起个名字,起到标识作用(不与其他包名重复即可)随便取
             * namespace : 给action的访问路径中定义一个命名空间,跟<action>标签中的
                           name属性共同决定访问路径,默认为空
             * extends : 继承一个指定包,只要继承了就具有该包的所有功能 struts-default 是必须要继承的
             * abstract : 包是否为抽象的; 标识性属性(给开发者看的)标识该包不能独立运行.专门被继承

       2.action: 配置action类
             * name : <package>标签的namespace属性一起来决定访问路径的
             * class : 配置Action类的全路径(默认值是ActionSupport类)
             * method : 指定调用Action中的哪个方法来处理请求,如果不指定,默认值是execute

       3.result : 配置结果
             * name : 结果页面逻辑视图名称
             * type : 指定调用哪一个result类来处理结果,默认使用转发
             * 标签体 : 填写页面的相对路径
    -->
    <package name="hello" namespace="/hello" extends="struts-default" >
        <action name="HelloAction" class="com.xiaoming.controller.HelloAction" method="execute" >
            <result name="success" type="dispatcher" >/index.jsp</result>
        </action>
    </package>
</struts>

struts2常量配置

struts2默认常量配置位置

image

修改struts2常量配置方式

  • 在src/struts.xml中(重要)
 <constant name="key" value="value"></constant>
  • 在src下创建struts.properties(了解)
//以键值对的形式
struts.i18n.encoding=UTF-8
  • 在web.xml文件中(了解)
在StrutsPrepareAndExecuteFilter配置文件中配置初始化参数
<!-- 配置常量 在核心过滤器标签下 -->
  <init-param>
    <param-name>struts.i18n.encoding</param-name>
    <param-value>UTF-8</param-value>
  </innit-param>

常量配置文件加载顺序

image

常量配置

    <!-- i18n:国际化. 解决post提交乱码 get乱码自己解决  -->
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <!-- 指定反问action时的后缀名 
        http://localhost:8080/struts2_day01/hello/HelloAction.action
    -->
    <constant name="struts.action.extension" value="action"></constant>
    <!-- 指定struts2是否以开发模式运行
            1.热加载主配置.(不需要重启即可生效)
            2.提供更多错误信息输出,方便开发时的调试
            项目上线的时候设置为 false
     -->
    <constant name="struts.devMode" value="true"></constant>
* struts.serve.static.browserCache=true
    -- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 
* struts.configuration.xml.reload=false
    -- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用)

分模块开发配置

    <!-- 引入其他struts配置文件 -->
    <include file="cn/itheima/b_dynamic/struts.xml"></include>
    <include file="cn/itheima/c_default/struts.xml"></include>

struts2配置进阶

动态方法调用

  • ==通配符方式(重要)==
<?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="dynamic" namespace="/dynamic" extends="struts-default" >
        <!-- 
            通配符方式:
              使用{1} 取出第一个星号通配的内容

              访问的url :
               http://localhost:8080/项目名/namespace/actionName_方法名.后缀
        -->
        <action name="Demo1Action_*" class="cn.itheima.b_dynamic.Demo1Action" method="{1}" >
                <result name="success" >/hello.jsp</result>
        </action>
    </package>
</struts>
  • 配置动态方法调用方法常量
        <!-- 配置动态方法调用是否开启常量
                默认是关闭的,需要开启(true)

                访问的url : http://localhost:8080/项目名/namespace/actionName 方法名!后缀

                不利于seo优化
         -->
    <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>

struts2中的默认配置

<?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="/default" extends="struts-default" >
            <!-- 找不到包下的action,会使用Demo2Action作为默认action处理请求 -->
            <default-action-ref name="Demo2Action"></default-action-ref>
            <!-- 常见默认值 -->
            <!-- method属性:execute  -->
            <!-- result的name属性:success  -->
            <!-- result的type属性:dispatcher 转发  -->
            <!-- class属性:com.opensymphony.xwork2.ActionSupport -->
            <action name="Demo2Action"   >
                <result  >/hello.jsp</result>
            </action>
        </package>
</struts>

Action类的三种写法

1. 配置文件学习完成,下面的重点是Action类的三种写法
   /* 写一个POJO类
        * 什么是POJO类,POJO(Plain Ordinary Java Object)简单的Java对象.
          简单记:没有继承某个类,没有实现接口,就是POJO的类。

    * 实现Action接口
        * Action接口中定义了5个常量,5个常量的值对应的是5个逻辑视图跳转页面
          (跳转的页面还是需要自己来配置),还定义了一个方法,execute方法。
        * 大家需要掌握5个逻辑视图的常量(实际上就是一个字符串)
            * SUCCESS       -- 成功.
            * INPUT         -- 用于数据表单校验.如果校验失败,跳转INPUT视图.
            * LOGIN         -- 登录.
            * ERROR         -- 错误.
            * NONE          -- 页面不转向.
        * 给我们提供上述的常量只是为了统一规范

    * 继承ActionSupport类(开发中这种方式使用最多)
        *  帮我们实现了 Validateable, ValidationAware, TextProvider, LocaleProvider 等接口
        *  如果我们需要用到这些接口的实现时,不需要自己来实现了
发布了25 篇原创文章 · 获赞 5 · 访问量 6661
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章