zoukankan      html  css  js  c++  java
  • struts2-第一章-基础用法2

    一,回顾

    struts2框架搭建步骤

      (1)创建maven项目

      (2)web.xml配置struts2的核心过滤器(filter)

      (3)pom.xml配置servlet,struts的依赖

      (4)把自定义action类配置struts.xml中

    action类中默认执行的方法:

      execute(),若要修改默认方法:;struts.xml中action节点配置method,action中默认方法的返回值:

      "success"若要修改的返回值:struts.xml中result节点name属性

    表单数据的提交: 

      使用成员变量

      注意:

      (1)       action类中成员变量名称必须和表单中元素name一样

      (2)       action类中成员变量必须有set和get方法,利用反射来访问成员变量

      (3)       action类中成员变量名称前两个字母必须小写开头

    二,配置默认的action 

      当我们访问项目根路径,会显示index.jsp原因是我们在web.xml中配置了默认的欢迎页面

    在struts2框架目录中,访问的路径不存在,抛404异常,此时我们可以使用默认action,当访问路径不存在时,可以显示一个友好的提示页面

    1、新建DefaultAction

    public class DefaultAction extends ActionSupport {
        @Override
        public String execute() throws Exception {
            return SUCCESS;
        }
    }

    2、配置struts.xml

    <package name="default" namespace="/" extends="struts-default">
            <!-- 配置默认action,当访问的路径不存在时,会执行此action -->
            <default-action-ref name="defaultAction"></default-action-ref>
            <action name="defaultAction" class="com.yujun.maven.action.DefaultAction">
                <result>/default.jsp</result>
            </action>
    </package>

    3、默认页面

    三.package模块化

    当项目比较庞大,通常是按照模块进行开发,比如用户模块,部门模块......,

    如果我们吧所有的模块的action都配置在同一个package节点中,

    显然不合适,此时我们可以按照模块进行划分,为每个模块配置一个单独的package节点

    注意:

      (1)多个package节点,节点的name属性必须唯一

      (2)为了访问多个package中同名的action,我们应该为每一个package节点配置相应的namespace属性

    以此作为模块化

    namespace:

      指定package中action所在的命名空间,取值哟三种:

    (1)"":  默认值,表示当其他命名空间都不能匹配时,来次命名空间查询action

    (2)"/":表示根路径

    (3):"/xxx":项目根路径/xxx,访问此命名空间中的action时,需要加上/xxx作为前缀路径

    比如:

    <package name="p1" namespace="/user" extends="struts-default">
             <action name="/demo1Action" class="com.liwenzheng.maven.action.Demo1Action">
            <result>/demo.jsp</result>
            </action>
        </package>

    四,struts.xml模块化

      

    前面我们使用package作为模块化划分,还是会存在一些缺陷,比如模块很多,我们的配置都在同一个struts.xml文件中,那么此时配置文件就比较庞大,不利于管理和维护,此时使用include指令,把别的struts.xml配置包含在总配置文件中

             比如有一个模块user,我们可以新建struts-user.xml配置,然后在strut.xml总配置文件中使用include包含

    (1)struts-user.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>
        
        <!-- 访问此包中的所有action时,都需要在actionName前加上/user前缀 -->
        <package name="p1" namespace="/user" extends="struts-default">
            <action name="demo1Action" class="com.yujun.maven.action.Demo1Action">
                <result>/demo1.jsp</result>
            </action>
        </package>
    
    </struts>

    (2)struts.xml

    <!-- 包含struts-user.xml文件 -->    
    <include file="struts-user.xml"></include>

    五,常量配置

    struts2框架中有两个比较重要的配置文件

      一个struts.xml主要负责应用的action映射和物理资源之间的映射关系

      另一个struts.properties,包含struts2框架的常量配置

    我们可以在struts.xml中更改struts.properties中的默认属性配置

    若要修改properties中默认配置,可以在struts.xml中使用下面方式更改

    <!-- 常量配置 -->
        <!-- 动态方法调用:true-开启,false-不开启 -->
        <constant name="struts.enable.DynamicMethodInvocation" value="true" />
        <!-- 是否开启调试模式:true-是,false-否 -->
        <constant name="struts.devMode" value="true" />

    六,异常配置

    开发中,必不可少的就是异常处理,如果在struts2框架的每个action的每个方法中都进行异常处理,很繁琐:

    此时我们可以使用异常配置,来减少代码量的开发

    struts2中异常配置有两种:

      (1) 全局异常:同一个package中所有的action有效

      (2)局部异常:对某一个特定的action有效

    例如,我们的方法中需要自己手动try-catch处理异常

    public String chufa(){
            try{
                int a = 1 / 0;
                return SUCCESS;  //成功时的返回值
            }catch(Exception e){
                e.printStackTrace();
            }
            return INPUT; //发生异常时的返回值
        }

    然后在struts.xml中针对两种返回值进行页面跳转

    <action name="demo2Action" class="com.yujun.maven.action.Demo2Action">
                <result name="success">/demo2.jsp</result>
                <result name="input">/error.jsp</result>
            </action>

    如果方法太多,这样就很繁琐,所以可以采用异常配置

    1.全局异常

    针对同一个package节点中的action生效

    (1)action类

    public String chufa2(){
            int a = 1 / 0;
            return SUCCESS; 
        }

    (2)struts.xml

    <package name="default" namespace="/" extends="struts-default">

        <!-- 配置默认action,当访问的路径不存在时,会执行此action -->

        <default-action-ref name="defaultAction"></default-action-ref>

       

        <!-- 全局异常配置 -->

        <!-- 全局异常的返回值和对应的页面 -->

        <global-results>

             <result name="error">/error.jsp</result>

        </global-results>

        <!-- 全局异常的映射 -->

        <global-exception-mappings>

             <!-- 异常映射:result-发生异常类型的返回值      exception:异常类型,这里使用Excepiton来匹配所有的异常 -->

             <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>

        </global-exception-mappings>

       

       

        <action name="defaultAction" class="com.yujun.maven.action.DefaultAction">

             <result>/default.jsp</result>

        </action>

       

        <action name="demo2Action" class="com.yujun.maven.action.Demo2Action">

             <result name="success">/demo2.jsp</result>

             <result name="input">/error.jsp</result>

        </action>

       

        </package>

    (3)错误页面

    <h3>
            sorry,发生未知错误,返回首页
    </h3>

    若想在错误页面输出异常信息,可以使用struts提供的标签

    2、局部异常

    针对某个package中某个特定的action生效

    <action name="demo2Action" class="com.yujun.maven.action.Demo2Action">
                <result name="success">/demo2.jsp</result>
                <result name="input">/error.jsp</result>
                <!-- 局部异常配置  -->
                <!-- 异常映射,result:发生异常类型的错误的返回值,exception:异常类型 -->
                <exception-mapping result="input" exception="java.lang.Exception"></exception-mapping>
    </action>

    3、注意

    当同时配置局部异常和全局异常,局部异常优先

  • 相关阅读:
    土法炼钢:怎么实现一个简单的B+Tree In-Disk
    panguan(判官):一个自研的任务执行引擎的工程实践
    团队源代码管理
    测试——俄罗斯方块
    测试——连连看
    测试——食物链教学小工具
    测试——约跑APP
    beta-review阶段贡献分分配
    第十周PSP&进度条
    吉林市一日游
  • 原文地址:https://www.cnblogs.com/faded8679/p/10750062.html
Copyright © 2011-2022 走看看