Struts 1使用ActionServlet作为分发器,而Struts 2使用Filter作为分发器。如果有多个Filter,要把Struts 2的分发器Filter放在最后

web.xml

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.FilterDispatcher
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Struts 2的默认后缀为".action",配置<url-pattern>时最好配置为"/*"而不要只配置成"/*.action",因为Struts 2集成了一些Javascript、CSS资源,而这些资源都不以"/*.action"为后缀

struts.properties配置了Struts 2的一些默认参数,每个可配置的参数都有一个默认值,该文件不是必须的,如果无需修改任何参数值,可以不用添加该文件

Struts 2的默认属性位于struts2-core.jar包org/apache/sturts2下面的default.properties里,用户可以在项目的/WEB-INF/classes下添加struts.properties覆盖默认的配置

常用属性如下

#上传文件的工作目录与文件的最大尺寸
struts2.multipart.saveDir =
struts2.multipart.maxSize =

#Struts 2的默认后缀
struts.action.extension = 

#是否为开发模式
struts.devMode = false or ture

#默认的主题、模板、模板文件后缀
struts.ui.theme = xhtml
struts.ui.templateDir =
struts.ui.templateSuffix = ftl

#Struts 2的默认配置文件
struts.configuration.files = struts-default.xml,struts-plugin.xml,struts.xml

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
  <!DOCTYPE struts PUBLIC
      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
      "http://struts.apache.org/dtds/struts-2.0.dtd">
  <struts>

    <!-- 该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 -->
    <constant name="struts.action.extension" value="do" />

    <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
    <constant name="struts.serve.static.browserCache" value="false" />

    <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
    <constant name="struts.configuration.xml.reload" value="true" />

    <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
    <constant name="struts.devMode" value="true" />

    <!-- 默认的视图主题 -->
    <constant name="struts.ui.theme" value="simple" />
    <!--<constant name="struts.objectFactory" value="spring" />-->

    <!--解决乱码-->
    <constant name="struts.i18n.encoding" value="UTF-8" />

    <!-- 指定允许上传的文件最大字节数。默认值是2097152(2M) -->
    <constant name="struts.multipart.maxSize" value="10701096"/>

    <!-- 设置上传文件的临时文件夹,默认使用javax.servlet.context.tempdir -->
    <constant name="struts.multipart.saveDir " value="d:/tmp" />

    <!--将其他配置文件包含进来,其他配置文件必须是完整的-->
    <include file="struts-user.xml"></include>
    <include file="struts-login.xml"></include>

	<!--配置Bean-->
	<bean class=""  name=""></bean>

   <!-- 自定义的package一般继承自struts-default,struts-default定义了默认的拦截器,比如从request中获取数据并设置到Action上的工作都是Struts 2拦截器完成的,如果配置了namespace ,那么在访问时需要加上namespace -->
   <package name="struts2" namespace="/mystruts" extends="struts-default">
		<!--配置拦截器-->
		<interceptors>
			<interceptor name="loginInterceptor" class="com.clf.LoginInterceptor"></<interceptors>>
		</interceptors>

		<!--配置全局result-->
		<global-results>
			<result name="login">/login.jsp</result>
		</global-results>

		<!--配置全局异常-->
		<global-exception-mappings>
			< exception-mappings result="/exception.jsp" exception="java.lang.Exception"> </ exception-mappings >
		</global- exception-mappings >

		<!--配置action-->
       <action name="sum" class="action.FirstAction">
           <result name="positive">/positive.jsp</result>
           <result name="negative">/negative.jsp</result>
       </action>
      </package>
  </struts>

自定义Action一般直接继承自ActionSupport类,并覆盖execute()方法,Struts 2没有Struts 1中的ActionForm之类的容器,此类容器由Action兼任,变量的值会被Struts 2通过setter方法自动赋值

import  com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
	private String account;
	private String account;

	public String execute(){  //主方法
		if(……)
			return LOGIN;
		}

		return SUCCESS;
	}
	//setter、getter方法略
}

ActionSupport实现了Action接口,而Action接口中定义了几个常用的result名称,编程中尽量使用这些预置的result名称

public interface Action{
	public static final String SUCCESS = "success";
	public static final String NONE = "none";
	public static final String ERROR = "error";
	public static final String INPUT = "input";
	public static final String LOGIN = "login";

	public abstract String execute() throws Exception;
}

Struts 2的Action不一定非要实现Action接口,任何POJO都可以用作Action,只要这个Action具有public String execute()方法,Struts 2会通过反射调用execute()方法,如

public class LoginAction {
	private String account;
	private String account;

	public String execute(){
		if(……)
			return LOGIN;
		}

		return SUCCESS;
	}
	//setter、getter方法略
}

不实现Action的好处是不与Struts 2发生耦合,代码不依赖Struts 2的类库

execute()是Action的默认方法,Struts 2还可以执行其他方法,只要这些方法没有参数,并返回String类型,throws声明可有可无,如

public class LoginAction extends ActionSupport{
	private String account;
	private String account;
	//setter、getter方法略

	public String execute(){  //主方法
		if(……)
			return LOGIN;
		}

