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

}
时间: 2024-10-13 22:28:07

Struts2基础学习总结(二)的相关文章

javascript基础学习(二)

javascript的数据类型 学习要点: typeof操作符 五种简单数据类型:Undefined.String.Number.Null.Boolean 引用数据类型:数组和对象 一.typeof操作符 typeof操作符用来检测变量的数据类型,操作符可以操作变量也可以操作字面量. 对变量或值运用typeof操作符得到如下值: undefined----如果变量是Undefined类型: boolean-------如果变量是Boolean类型: number-------如果变量是Numbe

AspectJ基础学习之二搭建环境(转载)

AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可以提供语法检查,以及编译.这里要说一点重要的知识: aspectj不能使用传统的JDK编译,他的编译器扩展自JDK.AJDT提供的编译功能,就为我们省了很多事,当然你也可以用命令行自己去编译(不过我从来没有这么做过). 无论是apsectj的安装,还是AJDT网上还是有很多文章讲的.不会的同学可以自

Struts2基础学习总结

Struts2基础学习总结(一)---入门 Struts 2: Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互.Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大.Struts2以WebWork为核心,采用拦

javascript 基础学习整理 二 之 html对象总结,参考W3C

Anchor 对象 更改一个链接的文本.URL 以及 target 使用 focus() 和 blur() 向超链接添加快捷键 Document 对象 使用 document.write() 向输出流写文本 使用 document.write() 向输出流写 HTML 返回当前文档的标题 返回当前文档的 URL 返回当前文档的 referrer 返回下载当前文档的服务器域名 使用 getElementById() 使用 getElementsByName() 打开一个新的文档,添加一些文本,然后

JavaScript 基础学习(二)

JavaScript 基础学习(二) instanceof方法: var s = "hello"; var i = 8; //typeof 只能判断基本数据类型 alert(typeof(s)); alert(typeof (i)); //对于引用数据类型,用instanceof var s2=new String("hello2") alert(typeof(s2)); alert(s2 instanceof String);//true var n = new

opengl基础学习专题 (二) 点直线和多边形

题外话 随着学习的增长,越来越觉得自己很水.关于上一篇博文中推荐用一个 学习opengl的 基于VS2015的 simplec框架.存在 一些问题. 1.这个框架基于VS 的Debug 模式下,没有考虑Release版本 2.这个版本中chead,c基础头文件中有些宏设计的不好,例如 //4.0 控制台打印错误信息 #ifndef CERR #define CERR(fmt,...) fprintf(stderr,fmt,##__VA_ARGS__),putchar('\n') #endif/*

Struts2基础学习(二)&mdash;Action

一.ActionSupport      为了让用户开发的Action类更加规范,Struts2提供了一个Action接口,这个接口定义了Struts2的Action处理类应该实现的规范.下面是标准Action接口的代码: public interface Action { public static final String SUCCESS = "success"; public static final String NONE = "none"; public

Java基础学习笔记二十 IO流

转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStreamWriter,这又是什么意思呢? OutputStreamWriter类 查阅OutputStreamWriter的API介绍,OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节.它的作用的就是,将字符串按照指定的编码表转成字节,

Java基础学习笔记二十八 管家婆综合项目

本项目为JAVA基础综合项目,主要包括: 熟练View层.Service层.Dao层之间的方法相互调用操作.熟练dbutils操作数据库表完成增删改查. 项目功能分析 查询账务 多条件组合查询账务 添加账务 编辑账务 删除账务 项目环境搭建 技术选型和jar包介绍 每个项目都要使用一些已经成熟的技术,它们通常是由一些专业组织或团队所提供的开源免费技术.在今后的学习过程中,我们会逐渐对这些专业组织有所了解.本项目中使用的技术如下: apache的commons组件: commons-dbutils