引言
Struts2是一个开源的MVC(Model-View-Controller)框架,用于构建动态的、数据驱动的Web应用程序。它继承了Struts 1的设计理念,但在功能性和灵活性上进行了显著提升。本文将深入解析Struts2框架,包括其核心概念、架构原则、实战技巧以及常见问题解答。
核心概念
Actions
Actions是Struts2框架中的核心组件,负责处理用户请求,执行业务逻辑,并准备数据以供视图层展示。Action类通常实现了Action接口或继承自ActionSupport类,以便利用框架提供的默认行为和功能。
Interceptors(拦截器)
拦截器用于在Action执行前后执行特定任务,如权限检查、数据预处理或后处理。拦截器可以被配置成拦截器栈,以实现更复杂的逻辑流程控制。
值栈与OGNL
值栈是Struts2用来存储和传递数据的对象容器,它使用OGNL作为其表达式语言,使得开发者能够轻松访问和修改数据对象的属性。
结果类型
Struts2框架支持多种结果类型,如JSP、FreeMarker模板、Velocity模板、JSON、XML等,这些结果类型决定了Action执行后如何渲染响应给客户端。
架构原则
Struts2框架遵循以下架构原则:
- 松耦合:组件之间通过接口和事件进行通信,降低了组件之间的依赖性。
- 模块化:框架被设计成模块化的,使得开发者可以根据需要选择和配置所需的模块。
- 可扩展性:框架提供了丰富的扩展点,使得开发者可以轻松扩展框架的功能。
实战攻略
配置web.xml
<web-app>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<url-pattern>/</url-pattern>
</filter-mapping>
</web-app>
简单的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>
<package name="default" extends="struts-default">
<action name="index" class="com.example.IndexAction">
<result>/index.jsp</result>
</action>
</package>
</struts>
常见问题解答
问题1:HTTP Status 404 - No result defined for action action.EntryAction and result input
解答:检查页面上是否有中英文符号错误,是否有struts标签错误等。
问题2:Exception starting filter struts2 java.lang.NullPointerException
解答:检查struts.xml文件中是否有配置开发模式,以及commons-fileupload和commons-io-1.3.2这两个jar包是否已导入。
问题3:xxx cannot be resolved to a type
解答:如果xxx是sessionFactory,则与Hibernate有关。请检查Hibernate配置文件,对照错误信息进行修改。
总结
Struts2是一个功能强大且灵活的Web应用框架,适合用于构建复杂的Web应用程序。通过本文的解析,读者应该对Struts2有了更深入的理解,能够更好地应用它于实际项目中。