框架学习系列 之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 Core,Struts2的核心部分;
浅绿色是Interceptors,Struts2的拦截器;
浅黄色是User Created,由开发人员创建,包括struts.xml、Action、Template。
基本处理流程如下:
加载类(FilterDispatcher);
读取配置(struts2配置文件中的Action);
派发请求(客户端发送请求);
调用Action(FilterDispatcher从struts2配置文件中读取与之相对应的Action);
启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证);
处理业务(回调Action的execute()方法);
响应处理(包括返回响应、查找响应等)。
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元素可以把逻辑上相关的一组Action、Result、Intercepter等元素封装起来,形成一个独立的模块 -->
<!-- 没有配置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框架学习总结的主要内容,如果未能解决你的问题,请参考以下文章