一、Struts2介绍
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
二、由Servlet引出Struts2
Servlet优点:
- 是mvc的基础,其他的框架比如struts1,struts2,webwork都是从servlet基础上发展过来的。所以掌握servlet是掌握mvc的关键。
- Servlet把最底层的api暴漏给程序员,使程序员更能清楚的了解mvc的各个特点。
- 程序员可以对servlet进行封装。Struts2就是从servlet中封装以后得到的结果。
- 市场上任何一个mvc的框架都是servlet发展过来的,所以要想学好struts2这个框架,了解servlet的运行机制很关键。
Servlet缺点:--- Struts1 and WebWork --- Struts2(实质上是以WebWork为核心,统一了Struts1和WebWork两个框架)
- 每写一个servlet在web.xml中都要做相应的配置。如果有多很servlet,会导致web.xml内容过于繁多。
- 这样的结构不利于分组开发。
- 在servlet中,doGet方法和doPost方法有HttpServletRequest和HttpServletResponse参数。这两个参数与容器相关,如果想在servlet中作单元测试,则必须初始化这两个参数。
- 如果一个servlet中有很多个方法,则必须采用传递参数的形式,分解到每一个方法中。
三、Struts2工作原理
详细运行流程请参阅:
http://blog.csdn.net/ka_ka314/article/details/78870473
四、Struts2开发环境搭建
(1) 引入核心jar包
- asm-x.x.jar :开发扩展jar包
- asm-commons-x.x.jar:开发扩展jar包
- asm-tree-x.x.jar :开发扩展jar包
- commons-fileupload-x.x.x.jar:支持文件上传的jar包
- commons-io-x.x.x.jar:支持文件上传的jar包
- commons-lang-x.x.jar:基础jar包
- freemarker-x.x.x.jar:支持freemarker的jar包(UI语言)
- javassist-x.x.x.jar:支持字节码编辑jar包
- ognl-x.x.x.jar :支持ognl表达式jar包
- struts2-core-x.x.x.jar:struts2核心jar包
- xwork-core-x.x.x.jar:webwork类库
(2) 创建struts.xml
在src目录下创建struts.xml文件
struts.xml详细配置请参阅:
http://blog.csdn.net/ka_ka314/article/details/78878274
(3) 配置web.xml
<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>
<url-pattern>/*</url-pattern>
</filter-mapping>
五、简单入门实例
(1)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>
<!--
extends:继承
-->
<package name="helloworld" namespace="/" extends="struts-default">
<action name="helloWorldAction" class="com.x.struts2.action.HelloWorldAction">
<!-- result-type struts2结果集 -->
<result name="index">index.jsp</result>
</action>
</package>
</struts>
(2)HelloWorldAction
public class HelloWorldAction {
//默认调用方法
public String execute(){
System.out.println("hello world");
return "index";
}
}
(3)index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
HelloWorld
</body>
</html>
六、Struts2作用域
struts2作用域详细信息请参阅:
http://blog.csdn.net/ka_ka314/article/details/78873326
七、Struts2拦截器
http://blog.csdn.net/ka_ka314/article/details/78880614
八、Struts2值栈
http://blog.csdn.net/ka_ka314/article/details/78880743
九、Ognl