最近开发项目时,发现以前学习的一些框架技术都遗忘的厉害,还得上网去百度一下!但这样无疑浪费了很多时间,为了以后的开发能够更轻松一些,所以在这里总结一下这些框架技术,就从struts2开始吧!
- struts2的简介
- struts2与struts1
- struts2的工作原理
- struts2的工作流程
- struts2的开发步骤
(一)struts2的简介:
Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架
(二)struts2与struts1:
struts2和struts1之间的关系
严格的来说,struts2和struts1之间是没有关系的
struts2不是struts1的升级,而是继承的webwork的血统
它们都是Apache组织下的开源框架
它们都是基于MVC设计模式的Web应用程序框架struts2和struts1之间的区别
1)Action类的实现方式:
Struts1的Action在实现的时候必须扩展Action类或者Action的子类,Struts2的Action类实现的时候可以不用实现任何类和接口,虽然Struts2中提供一个ActionSupport类,但是,不是必须的。
2)Struts1的Action类是单例模式,必须设计成线程安全的,Struts2则为每一个请求产生一个实例
3)Struts1的Action类依赖与Servlet API,从其execute的方法签名可看出,execute方法有两个Servlet的参数HttpServletRequest和HttpServletResponse,Struts2则不依赖于Servlet API
4)以为Struts1依赖于Servlet API这些Web元素,因此对Struts1的Action进行测试的时候是很困难的,需要借助与其他的测试工具,Struts2的Action可以象测试其他的一些Model层的Service类一样进行测试
5)Struts1的Action与View通过ActionForm或者其子类进行数据传递,虽然也有LazyValidationForm这样的ActionForm的出现,但是,还是不能象其他层面那样通过一个简单的POJO进行数据传递,而Struts2将这样的奢望变成了现实
6)Struts1绑定了JSTL,为页面的编写带来方便,Struts2整合了ONGL,也可以使用JSTL,因此,Struts2下的表达式语言更加强大
( 三) struts2的工作原理:
在Struts2框架中的处理大概分为以下几个步骤 :
1. 客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2. 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3. 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4. 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5. ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6. ActionProxy创建一个ActionInvocation的实例。
7. ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8. 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
(四)struts2的工作流程:
1、客户端浏览器发出HTTP请求.
2、根据web.xml配置,该请求被FilterDispatcher接收
3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面
6、返回HTTP响应到客户端浏览器
(五)struts2的开发步骤:
以struts2输出最经典的“HelloWorld”为例:
1.新建web项目
新建名称为“Struts”的web工程,新建方法:File->New->Web Service Project->Profect Name中输入:Struts->点击Finish按钮完成新建。
2.为项目添加Struts2的类库
在Apache官方网站下载最新版本的Sruts2,网址:http://struts.apache.org/,下载好后解压。
(1)在Struts工程的右键菜单上选择”Properties”命令,打开”Properties for Struts2”对话框,在struts2解压后的lib目录中选择如下13个文件:asm-3.3.jar,asm-commons-3.3.jar,asm-tree-3.3.jar,commons-fileupload-1.3.jar,commons-io-2.2.jar,commons-lang3-3.1.jar,commons-logging-1.1.3.jar,freemarker-2.3.19.jar,javassist-3.11.0.GA.jar,log4j-1.2.17.jar,ognl-3.0.6.jar,struts2-core-2.3.16.jar,xwork-core-2.3.16.jar
(2)再把上面13个jar包考到“WebRoot\WEB-INF\lib”目录下
3.配置web.xml文件
Struts2的web.xml文件配置方法非常简单,即在web.xml中添加过滤器和默认配置文件,并设置为所有的请求(/*)都要通过这个过滤器,具体如下:
<!--?xml version="1.0" encoding="UTF-8"?-->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<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>
</web-app>
4.编写jsp界面
具体如下:
<%@ page language="java" import="java.util.*"contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<title>Hello World!</title>
<h2>
<s:property value="message">
</s:property>
</h2>
5.编写Action
Action实际就是一个普通的java类,是最基本的逻辑处理单元,在MVC模式中分发器分发给不同的Action类来处理请求。Action类一般要继承ActionSupport类,因为其提供的大量的基本功能,如错误信息处理等。具体如下:
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport {
public static final String MESSAGE="Hello world,I'm from struts2";
public String execute() throws Exception{
setMessage(MESSAGE);
return SUCCESS;
}
private String message;
public void setMessage(String message){
this.message=message;
}
public String getMessage(){
return message;
}
}
6.配置struts.xml文件
struts.xml要建在荐的src目录下,名为struts.xml,当项目发布以后,这个文件将会被复制到WEB-INF/classes下。新建方法:选择菜单New->File,接着在弹出对话框中的File name右侧输入框中主文件名struts.xml,点击Finish按钮关闭对话框。具体如下:
<!--?xml version="1.0" encoding="UTF-8" ?-->
<struts>
<constant name="struts.devMode" value="false">
<package name="default" extends="struts-default" namespace="/">
<result>/HelloWorld.jsp</result>
</action>
</package>
</constant></struts>
结束语
技术的价值不在于领先而在于应用!