		return SUCCESS;
	}

	public String login() throws Exception{  //自定义方法
		return LOGIN;
	}

	public String logout() throws Exception{  //自定义方法
		return "logout";
	}

}

可以通过/login!login.action访问login()方法,同理,通过/login!logout.action访问logout()方法

此外,也可以把方法配置到Action当中

<action name="login" class="com.clf.LoginAction" method="login">
    <result name="login">/login.jsp</result>
    <result name="logout">/logout.jsp</result>
</action>
<action name="logout" class="com.clf.LoginAction" method="logout">
    <result name="login">/login.jsp</result>
    <result name="logout">/logout.jsp</result>
</action>

缺点是需要配置多次





Struts 1在使用POJO时,必须显示的new一个对象,而Struts 2不需要,如果没有对象,会在运行时通过反射实例化一个对象

Struts 2 之配置文件的更多相关文章

  1. struts几个配置文件加载顺序_2015.01.04

    struts几个配置文件加载顺序: 01:struts-default.xml 02:struts-plugin.xml 03:struts.xml 04:struts.properties 05:w ...

  2. Struts按着配置文件的加载的顺序,后面文件和前面文件相同的配置,后面的会把前面的文件的值覆盖

    Struts按着配置文件的加载的顺序,后面文件和前面文件相同的配置,后面的会把前面的文件的值覆盖

  3. 2018.12.15 struts.xml 一般配置文件写法 && 配置动态方法

    struts.xml 原始配置文件 配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE s ...

  4. Struts 1 之配置文件

    web.xml中配置Struts的入口Servlet--ActionServlet,ActionServlet不负责任何的业务处理,它只是查找Action名单,找到path属性与URL属性一致的Act ...

  5. struts 1.x配置文件说明

    <struts-config> <global-exceptions /> <!--全局映射定义--> <global-forwards> <fo ...

  6. 【JavaEE企业应用实战学习记录】struts配置文件详细解析

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-/ ...

  7. Struts配置文件以Spring的方式实现自定义加载

    在使用struts时,我们需要在web.xml中配置过滤器,同时我们需要配置struts的配置文件路径来加载项目中struts的相关配置信息.如果我们不配置路径的话,Struts会有一些默认的加载路径 ...

  8. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...

  9. Struts相关

    使用Struts2流程: 1.导入Struts2类包 2.在Web源代码文件夹中,创建名为struts.xml的配置文件.在其中定义Action对象,其关键代码如下: struts.xml: < ...

随机推荐

  1. Python3玩转儿 机器学习(2)

    机器学习的基本任务 分类任务 回归任务 分类任务 手写输入数字识别 分类任务: 二分类任务 判断邮件是垃圾邮件或者不是垃圾邮件 判断发放给客户信用卡有风险或者没有风险 判断病患良性肿瘤还是恶性肿瘤 判 ...

  2. 51nod 1364 最大字典序排列(线段树)

    1364 最大字典序排列基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出一个1至N的排列,允许你做不超过K次操作,每次操作可以将相邻的两个数交换,问能够得到的字 ...

  3. 2015 多校联赛 ——HDU5410(dp)

    Sample Input 1 100 2 10 2 1 20 1 1   Sample Output 21 题意:共有m元钱和n种东西,求每种单价p,而且你买x个该种物品可以得到Ax+B个,求m元钱最 ...

  4. hihocoder #1073 : 光棍节

    描述 尽管付出了种种努力,jzp还是得过光棍节. jzp非常不爽,但也无能为力,只能够哀叹起来他的命运.他想到了一位长者的人生经验:"人的一生,不光要靠自我奋斗,也要考虑历史的进程" ...

  5. bzoj 2440 (莫比乌斯函数)

    bzoj 2440 完全平方数 题意:找出第k个不是完全平方数的正整数倍的数. 例如 4  9  16  25 36什么的 通过容斥原理,我们减去所有完全数  4有n/4个,但是36这种会被重复减去, ...

  6. [bzoj4868][Shoi2017]期末考试

    来自FallDream 的博客,未经允许,请勿转载,谢谢. 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天或之前得知所.有.课程的成绩.如果在 ...

  7. [bzoj1143][CTSC2008]祭祀

    题意:给定一个n个点m条边的有向无环图,你要选出最多的点,并且满足任意两点之间都不存在通路.2)输出每个点选了它之后还是否有最优解.   n<=100 m<=1000 题解:每个点拆两个点 ...

  8. 腾讯北京SNG一面

    写在前面 面试官超nice,以一种聊天的形式跟你交流.上午10点10左右开始,11点40结束.总的来说,基础还可以,但是有些东西的底层学的还是不够深. 问题回忆 自我介绍 怎么平衡科研与项目开发之间的 ...

  9. Modern Algebra 读书笔记

    Modern Algebra 读书笔记 Introduction 本文是Introduction to Modern Algebra(David Joyce, Clark University)的读书 ...

  10. 关于一些基础的Java问题的解答(二)

    6. Hashcode的作用 官方对于hashCode的解释如下: Whenever it is invoked on the same object more than once during an ...