zoukankan      html  css  js  c++  java
  • Struts2基础学习总结(二)

    Struts2基础学习总结(二)---struts.xml参数


     

    1.常量

    使用<constant name="" value=""></constant>元素进行描述

    <?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>
    
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.devMode" value="true" />
    
    </struts>

    常用的常量

    常量名

    常量值

    说明

    struts.i18n.encoding

    UTF-8

    应用中使用的编码

    struts.objectFactory.spring.autoWire

    name

    和spring框架整合有关

    struts.multipart.parser

    jakarta

    指定文件上传用的组件

    struts.multipart.maxSize

    2097152

    文件上传总文件大小限制:2M

    struts.action.extension

    action,do,

    能进入Struts2框架内部的url地址后缀名。多个值用逗号分隔

    struts.enable.DynamicMethodInvocation

    false

    是否允许动态方法调用

    struts.devMode

    false

    是否是开发模式。开发模式:改了配置文件,不需要重启。输出更多的错误信息。开发阶段建议为true。

    struts.ui.theme

    xhtml

    页面展示用的主题

    2.package元素

    <?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>
    
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.devMode" value="true" />
    
        <package name="default" namespace="/" extends="struts-default">
         <!--  name:包的名称。必须写。且必须唯   -->
         <!--  namespace:名称空间    如:  namespace="/struts" 访问时必须加上  -->
         <!--  extends:一般情况下需要继承struts-default包,但不是必须的。不过如果不继承的话,将无法使用struts2提供的核心功能   -->
         <!-- abstract:把包声明为抽象包,抽象包就是用来被继承的。只要是没有<action>元素的包,就可以声明为抽象包  -->
        </package>
    
    </struts>

    3.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>
    
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.devMode" value="true" />
    
        <package name="default" namespace="/" extends="struts-default">
    
            <action name="login" class="com.hdj.controller.userLogin" method="userLogin" >
             <!--  name:动作名称 对应jsp中     form表单的action   -->
             <!-- class:动作类全名     class省略时继承ActionSupport-->
             <!-- method:动作类中的方法名称   method省略时默认是public String execute(){}-->   
             <result  name="MySuc" >/mysuc.jsp </result>
             <!-- result中name返回的是 controller层方法的返回值-->
             <!-- type:结果类型,指的就是用什么方式转到定义的页面。默认是dispatcher请求转发   type类型还有redirect chain-->
            </action>
         
         </package>
    </struts>

    action中的通配符*

          <action name="*" class="com.hdj.controller.userLogin" method="{1}" >
             <result  name="MySuc" >/{1}.jsp </result>
            </action>

    升级版:

     <action name="*_*" class="com.hdj.controller.{1}" method="{2}" >
             <result  name="MySuc" >/{2}.jsp </result>
            </action>

    动态方法调用:在Struts.xml的action中没有申明method的方法直接通过jsp页面的href动态调用动作类中的方法

    • 申明

    struts.enable.DynamicMethodInvocation

    false

    是否允许动态方法调用

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

    • action中不配method
    <action name="login" class="com.hdj.controller.userLogin"  >
             <result  name="MySuc" >/mysuc.jsp </result>
            </action>
    • 动作名称!动作方法名称(jsp页面)
     <a href="login!userLogin" >动态方法登入</a>

    4.全局视图

    当多个action中都使用到了相同result,这时我们应该把result定义为全局结果。(注:局部的会覆盖全局)

     <global-results>
                <result name="error">/error.jsp</result>
     </global-results>

    5.拦截器

    <?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>
    
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.devMode" value="true" />
        
        <package name="user" namespace="/" extends="struts-default">
            <interceptors>
                <!-- 拦截器声明  -->
                <interceptor name="authorInterceptor" class="com.hzp.interceptor.AuthorInter"></interceptor>
                <interceptor name="timeInterceptor" class="com.hzp.interceptor.TimeInterceptor"></interceptor>
                <!-- 拦截器栈 -->
                <interceptor-stack name="auth">
                    <interceptor-ref name="defaultStack"></interceptor-ref>
                    <interceptor-ref name="authorInterceptor"></interceptor-ref>
                    <interceptor-ref name="timeInterceptor"></interceptor-ref>
                </interceptor-stack>
                
                <interceptor-stack name="loginInter">
                    <interceptor-ref name="defaultStack"></interceptor-ref>
                    <interceptor-ref name="timeInterceptor"></interceptor-ref>
                </interceptor-stack>
            </interceptors>
            
            <action name="userLogin" class="com.hzp.controller.LoginCtrl" >
           <!-- 拦截器在action中使用  -->
                <interceptor-ref name="loginInter"></interceptor-ref>
                <result type="redirect">/welcome.jsp</result>
                <result name="login">/login.jsp</result>
            </action>
     </package>
    
    </struts>

    拦截器可以简单理解为“拒你所想拒”,关心你想要拒绝掉哪些东西,比如一个BBS论坛上拦截掉敏感词汇。拦截器就是指实现了Interceptor接口的类,(或者继承AbstractInterceptor)

    package com.hzp.interceptor;
    
    import java.util.Map;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.Interceptor;
    
    public class AuthorInter  implements Interceptor{
    
        public void destroy() {
            
        }
    
        public void init() {
            
        }
    
        public String intercept(ActionInvocation invocation) throws Exception {
            ActionContext ac = invocation.getInvocationContext();
            Map<String,Object> session = ac.getSession();
            String uName =(String) session.get("uName");
            if(uName != null){
                return invocation.invoke();
            }
            return "login";
        }
    
    }
    package com.hzp.interceptor;
    
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
    
    public class TimeInterceptor extends AbstractInterceptor{
    
        @Override
        public String intercept(ActionInvocation invocation) throws Exception {
            
            long startTime = System.currentTimeMillis();
           
            String result = invocation.invoke();
           
            long executionTime = System.currentTimeMillis() - startTime;
            System.out.println(executionTime);
            return result;    
        }
    
    }
  • 相关阅读:
    读《编写可维护的JavaScript》第七章总结
    读《编写可维护的JavaScript》第六章总结
    最新Blog
    cnUVA情况
    Casio普通计算器编程
    大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
    Pascal <-> C/C++ 转换简明教程
    [互动][扫盲]信息学奥林匹克竞赛是什么
    以后这个博客可能不会用啦 请到新地址...
    算法专题训练 搜索a-T3 Ni骑士(ni)
  • 原文地址:https://www.cnblogs.com/hudj/p/6855391.html
Copyright © 2011-2022 走看看