框架学习系列 之Struts2框架学习总结

Posted 琅晓琳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了框架学习系列 之Struts2框架学习总结相关的知识,希望对你有一定的参考价值。

1 介绍
学习和使用Struts2框架有了一段时间,这里将学习心得总结在博客的文章里面。期间也参考学习了其他优秀的文章,如有错误之处欢迎指正,转载请申明原文地址,希望大家支持,谢谢。

2 What:什么是Struts2框架
Struts2 是 Apache 软件组织推出的一个相当强大的 Java Web 开源框架,本质上相当于一个 servlet。Struts2基于MVC 架构,框架结构清晰。通常作为控制器(Controller)来建立模型与视图的数据交互,用于创建企业级 Java web应用程序。 拥有优良的设计和功能,其优势具体如下:

项目开源,使用及拓展方便;
通过简单、集中的配置调度业务类,使配置和修改都非常容易;
提供强大、可以有效减少页面代码的标签;
提供 Exception 处理机制,并且具有良好的 Ajax 支持;
Result 方式的页面导航,通过 Result 标签很方便地实现重定向和页面跳转;
Struts2 提供了强大的拦截器,利用拦截器可以进行 AOP编程(面向切面的编程),实现如权限拦截等功能。

体系结构:

橙色是Servlet Filters,过滤器链;
浅蓝色是Struts CoreStruts2的核心部分;
浅绿色是InterceptorsStruts2的拦截器;
浅黄色是User Created,由开发人员创建,包括struts.xml、ActionTemplate

基本处理流程如下:

加载类(FilterDispatcher);
读取配置(struts2配置文件中的Action);
派发请求(客户端发送请求);
调用Action(FilterDispatcher从struts2配置文件中读取与之相对应的Action);
启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证);
处理业务(回调Actionexecute()方法);
响应处理(包括返回响应、查找响应等)

3 How:怎样使用Struts2框架
(1) 创建一个Struts2项目;

在pom.xml文件导入Spring相关的依赖,如:
struts2-core、log4j-core、log4j-api、commons-io、asm、asm-commons、asm-tree、xwork-core、commons-fileupload、commons-lang等;
如:

<properties>
	<struts.version>×.×.×</struts.version>
</properties>
<dependencies>
	<dependency>
		<groupId>org.apache.struts</groupId>
		<artifactId>struts2-core</artifactId>
		<version>$struts.version</version>
	</dependency>
</dependencies>

拷贝struts.xml文件:
普通的java web项目应该将文件放在src文件夹下面,基于Spring-maven项目将文件放在src/main/resources文件夹下面;
struts.xml文件主要是配置请求路径对应action类的,以及结果跳转路径。
配置文件写法示例,如:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
   "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
	<constant name="struts.i18n.encoding" value="UTF-8"/>  
	<!-- struts2允许动态加载xml配置文件,例如 actions.xml. 使得我们在开发的过程中修改完mapping文件后可以动态加载进来,而不用重启应用 -->
    <constant name="struts.configuration.xml.reload" value="true"/>
    <!-- 在struts.properties或者struts.xml中有devMode的配置,在devMode被激活的模式下,能够明显的提高开发效率,它会提供更多的日志或着debug信息。当然提高开发效率,在性能方面会付出一定的代价,所以struts默认的是非开发模式 -->
    <constant name="struts.devMode" value="false" />
    <!-- struts.properties中加入全局的设置,这样就不用在每个标签设置theme了 -->
    <constant name="struts.ui.theme" value="simple" />
	<!-- 设置上传文件大小 -->
    <constant name="struts.multipart.maxSize" value="20971520"></constant>
    <constant name="struts.multipart.saveDir" value="/tmp"/>

	<!-- 由spring来管理struts2的action类 -->
    <constant name="struts.objectFactory" value="spring" />
    <constant name="struts.convention.default.parent.package" value="default" /> 
    <!-- 是否支持动态方法调用 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <!--Struts2配置文件中的class属性去和Spring配置文件中的id属性进行关联,如果能找到则由Spring创建,否则由Struts2框架自身创建,然后由Spring来装配 -->
    <constant name="struts.objectFactory.spring.autoWire" value="name"/>
    <!-- package元素可以把逻辑上相关的一组ActionResultIntercepter等元素封装起来,形成一个独立的模块 -->
    <!-- 没有配置namespace的,因此在访问的时候,是直接在webcontext下面写要访问的action名称 -->
	<package name="default" extends="struts-default">
		<action name="test" class = "com.test.action.TestAction" method = "test">
			<result name="success">/success.jsp</result>
		</action>
	</package>

	<!-- 访问的时候就需要加上namespace -->
	<package name="struts2" namespace="/struts2" extends="struts-default">
		<action name="test1" class = "com.test.action.TestAction" method = "test1">
			<result name="success">/success.jsp</result>
		</action>
	</package>
</struts>

在web.xml中配置Struts2的过滤器:
拦截器:在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略;
过滤器:过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息;
在Servlet作为过滤器使用时,它可以对客户的请求进行处理。处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。
如:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>*.action</url-pattern>
  </filter-mapping>
</web-app>

(2) 实现Action控制类。

实现Action接口:
当 Action 类处理用户请求成功后,有人习惯返回 index 字符串,有人习惯返回 success 字符串,这会导致在一个 Action 中可能会返回各种不同的值,十分不利于项目的统一管理。
为了让用户更规范地创建 Action 类,Struts2 提供了一个 Action 接口,该接口定义了 Action 类应该实现的规范,用户在创建 Action 时,可以实现这个接口。Action 接口中的具体代码如下所示:
public interface Action 
    //定义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";
    //定义处理用户请求的execute()方法
    public String execute() throws Exception;


继承ActionSupport类:
由于自定义的Action类继承了ActionSupport类,因此必须定义一个变量 serialVersionUID;
这是因为ActionSupport类实现了Serializable接口,任何实现了Serializable接口的类都必须声明变量serialVersionUID;
其示例代码如下所示:
public class LoginAction extends ActionSupport
    private static final long serialVersionUID = 1L;
    @Override
    public String execute() throws Exception
        return super.execute();
    

参考资料:
http://c.biancheng.net/view/4052.html Struts2是什么?它和Struts1有什么区别?
https://blog.csdn.net/Q1368089323/article/details/109522622 Struts2 框架
https://blog.csdn.net/gengxiaoming7/article/details/47340269 Struts2中action访问路径配置

以上是关于框架学习系列 之Struts2框架学习总结的主要内容,如果未能解决你的问题,请参考以下文章

java框架学习系列

Java后台处理框架之struts2学习总结

SSH框架之Struts2系列

SSH框架之Struts2系列

框架学习系列 之Spring框架学习总结

Struts2,Hibernate,Spring框架学习总结